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' 카테고리의 다른 글

    iOS 푸시 랜딩 (active, inactive, background)  (0) 2023.03.01
    웹뷰 캐시 삭제  (0) 2023.03.01
    페이스북 간편 로그인  (0) 2023.02.23
    네이버 간편 로그인 연동  (0) 2023.02.21
    카카오 간편 로그인 연동  (0) 2023.02.20

    댓글

Designed by Tistory.