我有一个scrollView,其中添加了一些子视图。滚动和缩放工作正常。
我想要的是当放大scrollView时,将1指触摸的行为改为平移而不是滚动。
现在,如果您放大并用1个手指移动,则只能滚动放大的内容。用两根手指可以平移。这是我想改变的行为。
我还没有找到解决这个问题的方法,除了试图改变所需的最小和最大接触外,我真的没有任何想法,但它似乎没有效果。
func scrollViewDidZoom(_ scrollView: UIScrollView) {
scrollView.panGestureRecognizer.maximumNumberOfTouches = 1
}
func scrollViewDidEndZooming(_ scrollView: UIScrollView, with view: UIView?, atScale scale: CGFloat) {
if scale == 1 {
scrollView.panGestureRecognizer.maximumNumberOfTouches = 2
}
}
答案 0 :(得分:0)
我意识到我遇到的问题是每个子视图都有自己的scrollView(在我的例子中是我的子视图wkWebViews)。他们正在处理他们自己的缩放,即使我试图从UIScrollView缩放。
我采取了这些步骤来解决这个问题。
MyClass: UIViewController, UIScrollViewDelegate {
// This view should handle the zooming
@IBOutlet var scrollView: UIScrollView!
// .. and this view will contain all subviews to be zoomed
@IBOutlet var wrapper: UIView!
override func viewDidLoad() {
super.viewDidLoad()
self.scrollView.delegate = self
self.addSViewsToScrollView()
}
func addViewsToScrollView () {
// MARK: - Step 1
// .. set wkWebView scrollview maximum and minimum zoom scale to 1.
let myArray: [WkWebView]? = [WkWebView(),WkWebView(),WkWebView()]
for view in myArray {
wkWebView.scrollView.maximumZoomScale = 1
wkWebView.scrollView.minimumZoomScale = 1
wkWebView.isUserInteractionEnabled = false // This is key otherwise it wont work
wkWebView.scrollView.isUserInteractionEnabled = false // .. this aswell
}
// MARK: - Step 2
// .. add all views to a wrapper view
for view in myArray {
self.wrapperView.addSubview(view)
}
}
func viewForZooming(in scrollView: UIScrollView) -> UIView? {
return self.wrapper
}
}
通过返回单个视图,放大状态下的平移工作正常。此外,wkWebView scrollViews不再干扰缩放。