动态改变UIView框架

时间:2013-02-07 05:55:45

标签: iphone ios

我有这样的场景: 视图B帧取决于视图A帧。我正在玩viewA框架。但是视图b帧不会改变,因为帧不是对象。 那么解决方法是什么,如果我需要将View B框架更改为View A Frame ie 视图B框架在我更改ViewA框架

时会发生变化

3 个答案:

答案 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];我在这里给你分组,你可以相应地改变它。