【问题标题】:Is Core Animation causing my subviews to call -drawRect for every single frame?核心动画是否导致我的子视图为每一帧调用 -drawRect?
【发布时间】:2010-04-10 18:58:32
【问题描述】:

我创建了一个很好的 UIView 子类,它在 -drawRect: 中绘制了所有内容,因为人们说这很好。该视图是另一个视图的子视图。另一个视图正在使用 Core Animation 进行动画处理:它被缩小、旋转和移动。但是,我遇到了这样的情况:-drawRect 在动画期间似乎被调用了数万亿次,而且性能很糟糕。

这是正常的还是我做错了什么?

而且我在UITableViewCell的文档中发现了这个,很奇怪:

但是,在编辑模式下绘图是 不鼓励,因为你可能会 召回,自定义绘图,而单元格 动画进入和退出编辑模式 严重影响性能。

所以 -drawRect: 在做任何核心动画的时候是非常非常糟糕的吗?我还记得其他一些苹果资源,它们“在动画期间不会重绘”。悖论。再次。

【问题讨论】:

    标签: iphone performance core-animation


    【解决方案1】:

    如果您的 UIView 的 contentMode 设置为 UIViewContentModeRedraw,则根据文档,只要边界发生变化,就会调用 setNeedsDisplay。但是,我不确定这在动画期间是否会发生(我的印象是动画系统的行为有所不同),但可以解释对drawRect 的大量调用。

    【讨论】:

      【解决方案2】:

      drawRect: 只能在您的视图上调用 setNeedsDisplay: YES 之后调用。我猜随着缩放的发生,您的视图被要求重绘。如果缩放、旋转和移动是转换的一部分,您可以在缓存视图上执行转换。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-06-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-25
        相关资源
        最近更新 更多