【问题标题】:Slow drawInRect with same image具有相同图像的慢速drawInRect
【发布时间】:2012-12-01 15:50:34
【问题描述】:

我有一个继承自 UIView 的自定义视图。

在这个视图中,有一个始终相同的图像,我只想在其上绘制。

但是,为了绘制图像,我必须在每次绘制循环运行时调用drawInRect

- (void)drawRect:(CGRect)rect{
    CGContextRef context = UIGraphicsGetCurrentContext();

    [image drawInRect:self.bounds];
    // drawing....
}

有没有办法显示图像而不是每次调用drawRect 时都调用此方法?

谢谢。

【问题讨论】:

    标签: ios performance uiview uiimageview core-graphics


    【解决方案1】:

    将图像放在自定义UIView 下方的UIImageView 中,而不是将其绘制在drawRect: 中。使您的自定义视图的背景颜色为clearColor,以便图像显示在drawRect: 没有绘制任何内容的位置。

    不要试图使图像视图成为自定义视图的子视图。子视图总是在其父视图的内容之上绘制。您可以将自定义视图设为图像视图的子视图,也可以将它们设为兄弟。

    【讨论】:

    • 这很聪明,谢谢。
    【解决方案2】:

    在自定义类的 .h 文件中执行以下操作:

    - (void)  setup:
    

    然后在 .m 中执行以下操作:

    -(void) setup {
        //drawing stuff
    }
    

    然后在视图中加载了任何将其添加为子视图的视图控制器

    [myCustomView setup];
    

    【讨论】:

    • 恐怕这行不通,因为每次调用 drawRect: 都无关紧要
    • 如果实现正确,此方法将起作用,但如果您希望使用 draw react,另一种解决方案是在该类中创建一个 bool,如 bool didDrawOnce。您可以将其放在 .h 或 .m 中。然后在draw rect中:if(didDrawOnce == no){做绘图然后didDrawOnce = yes;}。这样你只有在第一次点击 draw rect 时才会绘制。
    • 但我希望绘图是持久的。如果我只调用一次,下次调用drawRect时它不会绘制图像
    • 我想我不完全理解你想要完成什么,你为什么不告诉我你正在尝试做什么的确切背景,这样我就可以提供一个解决方案适合它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-19
    • 2016-05-19
    • 1970-01-01
    • 2012-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多