Swift:如何获得旋转图像的高度和宽度。

时间:2018-03-29 12:55:44

标签: ios swift xcode image uiimageview

我正在旋转方形图像视图,其宽度为160但旋转宽度变为190与高度相同。

通过此功能旋转

func transformUsingRecognizer(_ recognizer: UIGestureRecognizer, transform: CGAffineTransform) -> CGAffineTransform {

        if let rotateRecognizer = recognizer as? UIRotationGestureRecognizer {
            return transform.rotated(by: rotateRecognizer.rotation)
        }
       return transform
}

尝试使用这两个代码来获得正确的宽度

imgDraggingImage.bounds.size.width
imgDraggingImage.frame.height

但没有成功。

旋转宽度160之前的图像

enter image description here

旋转后的图像,宽度没有变化,但现在返回宽度190

enter image description here

似乎宽度值取决于旋转,因为在任何不同的角度,它返回不同的宽度值。但我需要正确的价值,在这种情况下是160.请帮助

2 个答案:

答案 0 :(得分:1)

extension CGAffineTransform {
    var angle: CGFloat { return atan2(-self.c, self.a) }

    var angleInDegrees: CGFloat { return self.angle * 180 / .pi }

    var scaleX: CGFloat {
        let angle = self.angle
        return self.a * cos(angle) - self.c * sin(angle)
    }

    var scaleY: CGFloat {
        let angle = self.angle
        return self.d * cos(angle) + self.b * sin(angle)
    }
}

以上扩展名解决了该问题。

  self.imgDraggingImage.transform.scaleX
  self.imgDraggingImage.transform.scaleY

上面的代码 scaleX 给出了图像宽度(比例)的变化,即使也旋转了,而 scaleY 提供了图像高度的百分比变化。

其中 imgDraggingImage.bounds.size.width 给出恒定的图像大小,即使图像已缩放。

imgDraggingImage.frame.width 在旋转图像时出现问题。

答案 1 :(得分:0)

取决于,你想要像素或点数的大小:

let heightInPoints = image.size.height
let heightInPixels = heightInPoints * image.scale

let widthInPoints = image.size.width
let widthInPixels = widthInPoints * image.scale