【发布时间】:2015-12-03 09:24:00
【问题描述】:
我为同一个视图多次调用 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 中,它仅在单元格创建或重新加载时调用。
【问题讨论】:
-
在
drawRect中添加断点并检查自己。 -
@dasdom 谢谢你的回复,但是如何给drawRect添加断点,我无法打开UIVIew.m文件。
-
您可以创建一个视图并使用它。只是为了验证发生了什么。然后您可以切换回使用
UIView实例。 -
@dasdom 谢谢,我会做的。
-
@dasdom drawRect 只会被调用一次,不管 setFrame 被调用了多少次。即使在滚动单元格时,UICollectionCellView drawRect 也只调用一次,因此仅在创建单元格时调用绘制矩形。很奇怪是吗?
标签: ios performance uiview frame cgrect