3

降る雨をアニメートするを作成したいのですがUIView、これは他のすべてのビューよりも前面にありますが、透明であり、タップやインタラクションをまったく登録しないため、背後のUIをタップすると正確に動作するはずです。今のように、実装する前に。それはオーバーレイとして機能し、それ以上のものではありません。

UserInteractionEnabledこれはに設定するのと同じくらい簡単NOですか、それとももっとありますか?サブクラス化する必要がありUIViewますか、それとも何かをオーバーライドする必要がありますか?

4

2 に答える 2

2

はい、userInteractionEnabled = NO;UIViewをサブクラス化する必要がないを設定します。例えば:

UIView *overlay = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 460)];
overlay.backgroundColor = [UIColor colorWithWhite:0 alpha:.5];
[self.view addSubview:overlay];
于 2013-03-12T11:20:05.507 に答える
0

@zenithが説明したように、透過的なサブビューを追加した後、hittestを利用できます。

UIResponderでのhitTest:withEvent:の実装は、次のことを行います。

自己のpointInside:withEvent:を呼び出します

戻り値がNOの場合、hitTest:withEvent:はnilを返します。物語の終わり。

戻り値がYESの場合、hitTest:withEvent:メッセージをサブビューに送信します。トップレベルのサブビューから開始し、サブビューがnil以外のオブジェクトを返すか、すべてのサブビューがメッセージを受信するまで、他のビューに進みます。

サブビューが初めてnil以外のオブジェクトを返す場合、最初のhitTest:withEvent:はそのオブジェクトを返します。物語の終わり。

サブビューがnil以外のオブジェクトを返さない場合、最初のhitTest:withEvent:はselfを返します。このプロセスは再帰的に繰り返されるため、通常、ビュー階層のリーフビューが最終的に返されます。

ただし、hitTest:withEventをオーバーライドして、別のことを行うことができます。多くの場合、pointInside:withEvent:のオーバーライドはより単純であり、アプリケーションでのイベント処理を微調整するための十分なオプションを提供します。

于 2013-03-12T12:00:19.527 に答える