Как я могу получить фактическую точку углов UIImageView после применения преобразования вращения - PullRequest
0 голосов
/ 27 сентября 2018

Я применил преобразование вращения к 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 Ответ

0 голосов
/ 27 сентября 2018

Вы получите точки из каждого угла исходного кадра и пропустите их через одно и то же преобразование.

Таким образом, верхний левый угол будет 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()
...