2017-06-18 90 views
1

我想使用平移手势来实现像动画一样的滚动视图。 我已经实现几乎所有滚动视图的属性与下平移手势操作方法如下代码:潘姿手势动画

if recognizer.state == UIGestureRecognizerState.changed{ 

     recognizer.view!.center = CGPoint(x: recognizer.view!.center.x, y: recognizer.view!.center.y + translation.y) 

     recognizer.setTranslation(CGPoint.zero, in: self.view) 

    } 

    if recognizer.state == UIGestureRecognizerState.ended { 
     // 1 
     let velocity = recognizer.velocity(in: self.view) 
     let magnitude = sqrt((velocity.x * velocity.x) + (velocity.y * velocity.y)) 
     let slideMultiplier = magnitude/200 
     print("magnitude: \(magnitude), slideMultiplier: \(slideMultiplier)") 

     // 2 
     let slideFactor = 0.1 * slideMultiplier  //Increase for more of a slide 
     // 3 
     var finalPoint = CGPoint(x:recognizer.view!.center.x , 
           y:recognizer.view!.center.y + (velocity.y * slideFactor)) 
     // 4 
     //finalPoint.x = min(max(finalPoint.x, 0), self.view.bounds.size.width) 
     //finalPoint.y = min(max(finalPoint.y, 0), self.view.bounds.size.height) 

     // 5 
     UIView.animate(withDuration: Double(slideFactor), 
         delay: 0, 
         // 6 
      options: UIViewAnimationOptions.curveEaseOut, 
      animations: {recognizer.view!.center = finalPoint }, 
      completion: nil) 
    } 

我的问题是: 当平移手势结束我有动画来查看。 直到动画结束,我的触摸没有被uiview接收。

我的意思是只有当动画代码完成时才会出现另一个平移手势。

在动画结束之前,我的平移手势是否可以识别触摸?

任何想法???

+0

是否可以分享您的代码? – Mohamad

回答

2

您应该为动画使用allowUserInteraction选项。

UIView.animate(withDuration: Double(slideFactor), delay: 0.0, options: [.curveEaseOut, .allowUserInteraction], animations: { 
    recognizer.view?.center = finalPoint 
}, completion: nil) 
+0

你对我是超级天使,非常感谢你非常非常:) – user3804063