具有相同图像的慢速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的主要内容,如果未能解决你的问题,请参考以下文章
为啥这些图像不同 - [img drawInRect:] 问题