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);
기본적인건 확인했으니 나머지 부분들은 상황에 맞게 요리해보자!
짝짝짝!!