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];
などとしてみました。動いた。よかった よかった。