私はビュー(parent
)に2つのサブビュー、もう1つ()のもう1つのサブビュー(bottomChild
)を持っています。兄弟のサブビューはiPhoneで接触しません
画面をタップすると、topChild
とparent
だけがタッチイベントを受信します。
タッチイベントをbottomChild
に伝播するために変更する必要はありますか?
コード:
MYView
だけ
touchesBegan
をログに記録します
UIView
のサブクラスである
- (void)viewDidLoad
{
[super viewDidLoad];
MYView* parent = [[MYView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
parent.tag = 3;
parent.backgroundColor = [UIColor redColor];
MYView* bottomChild = [[MYView alloc] initWithFrame:CGRectMake(0, 0, 90, 90)];
bottomChild.tag = 2;
bottomChild.backgroundColor = [UIColor blueColor];
[parent addSubview:bottomChild];
MYView* topChild = [[MYView alloc] initWithFrame:CGRectMake(0, 0, 80, 80)];
topChild.tag = 1;
topChild.backgroundColor = [UIColor greenColor];
[parent addSubview:topChild];
[self.view addSubview:parent];
}
。
- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
NSLog(@"%d", self.tag);
[super touchesBegan:touches withEvent:event];
}
結果:緑豊かなエリアに触れる
は、次のログを生成します。
TouchTest[25062:f803] 1
TouchTest[25062:f803] 3
私の最初のアイデアはparent
がその子へのすべてのtouchesSomething
のコールを伝播することでしたしかし、(A)私はおそらくより簡単なsolutioかもしれないと思うnと(B)子供がイベントを親に送信したかどうかわかりませんが、同じビューにメッセージtouchesSomething
を2回送信すると、セナニガンが発生する可能性があります。
質問をしたところ、postは、接触を受け取るビューを変更するためにhitTest
を無効にすることを提案しています。私はこのアプローチを試み、問題があればそれを更新します。
おかげでアダムを設定しました!このソリューションはジェスチャ認識ツールと互換性がありますか?一見すると、私はこの道を行くならば、私は車輪を再実装する必要があるように見えます。 – hpique
そして私は物事を再構築したいと思っていますが、私の場合はどうなっているのでしょうか。 topChildは透過性を持ち、topChildとbottomChildの両方が "動く"ことができます(したがって、topChildはbottomChildのサブビューにはなれません)。両方とも接触する必要があります。 – hpique
コールバックで受け取ったgestureRecognizerオブジェクトを単純なタッチではなく親に渡すだけでよいでしょう。少なくとも私が便利なのは、このプロジェクトではUIPinchGestureRecognizerのために働くでしょう。 –