多次调用 setFrame?
calling setFrame multiple times?
我为同一视图多次调用 setFrames。
例如,在设置 ltr 视图框架后,我检查布局是否应为 rtl 并再次更改视图框架。
-(void)setViewsFrames:(BOOL)RTL{
view1.frame = CGRECMAKE();
view2.frame = CGRECMAKE();
view3.frame = CGRECMAKE();
.
.
.
if(RTL){
[view1 setRtlFrame];
[view2 setRtlFrame];
[view3 setRtlFrame];
.
.
.
}
}
-(void)setRtlFrame{
CGRect RTLFrame = self.frame;
RTLFrame.origin.x = [self superview].frame.size.width - self.frame.origin.x - self.frame.size.width;
[self setFrame:RTLFrame];
}
多次调用setFrames是否强制系统多次绘制视图?这可能会影响性能。
我也在 UICollectionViewCell 中使用它,所以每次她想要绘制单元格时系统都会调用 setViewsFrames:
。
编辑:
我做了一个小测试。我检查何时调用 drawRect,结果如下:
无论setFrame被调用多少次,它只被调用一次
在 UICollectionCellView 中,它仅在单元格创建或重新加载时调用。
设置框架调用 'setNeedsLayout',然后在下一次运行循环迭代中,IOS 知道布局和重绘视图。
布局/重绘用户看不到的东西是没有意义的,所以 iOS 为您合并调用 - 如果您使用 setNeedsXY 方法允许它
因此设置框架的开销通常很小
(除非您处理自定义(实施不当的)视图 [您不处理 ;)])
我为同一视图多次调用 setFrames。
例如,在设置 ltr 视图框架后,我检查布局是否应为 rtl 并再次更改视图框架。
-(void)setViewsFrames:(BOOL)RTL{
view1.frame = CGRECMAKE();
view2.frame = CGRECMAKE();
view3.frame = CGRECMAKE();
.
.
.
if(RTL){
[view1 setRtlFrame];
[view2 setRtlFrame];
[view3 setRtlFrame];
.
.
.
}
}
-(void)setRtlFrame{
CGRect RTLFrame = self.frame;
RTLFrame.origin.x = [self superview].frame.size.width - self.frame.origin.x - self.frame.size.width;
[self setFrame:RTLFrame];
}
多次调用setFrames是否强制系统多次绘制视图?这可能会影响性能。
我也在 UICollectionViewCell 中使用它,所以每次她想要绘制单元格时系统都会调用 setViewsFrames:
。
编辑: 我做了一个小测试。我检查何时调用 drawRect,结果如下:
无论setFrame被调用多少次,它只被调用一次
在 UICollectionCellView 中,它仅在单元格创建或重新加载时调用。
设置框架调用 'setNeedsLayout',然后在下一次运行循环迭代中,IOS 知道布局和重绘视图。
布局/重绘用户看不到的东西是没有意义的,所以 iOS 为您合并调用 - 如果您使用 setNeedsXY 方法允许它
因此设置框架的开销通常很小
(除非您处理自定义(实施不当的)视图 [您不处理 ;)])