2017-05-29 10 views
0

私のUiViewには、ユーザーがスワイプした場合に回転アニメーションを実行する 'container'というsubViewがあります。 基本的には、ユーザーがスワイプしながらホイールをある程度下にスワイプすると、反対の動作を実行するホイールのようです。UISwipeGestureRecognizer working weird

は、ここに私のviewDidLoadコードです:

override func viewDidLoad() { 
    super.viewDidLoad() 

    //Swipe Gesture Recognizers Setup 
    let swipeUp = UISwipeGestureRecognizer(target: self, action: #selector(self.swipeUp(_:))) 
    swipeUp.direction = .up 
    swipeUp.delegate = self as? UIGestureRecognizerDelegate 

    let swipeDown = UISwipeGestureRecognizer(target: self, action: #selector(self.swipeDown(_:))) 
    swipeDown.direction = .down 
    swipeDown.delegate = self as? UIGestureRecognizerDelegate 

    view.addGestureRecognizer(swipeDown) 
    view.addGestureRecognizer(swipeUp) 
} 

これらは上または下にスワイプための2つの機能です:

func swipeUp(_ sender: UISwipeGestureRecognizer) { 
    print("Swiped Up") 
    UIView.animate(withDuration: 1) { 
     self.borderContainer.transform = CGAffineTransform(rotationAngle: 0) 
    } 
} 

func swipeDown(_ sender: UISwipeGestureRecognizer) { 
    print("Swiped Down") 
    UIView.animate(withDuration: 1) { 
     self.borderContainer.transform = CGAffineTransform(rotationAngle: 45) 
    }} 

すべてが素晴らしい作品、consolleは毎回アクションが実行されスワイプ方向を印刷していますしかし、それは関連する関数を各方向に1回しか呼びません。 は私が間違って何をやっている...私はそれを下にスワイプしたり、ユーザーが望んでいつでも追いつくことができるようにしたい、私は下にスワイプすると、その後、私は...

をスワイプすることができますことを

意味しますか? 私はビューとともに回転UIGestureRecogniserについて読んだので、それはもはや到達できないのですが、私はスーパーにジェスチャー認識器を適用するためのソリューションを適用し、私はアニメーションだビューに... Why does the Swipe Gesture Recognizer only work once?

すべてのヘルプは非常にではありません感謝!

+1

ジェスチャ認識ではなく、変換作業がわからないという問題があります。あなたは欲望回転を達成するために角度を累積する必要があります。例の場合、2回スワイプするには90度回転させる必要があります –

答えて

1

スワイプダウン機能を詳しく見てください。スワイプダウンするたびに同じ値を設定します。

毎回変更したい場合は、を現在の角度に45度加算してください。さもなければ、以前と同じ位置にあり続けるでしょう。

borderContainer.transform.rotated(by: 45)を使用してください。

+0

ありがとう! border.Container.transform.rotatedはうまくいきませんでしたが、あなたは私に見た目の正しいヒントをくれました。私は角度をチェックし、それに応じて簡単なケースのループをチェックして固定しました! – Alex

0

CGAffineTransformあなたはsomething.Yourスワイプを回転させる場合はOKですが、あなたはそれを動作させるために回転コードを少し変更する必要があることを念頭にrotation.Keepのための唯一の最短経路を選択してください。