ios - 多次调用 setFrame?

标签 ios performance uiview frame cgrect

我为同一 View 多次调用 setFrames。

例如,在设置 ltr View 框架后,我检查布局是否应为 rtl 并再次更改 View 框架。

-(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 会强制系统多次绘制 View 吗?这可能会影响性能。

我也在 UICollectionViewCell 中使用它,所以每次她想要绘制单元格时,系统都会调用 setViewsFrames:

编辑: 我做了一个小测试。我检查何​​时调用 drawRect,结果如下:

  • 无论 setFrame 被调用多少次,它都只被调用一次。

  • 在 UICollectionCellView 中,它仅在单元格创建或重新加载时调用。

最佳答案

设置框架调用“setNeedsLayout”,然后在下一个运行循环迭代中,IOS 知道布局和重绘 View 。

布局/重绘用户看不到的内容是没有意义的,因此 iOS 会为您合并调用——如果您使用 setNeedsXY 方法允许它

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

(除非您处理自定义(实现不当的) View [您不这样做 ;)])

关于ios - 多次调用 setFrame?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34062113/

相关文章:

ios - 按部分水平分页 CollectionView

ios - UICollectionView加载完成后如何启动功能?

ios - Xcode:选择 Storyboard之外的对象

ios - 在堆叠的 UIWindows 之间传递触摸?

ios - 各个方向的实心阴影

ios - Swift 4 SDWEBImage 错误

ios - 如何在webview上缓存图像?

java - Python 代码比 Java 慢 60 倍

performance - azure托管的mac管道,关于如何使其更快的建议,目前非常慢,在桌面上5分钟,在服务器上接近20

sql - 关于PostgreSQL性能的两个问题