我为同一个视图多次调用setFrame。
例如在设置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中,它在创建单元格或重新加载时调用。
答案 0 :(得分:1)
设置框架调用' setNeedsLayout'然后在下一个runloop迭代中,IOS知道布局&重新绘制视图。
在布局/重绘内容中没有任何意义,用户不会看到这样的iOS会为你调用这些调用 - 如果你通过使用setNeedsXY方法来实现它
(除非你处理自定义(执行不当)的观点[你不会这样做]))