【问题标题】:Swift: How to get Height and width of a rotated image.Swift:如何获取旋转图像的高度和宽度。
【发布时间】:2018-09-08 10:43:35
【问题描述】:

我正在旋转一个方形图像视图,其宽度为 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 之前的图像

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

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

【问题讨论】:

标签: ios swift xcode image uiimageview


【解决方案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 在图像旋转时产生问题。

【讨论】:

  • 这很好用,你能解释一下它背后的数学原理吗?我忘记了我的学校数学!
【解决方案2】:

取决于,你想要像素还是点的大小:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-31
    • 1970-01-01
    • 2010-11-18
    • 1970-01-01
    相关资源
    最近更新 更多