2017-06-18 2 views
1

パンジェスチャーを使用してアニメーションのようなスクロールビューを実現したい。 私はパンジェスチャーアクションメソッドの下に次のコードでscrollviewのほぼすべてのプロパティを達成した:パンジェスチャーアニメーション

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