1

2つのUIViewがあります。片方をもう片方の中にスライドできるように、もう片方を封じ込めるために使用しています。subViewが親の境界にクリップされていても、タッチイベントを受信し、他の基になるビューへのアクセスをブロックしているという問題が発生しています。

レイアウトを示す3つのスクリーンショットがあります。親を緑、子を赤に着色しました。

ユーザーが[表示]をクリックすると、サブビューが上にスライドするという考え方です。サブビューがデフォルトの位置にある場合、UITabBarはカバーされており、クリックできません。これは、下部に赤いビューが表示されている最初の画像で確認できます。サブビューを一番上に移動すると、UITabBarが表示されているのでクリックできます。3番目の画像では、緑色のUIViewでclipToBoundsを有効にした場合の様子を示しています。

clipToBoundsを有効にしたので、subViewが基になるUITabBarをブロックしている理由がわかりません。私のclipToBoundsの理解は完全に間違っていますか?

4

1 に答える 1

2

clipToBoundsの使用は、論理レイアウトではなく、サブビューの視覚的なレイアウトにのみ影響します。これは、私のサブビューは目には見えませんが、触れると見えることを意味します。

subViewの位置ではなくサイズをアニメーション化することで、この問題を回避しました。以下の私のコードでは、stationProximityViewはsubViewです。サイズを40ピクセルアニメーション化して、黒いタイトルを表示します。

[UIView beginAnimations:@"stationProximityBar" context:NULL];
self.stationProximityView.view.frame = CGRectOffset(self.stationProximityView.view.frame, 0, -40);
[UIView commitAnimations];

不要になったときは、見えないところでアニメートします。

[UIView beginAnimations:@"stationProximityBar" context:NULL];
self.stationProximityView.view.frame = CGRectMake(0 ,0, 320, 500);
[UIView commitAnimations];

ユーザーが表示ボタンをタップすると、サブビュー全体が表示されます。

 [UIView beginAnimations:@"stationProximityBar" context:NULL];
 self.stationProximityView.view.frame = CGRectMake(0,460,320,40);
 [UIView commitAnimations];

閉じると、小さなバーと同じようにビューが非表示になります。

 [UIView beginAnimations:@"hideStationProximityBar" context:NULL];
 self.stationProximityView.view.frame = CGRectMake(0,0,320,500);
 [UIView commitAnimations];

現在、このコードはiPhone 5でのみテストされているため、ハードコードされた高さ500は、以前のiPhoneモデルで問題を引き起こします。

于 2012-10-11T10:15:27.020 に答える