繁体   English   中英

仅在不触摸UIImageView内部时允许UIPageViewController滚动

[英]Only allow UIPageViewController to scroll when not touching inside UIImageView

在XCode / Swift中,是否可能有一个UIPageViewController仅在触摸发生在页面控制器页面中包含的UIImageView之外时才水平滚动?

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

@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)您需要检查视图是否包含命中点。

view.frame.contains(point)

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

scrollview.contentOffset = frozenContentOffsetValue

3)当您想再次滚动时,只需停止分配上述contentoffset。

//根据使用UIPageView控制器而不是UIScrollView进行更新

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

2)如果您的视图确实包含该点,那么您将执行以下操作:

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

这样做是禁用当前触摸的效果,但下次将允许再次触摸。 但是它的设置使其总是在您要从中取消触摸的UIView中取消触摸。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM