2012-03-13 9 views
2

私は、ユーザーが移動した後にアニメーション化するコンテナ内に多くのカスタムUIViewを持っています。彼らの動きを追跡するために、私はtouchesBegan:で現在の位置を取得し、touchesMoved:で位置を更新します。私はごく最近のビューを移動した(そしてそれはまだ元の位置に戻ってアニメーション化することができる)場合は特に時折touchesMoved touchesBeganなしで呼び出されました

、私はtouchesBegan:セレクタが呼び出されませんが、touchesMoved:touchesEnded:がされる別のビューをドラッグし始める場合。 とtouchesEnded:は、最初にtouchesBegan:ビューで呼び出されることなく呼び出すことができますか?

答えて

1

おそらくApple docsを再読いする価値があります。 touchesBeganの場合は、が保証されているかわかりません。

あなたはtouchesBeganなどのイベントを記録していると思います。おそらく、正しいイベントが発生していますが、ログメッセージが「不整備」しているようですか?

+0

私はそれを読むことを思い出したと思っていました.Beganは保証されていることが保証されていましたが、私は忘れてしまったと思います。私はそれぞれのタッチイベントでロギングしています。エラーが発生すると、touchesBeganはログに記録されません。より良い解決策が見つからない場合は、touchesBeganが呼び出されたときに通知するフラグを保持し、そのフラグが設定されているときにtouchesMovedおよびtouchesEndedアクションのみを実行します。 – Ned

1

私のアプリでも同様の問題が見つかりました。別のビューの途中でビューをアニメーション化すると、最初のビューにすばやくタッチしてスワイプを開始すると、touchesBeganイベントは発生しませんが、最初のビューがなくなるとtouchesMovedになります。

この回答によれば、app starts ignores user interaction events when i call animateWithDuration:delay:options:animations:completion:は、アニメーション化中にユーザーのやりとりのイベントが無視されます。これは私たちが見ているものと一致していると思います。 UIViewAnimationOptionAllowUserInteractionオプションまたはuserInteractionEnabledプロパティを使用してみてください。必要なときにイベントを通過できるようにする必要があります。

関連する問題