私はこのようなシナリオを持っています: ビュー B フレームはビュー A フレームに依存します。私はviewAフレームで遊んでいます。ただし、フレームはオブジェクトではないため、ビュー b フレームは変更されません。ビュー B フレーム wrt をビュー A フレームに変更する必要がある場合、つまり、ビュー A フレームを変更するとビュー B フレームが変更される場合の回避策
質問する
639 次
3 に答える
1
1つの解決策はadd KVO
、View A
のnotify
、のframe changed
change
frame
view A
change
frame
view 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 に答える