具有相同图像的慢速drawInRect

Posted

技术标签:

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

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

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

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

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

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

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

谢谢。

【问题讨论】:

【参考方案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时它不会绘制图像 我想我不完全理解你想要完成什么,你为什么不告诉我你正在尝试做什么的确切背景,这样我就可以提供一个解决方案适合它。

以上是关于具有相同图像的慢速drawInRect的主要内容,如果未能解决你的问题,请参考以下文章

drawInRect:失去图像分辨率的质量

为啥这些图像不同 - [img drawInRect:] 问题

-[UIImage drawInRect:] / CGContextDrawImage() 不释放内存?

使具有不同纵横比的响应式图像具有相同的高度

裁剪图像并显示所有具有相同高度的图像

选择图像不同图像时在所有文本视图中具有相同名称