2017-01-19 10 views
0

初心者は - 以下のコードはTouchesBegan関数でうまく動作します。しかし、GestureRecongnizer(スワイプまたはタップ)では動作しません。ジェスチャーレコグナイザがまったく反応しないようです。GestureRecogniserは応答しません

私が迅速2とXcode 7.3

override func viewDidLoad() 
{ ... 
let SwipeUp = UISwipeGestureRecognizer(target: self, action:#selector(ViewController.Dragged(_:))) 
    SwipeUp.direction = UISwipeGestureRecognizerDirection.Up 
    self.egg.addGestureRecognizer(SwipeUp) 
} 
    func Dragged(gesture: UIGestureRecognizer) 
{ 
    UIView.animateWithDuration(0.4, delay: 1.0, options: .CurveEaseOut, animations: { 
     let eggFrame = self.egg.frame 
     eggFrame.origin.y -= 700 
     self.egg.frame = eggFrame 
     }, completion: { finished in print("done!") } 
} 
+0

これはどのようにしてコンパイルされますか? Swiftは、letと宣言されている構造体を変更することはできません。 '' 'let eggFrame = self.egg.frame; eggFrame.origin.y - = 700''' – beyowulf

+0

しかし、そうです。どうしてか分かりません。 –

+0

'' let''を 'var'に変更したときにコードがうまく動作しました – beyowulf

答えて

0

に取り組んでいますUISwipeGestureRecognizerはあなたが(卵)にそれを取り付けた要素にスワイプジェスチャーを認識します。あなたが急いでスワイプアップする場合は、スワイプを認識する必要があります。

ドラッグまたはタップジェスチャ認識機能を追加する場合は、UIPanGestureRecognizerまたはUITapGestureRecognizerを卵に追加する必要があります。

Draggedメソッドが呼び出されていませんか?

+0

はい、確信しています。 「完了!」という印字さえしないからです。出力コンソールに表示されます。関数が呼び出されていればそれは必要です。 –

1

UIGestureRecognizerを強く参照する必要があります。

var swipeUp: UISwipeGestureRecognizer! 

override func viewDidLoad() { 
    swipeUp = UISwipeGestureRecognizer(target: self, action:#selector(ViewController.Dragged(_:))) 
    swipeUp.direction = UISwipeGestureRecognizerDirection.Up 
    self.egg.addGestureRecognizer(swipeUp) 
} 

func Dragged(gesture: UIGestureRecognizer) { 
    UIView.animateWithDuration(0.4, delay: 1.0, options: .CurveEaseOut, animations: { 
     let eggFrame = self.egg.frame 
     eggFrame.origin.y -= 700 
     self.egg.frame = eggFrame 
    }, completion: { finished in print("done!") } 
} 
+0

まだ動作していません。 –

+0

これは正しくありません。ジェスチャ認識プログラムを強く参照する必要はありません。それをビューに追加すると、それはあなたのための強力な参照を保持します。 – Rob

関連する問題