Language/iOS,AOS

scrollView 확대/축소 방법

건담아빠 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);

 

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

짝짝짝!!