当
UIImage
旋转后,图像两侧出现白线时,我遇到一个问题。在我的图像编辑器中,我有旋转按钮。点击它后,我调用这个函数:
func rotateLeft() -> UIImage? {
let radians = CGFloat.rotateRadians
// Calculate the size of the rotated image
var rotatedSize = CGRect(origin: .zero, size: size)
.applying(CGAffineTransform(rotationAngle: radians))
.integral.size
// Round the dimensions to the nearest whole number
rotatedSize.width = round(rotatedSize.width)
rotatedSize.height = round(rotatedSize.height)
// Create a context for the rotated image
UIGraphicsBeginImageContext(rotatedSize)
defer { UIGraphicsEndImageContext() }
if let context = UIGraphicsGetCurrentContext() {
// Move the origin to the center of the image
context.translateBy(x: rotatedSize.width / 2.0, y: rotatedSize.height / 2.0)
// Rotate the context
context.rotate(by: radians)
// Draw the image
draw(in: CGRect(
x: -size.width / 2.0,
y: -size.height / 2.0,
width: size.width,
height: size.height)
)
// Get the rotated image from the context
if let rotatedImage = UIGraphicsGetImageFromCurrentImageContext() {
return rotatedImage
}
}
return nil
}
此函数返回旋转图像,在我刚刚在
UIImageVIew
中对图像进行动画处理之后,我将这个新的旋转图像分配给 UIImageView (我认为一切正常)。
但问题是,如果我多次向该按钮发送垃圾邮件(按钮点击仅在先前的旋转逻辑完成时才起作用),白线会变得越来越大。
我读到问题是旋转后浮点的原因,所以我尝试
round
大小,但没有帮助。
那么有人可以解释一下什么是问题,或者给我一些链接,我可以在其中阅读有关此问题的信息。
CGRect 函数
applying(_ t: CGAffineTransform) -> CGRect
不会返回有意义的旋转值,除非它们是 90° 的倍数,即使如此,您也可能会遇到浮点错误。您的应用程序支持任意旋转角度吗?如果没有,我建议要么让矩形保持相同的大小以进行 180° 旋转,要么只是交换高度和宽度以进行 90° 旋转。
这应该保留你的图像,而不会在侧面引入白条,因为你总是将图像渲染成具有确切像素数的矩形。