Swift: 如何获取旋转图像的高度和宽度。
Swift: How to get Height and width of a rotated image.
我正在旋转一个宽度为 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
似乎宽度值取决于旋转,因为在任何不同的角度上它 returns 不同的宽度值。但我需要正确的值,在本例中为 160。请帮助
视情况而定,您想要以像素还是点为单位的大小:
let heightInPoints = image.size.height
let heightInPixels = heightInPoints * image.scale
let widthInPoints = image.size.width
let widthInPixels = widthInPoints * image.scale
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 在图像旋转时产生了问题。
我正在旋转一个宽度为 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
似乎宽度值取决于旋转,因为在任何不同的角度上它 returns 不同的宽度值。但我需要正确的值,在本例中为 160。请帮助
视情况而定,您想要以像素还是点为单位的大小:
let heightInPoints = image.size.height
let heightInPixels = heightInPoints * image.scale
let widthInPoints = image.size.width
let widthInPixels = widthInPoints * image.scale
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 在图像旋转时产生了问题。