我想创建自己的 UIImage
子类,它允许我创建一个可实现/可拉伸(stretch)的图像,其四个边的每一侧都有帽子。
iOS 5 的 ressizedImage
不符合我的需求,因为它不允许我拉伸(stretch)中间部分,现在已弃用的 stretchableImage
也不符合我的需求,因为它只允许我重复单个像素,而我可能想重复某种渐变。
到目前为止,一切正常,我在 -drawInRect:
中实现了自己的绘图代码,并且其行为符合预期。
但是,当将我的自定义子类实例分配为 UIImageView
的图像时,我的代码崩溃了。图像的渲染方式与普通 UIImage 一样。 (在所有方向上缩放,没有任何上限)
我尝试在所有四种绘图方法(drawInRect
、drawAtPoint
,都是独立的加上与blendMode:
)处设置断点,但它们似乎不被叫到。
有没有办法在 UIImageView
中使用 UIImage
时提供自定义绘图代码,而无需子类化 UIImageView
?
此外,我还担心性能。默认的可拉伸(stretch)图像在动画过程中效果很好,但我想知道在对 UIImageView
的尺寸属性(宽度和高度)进行动画处理时效果如何。我的渲染代码会在每一帧被调用吗?
最佳答案
在 Apple Documentation它清楚地表明您无法覆盖 UIImageView
的 -drawRect:
,因此子类化 UIImageView
也不起作用。您必须实现自己的 UIView 类。
子类化UIImage
都不起作用,我已经尝试过,并且根本没有调用任何公共(public)方法,甚至没有调用CGImage
的辅助方法。我认为你需要重写一些私有(private) API 才能完成这项工作。
不用担心调整大小,您的渲染代码只会在最后一帧被调用。 尽管如此,在大多数情况下,性能仍比使用 UIImageView 差。 Apple 优化了该类,使其可以在 GPU 上运行。
关于ios - UIImage 子类化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10466026/