我正在尝试使用swift添加平移手势,但我无法使其正常工作。在解决此问题时,我只能确认处理程序没有被调用。在UIViewController的子类中有一个名为RMConstructionViewController的子类。在这个控制器中,我有一个包含UIView的scrollView,它占据整个空间作为我的内容。然后,我以编程方式将子视图添加到我的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
为什么我不能让平底锅工作的任何想法?
答案 0 :(得分:0)
问题可能与UIScrollView
拥有自己的GestureRecognizer有关。 UIGestureRecognizerDelegate
协议有一个允许多个GestureRecognizers同时处理事件的方法:
func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWithGestureRecognizer otherGestureRecognizer: UIGestureRecognizer) -> Bool {
return true
}
答案 1 :(得分:0)
我终于明白了。当以编程方式设置手势时,有效的目标是我的班级(自我)。然后,让这个工作的唯一方法是将我的子视图(symbolView)直接添加到scrollView。因此,我想构建的视图层次结构中有一些禁止平移手势工作的东西。我实际上并不知道为什么层次结构是问题,但我确实让它发挥作用。