如何在对UIImageView应用旋转变换后获得实际的角点坐标

3
我将在UIImageImage上应用旋转变换。
假设UIImageView的实际框架为:
Frame : (100.0, 360.0, 200.0, 130)

白色边框是框架

enter image description here

UIImageView旋转一定角度后,返回的框架是

Frame After Rotation : (97.10, 310.81, 219.79, 240.37)

enter image description here

我需要获取旋转图像的实际角点。

enter image description here

请帮忙。我不确定如何获取实际的角点。
根据@sandeep的答案,结果如下:

enter image description here

这些点应该沿着图像的角落移动,并固定在角落处。我知道如果将这些点放置为UIImageView的子视图,但是这些点是自由的,不能放置在UIImageView中,在应用旋转时移动。
1个回答

2

您需要从原始框架的每个角获取点并通过相同的变换传递它们。

因此,在旋转之前,左上角将是 let ul = view.frame.origin

然后旋转后的点是 let ulT = ul.applying(view.transform)

示例:

import UIKit
import PlaygroundSupport

class MyViewController : UIViewController {
    var imageView: UIView!
    var rotationRecognizer: UIRotationGestureRecognizer!
    var cornerView: UIView!

    override func loadView() {
        let view = UIView()
        view.backgroundColor = .white

        let frame = CGRect(x: 100, y: 200, width: 200, height: 200)
        imageView = UIView(frame: frame)
        imageView.backgroundColor = .blue
        view.addSubview(imageView)

        cornerView = UIView(frame: CGRect(x: 95, y: 195, width: 10, height: 10))
        cornerView.layer.cornerRadius = 5
        cornerView.backgroundColor = .red
        view.addSubview(cornerView)

        rotationRecognizer = UIRotationGestureRecognizer(target: self, action: #selector(handleRotation(recognizer:)))
        view.addGestureRecognizer(rotationRecognizer)

        self.view = view
    }

    @objc func handleRotation(recognizer: UIRotationGestureRecognizer) {
         imageView.transform = CGAffineTransform(rotationAngle: recognizer.rotation)
        var cornerPoint = CGPoint(
            x: 100 - imageView.center.x,
            y: 200 - imageView.center.y
        )
        cornerPoint = cornerPoint.applying(imageView.transform)
        cornerPoint.x += imageView.center.x
        cornerPoint.y += imageView.center.y
        cornerView.center = cornerPoint
    }
}

// Present the view controller in the Live View window
PlaygroundPage.current.liveView = MyViewController()

感谢回答@Ken,但是变换仅适用于CGPoint。我已经更新了我的问题,请检查。我需要根据UIImageView的旋转来旋转这些点。 - Amit Singh
没错。因此,您需要根据图像中的旋转点偏移该点(看起来您打算围绕中心旋转)。然后,您可以使用该变换后的点作为角落图像的中心点。 - Ken Boreham
@AmitSingh 我添加了代码示例以使其更清晰。 - Ken Boreham

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接