我正试着用斯威夫特添加一个平底锅手势,但我无法做到这一点。在解决这个问题时,我只能确认处理程序没有被调用。In中有一个名为UIViewController的子类RMConstructionViewController。在这个控制器中,我有一个scrollView,它包含一个UIView,它占用整个空间作为我的内容。然后,我以编程方式将子视图添加到我的contentView中。我的完整观点如下:
我想我搞不懂目标到底是什么,等等。下面是我认为可行的方法:
let gestureRecognizer = UIPanGestureRecognizer(target: self, action: #selector(handleDatePan(_:)))
symbolView.addGestureRecognizer(gestureRecognizer)在上面的代码之后,我立即将我的symbolView添加到upperView:
upperView.addSubview(symbolView)那么我的处理程序是:
@IBAction func handleDatePan(gestureRecognizer: UIPanGestureRecognizer) {
if gestureRecognizer.state == UIGestureRecognizerState.Began || gestureRecognizer.state == UIGestureRecognizerState.Changed {
let translation = gestureRecognizer.translationInView(upperView)
if gestureRecognizer.view!.center.x >= 0 && gestureRecognizer.view!.center.x <= currentRoadmap!.timeline!.width{
gestureRecognizer.view!.center = CGPointMake(gestureRecognizer.view!.center.x + translation.x, gestureRecognizer.view!.center.y)
if gestureRecognizer.view!.center.x < 0 {
gestureRecognizer.view!.center.x = 0
}
if gestureRecognizer.view!.center.x > currentRoadmap!.timeline!.width {
gestureRecognizer.view!.center.x = currentRoadmap!.timeline!.width
}
gestureRecognizer.setTranslation(CGPointMake(0,0), inView: upperView)
}
}
}在上面的代码中,"currentRoadmap!.timeline!.width“等同于CGFloat
你知道我为什么不能让平底锅工作吗?
发布于 2016-05-29 07:33:56
这个问题可能与UIScrollView有自己的GestureRecognizer有关。UIGestureRecognizerDelegate协议有一种允许多个GestureRecognizers同时处理事件的方法:
func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWithGestureRecognizer otherGestureRecognizer: UIGestureRecognizer) -> Bool {
return true
}发布于 2016-05-29 15:06:03
我想出来了-终于。在以编程方式设置手势时,起作用的目标是我的类(self)。然后,使其工作的唯一方法是将我的子视图(symbolView)直接添加到scrollView中。所以,在视图层次结构中,我想构建的是禁止pan手势工作的东西。我不知道为什么等级制度是问题所在,但我确实让它发挥作用了。
https://stackoverflow.com/questions/37507079
复制相似问题