UIImage旋转后出现白线

问题描述 投票:0回答:1

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
大小,但没有帮助。 那么有人可以解释一下什么是问题,或者给我一些链接,我可以在其中阅读有关此问题的信息。

swift uiimageview
1个回答
0
投票

CGRect 函数

applying(_ t: CGAffineTransform) -> CGRect
不会返回有意义的旋转值,除非它们是 90° 的倍数,即使如此,您也可能会遇到浮点错误。您的应用程序支持任意旋转角度吗?如果没有,我建议要么让矩形保持相同的大小以进行 180° 旋转,要么只是交换高度和宽度以进行 90° 旋转。

这应该保留你的图像,而不会在侧面引入白条,因为你总是将图像渲染成具有确切像素数的矩形。

© www.soinside.com 2019 - 2024. All rights reserved.