我有这样的场景:视图 B 框架取决于视图 A 框架。我正在玩 viewA 框架。但是视图 b 框架不会改变,因为框架不是对象。那么解决方法是什么,如果我需要将 View B 框架更改为 View A 框架,即当我更改 ViewA 框架时,视图 B 框架会发生变化
问问题
639 次
3 回答
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 上删除观察者。然后,您会发现 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
相对于 View A 设置 View 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 回答