我有这样的场景: 视图B帧取决于视图A帧。我正在玩viewA框架。但是视图b帧不会改变,因为帧不是对象。 那么解决方法是什么,如果我需要将View B框架更改为View A Frame ie 视图B框架在我更改ViewA框架
时会发生变化答案 0 :(得分: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"];
答案 1 :(得分: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);
}
}
答案 2 :(得分: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];
我在这里给你分组,你可以相应地改变它。