多次调用setFrame?

时间:2015-12-03 09:24:01

标签: ios performance uiview frame cgrect

我为同一个视图多次调用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中,它在创建单元格或重新加载时调用。

1 个答案:

答案 0 :(得分:1)

设置框架调用' setNeedsLayout'然后在下一个runloop迭代中,IOS知道布局&重新绘制视图。

在布局/重绘内容中没有任何意义,用户不会看到这样的iOS会为你调用这些调用 - 如果你通过使用setNeedsXY方法来实现它

所以设置帧的开销通常是最小的

(除非你处理自定义(执行不当)的观点[你不会这样做]))