2

意図的に、部分的に重なるビュー コンテナー内に 2 つのビュー (テーブル ビュー) を配置しました。ビュー B は、ビュー A の約 50% に重なっています。

プログラムでビュー B を移動してオーバーラップしないようにすると、ビュー A 内の以前にオーバーラップしていた領域がタッチ イベントに応答しません。つまり、50% までは応答しません。元々オーバーラップしていなかった領域のみがオーバーラップします。さらに、ビュー B 内で、スーパービュー内の新しいスペースを現在占有している部分はタッチ イベントに応答せず、たまたま古い領域を占有するビューの部分のみが応答します。

ビューを移動するために使用しているコードは単純です。

UIView* viewB = [self.childViewControllers.lastObject view];

CGRect rect = viewB.frame;
rect.origin.x += 200;

[UIView animateWithDuration:0.2 animations:^{
    viewB.frame = rect;
}];

視覚的には、ビューは移動しますが、タッチ領域は移動しません。

最初にビューを配置するために、iOS 6 内の新しいストーリーボード「コンテナー ビュー」メカニズムを使用しました。

なぜこれが起こっているのか分かりません。何か案は?

ありがとう。

4

1 に答える 1

3

結局のところ、xCode がストーリーボード内に「コンテナ ビュー」を追加すると、親ビュー内にビューが埋め込まれます。だから私は次のことをする必要があります:

UIView* viewB = [[self.childViewControllers.lastObject view] superview];

CGRect rect = viewB.frame;
rect.origin.x += 200;

[UIView animateWithDuration:0.2 animations:^{
    viewB.frame = rect;
}];

コンテナは自分のビューを独自のビューに埋め込むため、スーパービューを取得してそれを操作する必要があります。

このすべてをプログラムで行う場合、つまりコンテナーを追加し、コンテナー API を使用して自分自身を表示する場合、元のコードは機能します。

于 2013-01-11T16:07:40.470 に答える