웹뷰에서 pdf의 경우 줌 기능이 필요해서 다음과 같이 정리했습니다.
컴포넌트별로 이벤트를 제어할 수 있는 방법이 있을 것 같아서 레퍼런스를 찾아봤지만 찾을 수가 없었습니다…
뭔가 마음에 안들지만 해보자!
일정이 있어요!
화면 확대를 제어하는 변수 선언
확대/축소를 전역적으로 제어할 수 있는 변수를 선언합니다.
class MainViewController: BaseViewController {
// 화면 확대를 제어할 변수 선언
var isPinchGestureRecognizer = false
}
호출된 작업에 따라 줌 플래시 업데이트
PDF URL 경로를 사용하여 WKWebView 유형으로 선언된 wkWindowFull 변수를 로드합니다.
// 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))
// 확대/축소...
self.isPinchGestureRecognizer = true
...
}
}
scrollViewWillBeginZooming.pinchGestureRecognizer 설정
extension MainViewController: UIScrollViewDelegate {
...
// 스크롤 뷰 확대 / 축소 시작 예정 알림
func scrollViewWillBeginZooming(_ scrollView: UIScrollView, with view: UIView?) {
// pinchGestureRecognizer : 핀치 제스처를 제어하기 위한 제스처 인스턴스
// scrollView.pinchGestureRecognizer?.isEnabled = false
scrollView.pinchGestureRecognizer?.isEnabled = self.isPinchGestureRecognizer
}
...
}
인터넷에서 전화
ios 브리지를 통해 windowFullPDF라는 작업으로 ios에 처리를 요청합니다.
const message = {
action: 'windowFullPDF',
params: {url: 'https://xxxxxx'}
};
window.webkit.messageHandlers.IosBridge.postMessage(message);
기본 사항을 확인했으니 나머지는 상황에 맞게 요리해 봅시다!
크크크크크크크!
!