Iphone 动态更改UIView框架

Iphone 动态更改UIView框架,iphone,ios,Iphone,Ios,我有这样一个场景: 视图B框架依赖于视图A框架。我正在玩取景框。但是视图b帧不会更改,因为帧不是对象。 那么,如果我需要将视图B frame wrt更改为视图A frame ie,解决方法是什么 视图B帧在我更改视图A帧时发生更改一个解决方案是为视图A添加KVO,因为它将通知当帧更改时并根据视图A的帧中的更改更改视图B的帧 [A addObserver:self forKeyPath:@"frame" options:NSKeyValueObservingOptionOld context:NU

我有这样一个场景: 视图B框架依赖于视图A框架。我正在玩取景框。但是视图b帧不会更改,因为帧不是对象。 那么,如果我需要将视图B frame wrt更改为视图A frame ie,解决方法是什么
视图B帧在我更改视图A帧时发生更改一个解决方案是
视图A添加KVO
,因为它将
通知
帧更改时
并根据
视图A的
帧中的
更改
更改
视图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
 }
}
编辑
在不需要时删除观察者

[A removeObserver:self forKeyPath:@"frame"];

一种解决方案是
查看A
添加KVO
,因为它将
帧更改时通知
,并根据
查看A
帧中的
更改
查看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
 }
}
编辑
在不需要时删除观察者

[A removeObserver:self forKeyPath:@"frame"];

在>iOS6中,您可以尝试设置一些自动布局约束,或尝试以下方法:

[self addObserver:self forKeyPath:@"viewA.frame" options:NSKeyValueObservingOptionOld context:NULL];
确保在解除锁定时移除观察者。然后,您将了解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);
    }
}

在>iOS6中,您可以尝试设置一些自动布局约束,或尝试以下方法:

[self addObserver:self forKeyPath:@"viewA.frame" options:NSKeyValueObservingOptionOld context:NULL];
确保在解除锁定时移除观察者。然后,您将了解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);
    }
}

相对于视图A设置视图B框架。编写一个方法
-(void)ResizeFrame
,将所有帧设置放入其中,并在需要更改帧时调用此函数。ie
ViewB.frame=[ViewA.frame.origin.x,ViewA.frame.origin.y,ViewA.frame.size.width/2,ViewA.frame.size.height/2]这里我给出了分区,您可以相应地更改它。

设置视图B框架相对于视图A。编写一个方法
-(void)ResizeFrame
,将所有帧设置放入其中,并在需要更改帧时调用此函数。ie
ViewB.frame=[ViewA.frame.origin.x,ViewA.frame.origin.y,ViewA.frame.size.width/2,ViewA.frame.size.height/2]
在这里我已经给出了分区,您可以相应地更改它。

添加
UIView B
作为
UIView A的子视图将解决您的问题?添加
UIView B
作为
UIView A的子视图将解决您的问题?