1

私はこのようなシナリオを持っています: ビュー B フレームはビュー A フレームに依存します。私はviewAフレームで遊んでいます。ただし、フレームはオブジェクトではないため、ビュー b フレームは変更されません。ビュー B フレーム wrt をビュー A フレームに変更する必要がある場合、つまり、ビュー A フレームを変更するとビュー B フレームが変更される場合の回避策

4

3 に答える 3

1

1つの解決策はadd KVOView Anotify、のframe changedchangeframeview Achange frameview B

[A addObserver:self forKeyPath:@"frame" options:NSKeyValueObservingOptionOld context:NULL];  //added KVO for View A

方法は次のとおりです。

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
 if([keyPath isEqualToString:@"frame"]) {
  //change frame of View B according to View A
 }
}

編集Remove observerそうでない場合needed

[A removeObserver:self forKeyPath:@"frame"];
于 2013-02-07T06:14:05.397 に答える
0

>iOS6 では、自動レイアウトの制約を設定するか、次の方法を試すことができます。

[self addObserver:self forKeyPath:@"viewA.frame" options:NSKeyValueObservingOptionOld context:NULL];

必ずdeallocでObserverを削除してください。次に、viewA フレームがいつ変更されるかを確認し、任意のアクション セットと、viewA フレームと viewB フレーム間の機能的関係を実装できます...

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
    if([keyPath isEqualToString:@"viewA.frame"]) {
        // change viewB's frame according to viewA's frame
        viewB.frame = CGRectOffset(viewA.frame, 20.0, 20.0);
    }
}
于 2013-02-07T06:14:07.980 に答える
0

ビュー A に対してビュー B フレームを設定します。メソッドを作成し、-(void)ResizeFrameすべてのフレーム設定をそのメソッドに入れ、フレームを変更する必要があるときはいつでもこの関数を呼び出します。つまり ViewB.frame=[ViewA.frame.origin.x,ViewA.frame.origin.y,ViewA.frame.size.width/2,ViewA.frame.size.height/2];、ここで分割を指定しましたが、それに応じて変更できます。

于 2013-02-07T06:15:33.323 に答える