touchesMovedが呼ばれない

iOS 4.0のSDKで作ったプロジェクトをiOS 5.1のSDKへ移行してきたら、UIViewController の touchesMoved が1回しか呼び出されないとか、touchesEnded も呼ばれないとかの事象が発生。

作りとしては、UIScrollView の派生クラスで touchesBegan, touchesMoved, touchesEnded, touchesCancelled を定義して、それぞれのメソッド内でビューの処理を行ってから self.nextResponder が持っている同じ名前のメソッドを呼び出すことによって、UIViewController で続きのコントロールの処理をするようになっていたのですが、これがビュータッチ後のイベントがきちんとレスポンダチェーンを辿ってコントローラまで届いていないという状況のようです。

もしかしたらiOSの仕様が変わっちゃったのかも知れないけど、そんなのドキュメントのどこに書いてあるんだ…。

で。しようがないのでビューコントローラとの通信はレスポンダチェーンなんぞに頼らず、UIScrollView派生クラスに独自の@protocolとmyDelegateプロパティ(delegateは元々のUIScrollViewDelegateとぶつかってしまう)を追加して、呼び出している部分を

[self.nextResponder touchesBegan:touches withEvent:event];

から

[self.myDelegate touchesBegan:touches withEvent:event];

などとしてみました。動いた。よかった よかった。

コメントを残す