各UIViewのdrawRect:メソッドを介して描画したやや複雑な形状のUIViewがいくつかあります。パスへの参照を(CGPathプロパティを介して)保存し、それをtouchesメソッドで使用して、タッチが実際にパスまたはシェイプ(CGPathContainsPoint)内にあるかどうかを検出しています。形状のために、透明なビューの領域があります(ビューのbackgroundColorプロパティがclearColorなどに設定されていると仮定すると、明らかに正方形/長方形でないものはすべて透明な領域になります)。
ビューが上に表示されたり、重なり合ったりする状況(頻繁に発生する)の場合、タッチが実際にCGPathまたはシェイプ内にあるかどうかを確認するために、タッチメソッド(touchesBeganなど)でテストしています。タッチが形状内にない場合は、タッチを下の次のビューに転送して、その要件を満たしているかどうかを確認します。
残念ながら(そして私の残念なことに)、これは実際にビューにバインドされているタッチと同じようには動作しません。私はこの問題を、特に1つを除いて、あらゆる方法で回避してきました。各ビューはUIRotationGestureRecognizerを使用しています。ただし、タッチが別のビューの透明な領域で発生し、そのビューがそのタッチをその下のビューに転送する場合、UIGestureRecognizerはトリガーされません。
私はこれをあらゆる角度から見てきました。タッチを適切なビューに実際に再割り当てまたはバインドする方法を考えようとしましたが、これが可能かどうかはわかりません。ビューがタッチを別のビューに転送している限り、タッチは最初にタッチを受け取った元のビューにバインドされたままになります。
UIApplicationまたはUIWindowをサブクラス化し、sendEvent: "メソッドをオーバーライドすることで、この方法で何かを実行できるかどうか疑問に思います。Appleがこれでどのような制御を提供するかは正確にはわかりません。プライベートにアクセスする可能性のあることは、何もする余裕がありません。 APIの。実際には、タッチがそれに属しているとビューが判断できるように、タッチを再割り当てする方法が必要です。
何か案は?'