我有UIView祖先 - 让我们说MyView,它会覆盖方法-drawInRect来显示图像
override func draw(_ rect: CGRect) {
super.draw(rect)
image?.draw(in: rect)
/*some code here*/
}
此视图在某个时刻会向两个方向缩放。放大后,显示的图像会失去它的质量。说,如果我创建大小为20 * 20的MyView,在缩放后边界属性保持不变,但是我试图显示的转换图像质量很低,因为我试图用相同的20x20尺寸绘制它。有没有办法分别将图像绘制到我的视图缩放?
答案 0 :(得分:0)
首先,强烈考虑使用UIImageView
作为子视图,而不是尝试自己实现甚至适度复杂的图像绘制。 UIImageView
针对您可能遇到的许多问题进行了优化。它并不完美,如果你知道自己在做什么,有时可以手工做得更好,但是它能很好地完成它。
针对您的具体问题,您的contentMode
几乎肯定是scaleToFill
(这是默认设置)。最简单的解决方案是将其更改为redraw
以在边界更改时强制完全重绘。这不是很高效,但可能对你的问题没问题(通常很好)。使其高质量的和高效更复杂,并且通常需要您的应用程序行为的许多特殊知识。对于简单的案例,UIImageView
为您做的就是高质量和高效率。
如果您可以从20x20可靠地缩放到其他特定尺寸,并且您没有太多视图,另一个技巧是以您的全尺寸绘制,然后将向下缩放到20x20。如果您有很多视图并且最终图像的大小很大,但是非常效率很低,但是可以非常快速和高质量,因此至少需要考虑。我这样做是为了处理小型缩放(例如大小为110%)。但是,将缩略图变成全屏图像可能不是一个好方法。