我有一个包含3个视图的水平滚动视图。第一个视图(最左侧)是地图视图。我想要的功能是用户只能通过从最右边缘滑动来转到第二个视图,因为我想要其他手势来操纵地图。但是,从第二个和第三个视图,他们可以通过在视图上的任何位置滑动来向左或向右移动。我已经搜索了如何做到这一点,并且在我的具体情况下没有运气。
我不知道从哪里开始如此,如果有人能指出我的方向是正确的。
到目前为止,我已经尝试过:
在第一个视图上禁用滚动并添加代码:
let edgeRecognizer = UIScreenEdgePanGestureRecognizer(target: firstView, action: "goToSecondView:")
edgeRecognizer.edges = .Right
func goToSecondView(){
scrollView.contentOffset = CGPoint(x: self.scrollView.contentSize.width/3, y: scrollView.contentOffset.y)
}
答案 0 :(得分:3)
非常简单,只需将此代理功能放在UIScreenEdgePanGestureRecognizer
上并设置UIGestureRecognizerDelegate
使用Xcode 8和Swift 3:)
您需要这3个代理功能。
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldBeRequiredToFailBy otherGestureRecognizer: UIGestureRecognizer) -> Bool {
return false
}
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive press: UIPress) -> Bool {
return false
}
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
return true
}
答案 1 :(得分:2)
不要使用UIScreenEdgePanGestureRecognizer
,而是让地图视图看不到靠近屏幕右边缘的触摸。这样,触摸将传递到滚动视图的UIPanGestureRecognizer
。
这是我的设置:
(注意:图片中的视图框不匹配约束。)
我有一个包含三个“页面”视图的滚动视图。第1页(“MapHolder”)包含地图视图作为子视图。第2页(“粉红色”)和第3页(“绿色”)只有标签子视图,背景颜色很容易看到。
视图大小受限制如下:
请注意,地图视图比其父视图宽(第1页)。第1页视图关闭了“剪辑子视图”(这是默认设置),因此位于第1页视图之外的地图部分仍然可见,但不会接收到触摸。
视图位置受到如下限制:
从页面视图到滚动视图的约束控制滚动视图的contentSize
。
最后,我为滚动视图打开了“Paging Enabled”。结果:
我上传了我的故事板to this gist。只需将其放入一个新项目(替换现有的Main.storyboard)并与MapKit链接即可试用。