ABOUT ME

공부좀해보자! 다른사람에게 보여준다기보다 지금은 개발노트

Today
Yesterday
Total
  • scrollView 확대/축소 방법
    Language/iOS,AOS 2023. 2. 24. 14:48

     

    웹뷰에서 pdf 일 경우에는 확대/축소 기능이 필요하여 작업을 처리하다보니 아래와 같이 정리하게 되었다.

    컴포넌트 별로 이벤트를 제어할 수 있는 방법이 있을거라고 생각하고 레퍼런스를 찾아보았지만 찾지 못했다...

    뭔가 맘에 안들지만 일단 하자! 일정이 있으니깐!

     

    화면 확대를 제어할 수 있는 변수 선언

    전역으로 확대/축소를 제어할 수 있는 변수를 선언한다.

    class MainViewController: BaseViewController {
        // 화면 확대를 제어할 변수 선언
        var isPinchGestureRecognizer: Bool = false
    }

     

    호출되는 Action에 따라서 확대/축소 플래스 갱신

    WKWebView형으로 선언된 wkWindowFull 변수에 pdf URL 경로를 가지고 로드한다.

    // MARK: - 웹 액션 - 정의
    // WebAction을 구분하는데 사용되는 타입
    enum WebAction: String {
        ....
        case windowFullPdf
    }
    extension MainViewController: WKScriptMessageHandler {
        func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
            guard message.name == "IosBridge",
                  let messages = message.body as? [String: Any],
                  let action = messages["action"] as? String else { return }
            
            let webAction = WebAction(rawValue: action)
            
            switch webAction {
            ...
            case .windowFullPdf:
                guard let params = messages["params"] as? [String: String],
                      let url = params["url"] as? String,
                      let webUrl = URL(string: url) else {
                    return
                }
                
                wKWindowFull?.load(URLRequest(url: webUrl))
                
                // 확대 허용 (true)
                self.isPinchGestureRecognizer = true as Bool
            ...
        }
    }

     

    scrollViewWillBeginZooming.pinchGestureRecognizer 설정

    extension MainViewController: UIScrollViewDelegate {
        ...
        // 스크롤 뷰 확대 / 축소 시작 예정 알림
        func scrollViewWillBeginZooming(_ scrollView: UIScrollView, with view: UIView?) {
            // pinchGestureRecognizer : 핀치 제스처를 제어하기 위한 제스처 인스턴스
            // scrollView.pinchGestureRecognizer?.isEnabled = false
            scrollView.pinchGestureRecognizer?.isEnabled = self.isPinchGestureRecognizer
        }
        ...
    }

     

    웹에서 호출

    ios bridge를 통해서 ios에 windowFullPDF라는 action으로 처리 요청을 한다.

    const message = {
         action: 'windowFullPDF',
         params: {url: 'https://xxxxxx'}
    };
    window.webkit.messageHandlers.IosBridge.postMessage(message);

     

    기본적인건 확인했으니 나머지 부분들은 상황에 맞게 요리해보자!

    짝짝짝!!

    'Language > iOS,AOS' 카테고리의 다른 글

    댓글

Designed by Tistory.