ios - UIImage 子类化

标签 ios uiimageview uiimage

我想创建自己的 UIImage 子类,它允许我创建一个可实现/可拉伸(stretch)的图像,其四个边的每一侧都有帽子。

iOS 5 的 ressizedImage 不符合我的需求,因为它不允许我拉伸(stretch)中间部分,现在已弃用的 stretchableImage 也不符合我的需求,因为它只允许我重复单个像素,而我可能想重复某种渐变。

到目前为止,一切正常,我在 -drawInRect: 中实现了自己的绘图代码,并且其行为符合预期。
但是,当将我的自定义子类实例分配为 UIImageView 的图像时,我的代码崩溃了。图像的渲染方式与普通 UIImage 一样。 (在所有方向上缩放,没有任何上限)

我尝试在所有四种绘图方法(drawInRectdrawAtPoint,都是独立的加上与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/

相关文章:

ios - UIImageView 多个图像之间的过渡

iOS - TextView 的图像附件更改属性

ios - Xcode中的swift语言版本build设置是什么意思?

iphone - iOS显示取决于位置和时间的通知

ios - 是否有比 Objective-C 中的委托(delegate)更简洁的方法来处理异步 http 请求?

ios - 如何防止触摸通过 UIImageView?

ios - CLLocationManagerDelegate 方法未更新

ios - "Cannot assign to property: "任何 "is immutable"错误

objective-c - 在 Objective C 中通过 POST 上传图片

iphone - 如何在图像 (*.png) 周围绘制轮廓/描边 - 内部示例