只允许UIPageViewController在不触及UIImageView内部时滚动

时间:2015-03-02 19:13:34

标签: ios xcode swift uiimageview uipageviewcontroller

在XCode / Swift中,是否可以使用UIPageViewController,当触摸发生在页面控制器页面中包含的UIImageView之外时,它只会水平滚动?

到目前为止,在搜索类似问题时,我只能找到一种方法来禁用UIPageViewController中的所有触摸,但这样做会使UIImageView无法触及。下面的代码显示了我如何想象如果可能的话...... [/ p>

@IBOutlet weak var MyImageView: UIImageView!
var location = CGPoint(x: 0, y: 0)

override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
    var touch : UITouch! = touches.anyObject() as UITouch
    location = touch.locationInView(self.view)

    if /* 1.) detect if touch is inside of MyImageView */ {
        // 2.) Disable Page Controller scroll but still
        // allow any kind of touch actions to take place within MyImageView
    } else {
        // 3.) Enable Page Controller scroll?
    }
}

1。)我可以很容易地想出一种原始的处理方式。但是,我可以从更有经验的Swift

中学到一些东西

2。)无法弄明白......

3。)无法弄明白......

我再次对此感到陌生......如果我需要提供更多信息,请告诉我,并感谢您查看此问题!

1 个答案:

答案 0 :(得分:1)

1)你需要检查视图是否包含命中点。

view.frame.contains(point)

2)您可以做的是记录滚动视图的当前内容偏移量,并且每个帧都将内容偏移量设置为相同的值(这使您可以启用触摸交互但将内容保留在同一位置:

scrollview.contentOffset = frozenContentOffsetValue

3)当你想再次允许滚动时,只需停止分配上述内容偏移。

//基于使用UIPageView控制器而不是UIScrollView进行更新

1)同上,检查是否view.frame.contains(point)

2)如果你的观点确实包含了你要做的事情:

UIPageViewController.view.userinteractionEnabled = false
UIPageViewController.view.userinteractionEnabled = true

这样做会禁用当前触摸的效果,但下次会再次触摸。但是它的设置使它总是取消触摸,当你想从你的UIView取消触摸时。