Static background for CGContext

梦想与她 提交于 2019-12-07 11:28:35

问题


this is my first question here, so hello everyone. I have spent some time now wrapping my mind around the following problem and could not come up with a solution. I'd be happy if someone could point me in the right direction.

I'm using CGContext to draw various layers of graphical representations of live data which should be refreshed at a reasonable framerate of at least 50fps. I want to use a static image as a background. Re-drawing this image using the context for every cycle significantly slows down the frame-rate. I thought about just using UIImageView to display the image once. The problem here is that I want to use the blendmodes provided by CGContext in order to achieve more sophisticated overlays than just setting an alpha-value for each layer. Since the UIImageView displaying the background image is not part of the context, it's not affected by the blendmodes. Does anyone have an idea how to achieve the desired behavior without affecting the frame-rate too much? Thanks for your help.


回答1:


A call to CGContextDrawImage with a CGImageRef with the the same size dimensions as the CGRect is fast. Setup a CGImageRef with the background image in code that gets run less often than every frame, such as the view's initialization code. If this background image is changing, build the image in the program logic code, not the draw refresh code.

The worst you can do is access the image from a file each time. Some time can be saved by not accessing the CGImageRef from within a heavier object. A call like [someUIImageObject CGImage] will add the overhead of a message send, whereas an access to a CGImageRef type ivar in the same object containing the drawing code will not.

If your source image is not the right size, first draw it into a CGImageRef at the needed size once, and reuse it in your drawing code.



来源:https://stackoverflow.com/questions/6693977/static-background-for-cgcontext

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!