スクロールビューの小さなビューを含むビュー階層があります。各ビューには、ボタンなどのサブビューを含めることができます。
何らかの理由で、ビューのボタンがクリックされません。これをさらに調査すると、スクロールビューはtouchBeganイベントを受信しますが、ボタンは受信しないことがわかりました。hitTest:event:メッセージを呼び出すと、制限内であってもボタンが返されないことが示されます。
スクロールビューでのタッチの位置、hitTestから返されたアイテム、locationInViewを呼び出した場合のタッチの位置:期待されるアイテムの使用、および期待されるアイテムの階層(フレームが印刷されている)を説明するログ出力を含めました。この出力から、ボタンが呼び出されるべきだったと推測できます...
誰かがこれを説明できますか?私は何かが足りないのですか?
touched ({451, 309}) on <VCViewContainersView: 0x4b31ee0; frame = (0 0; 748 1024); transform = [0, 1, -1, 0, 0, 0]; autoresize = W+H; layer = <CALayer: 0x4b32130>> (location in expected item: {17, 7.5})
expected touched item is:
view: <UIButtonLabel: 0x482b920; frame = (32 5; 36 19); text = 'Click'; clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x4831370>>, layer transform: [1, 0, 0, 1, 0, 0]
view: <UIRoundedRectButton: 0x482c100; frame = (50 50; 100 30); opaque = NO; layer = <CALayer: 0x482c450>>, layer transform: [1, 0, 0, 1, 0, 0]
view: <UIImageView: 0x480f290; frame = (0 0; 320 255); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x480e840>>, layer transform: [1, 0, 0, 1, 0, 0]
view: <VCViewContainer: 0x4b333c0; frame = (352 246.5; 320 471.75); layer = <CALayer: 0x4b33d50>>, layer transform: [1, 0, 0, 1, 0, 0]
view: <UIScrollView: 0x4b32600; frame = (0 0; 1024 748); clipsToBounds = YES; autoresize = W+H; userInteractionEnabled = NO; layer = <CALayer: 0x4b32780>>, layer transform: [1, 0, 0, 1, 0, 0]
view: <VCViewsContainerView: 0x4b31ee0; frame = (0 0; 748 1024); transform = [0, 1, -1, 0, 0, 0]; autoresize = W+H; layer = <CALayer: 0x4b32130>>, layer transform: [0, 1, -1, 0, 0, 0]
view: <UIWindow: 0x4b1d590; frame = (0 0; 768 1024); opaque = NO; autoresize = RM+BM; layer = <CALayer: 0x4b1d6d0>>, layer transform: [1, 0, 0, 1, 0, 0]
更新:UIWindowとVCViewsContainerViewを除き、すべてのビューはinitWithFrame:を使用してプログラムで作成されます。ボタンの場合は、buttonWithType:を使用します。VCViewContainerはCGRectZeroを使用して初期化され、UIImageViewが作成されると、そのフレームは画像のサイズ+画像の下部にあるラベル用の追加スペースに設定されます。
アップデート2:同じ場所で[self.layer hitTest:location]を呼び出すと、正しいビューのレイヤーが表示されます。何が起きてる...?