У меня есть этот код, который заставляет мое изображение вращаться, масштабировать и панорамировать, чтобы позиционировать его на экране.
Проблема в том, что когда я поворачиваю изображение более чем на 90º, X и Y инвертируются. т.е. если я двигаюсь влево, изображение поднимается, а если я двигаюсь вправо, изображение опускается. Но когда изображение находится под углом 0º, я могу перемещать его как обычно.
class ViewController: UIViewController, UIGestureRecognizerDelegate {
@IBOutlet weak var imgLogo: UIImageView!
@IBOutlet weak var scrollLogo: UIScrollView!
var identity = CGAffineTransform.identity
override func viewDidLoad() {
super.viewDidLoad()
self.setupLayout()
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
self.navigationController?.setNavigationBarHidden(true, animated: false)
self.navigationItem.backBarButtonItem = UIBarButtonItem.init(title: " ", style: .plain, target: nil, action: nil)
self.navigationItem.backBarButtonItem?.tintColor = .white
}
func setupLayout(){
let pinchGesture = UIPinchGestureRecognizer(target: self, action: #selector(scale))
let rotationGesture = UIRotationGestureRecognizer(target: self, action: #selector(rotate))
let panGesture = UIPanGestureRecognizer(target: self, action: #selector(positioningImage))
pinchGesture.delegate = self
rotationGesture.delegate = self
panGesture.delegate = self
view.addGestureRecognizer(pinchGesture)
view.addGestureRecognizer(rotationGesture)
view.addGestureRecognizer(panGesture)
}
@objc func scale(_ gesture: UIPinchGestureRecognizer) {
switch gesture.state {
case .began:
identity = imgLogo.transform
case .changed,.ended:
imgLogo.transform = identity.scaledBy(x: gesture.scale, y: gesture.scale)
case .cancelled:
break
default:
break
}
}
@objc func rotate(_ gesture: UIRotationGestureRecognizer) {
imgLogo.transform = imgLogo.transform.rotated(by: gesture.rotation)
}
@objc func positioningImage(_ gesture: UIPanGestureRecognizer) {
let points = gesture.translation(in: scrollLogo)
imgLogo.transform = imgLogo.transform.translatedBy(x: points.x, y: points.y)
gesture.setTranslation(CGPoint.zero, in: scrollLogo)
}
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
return true
}
}
Кто-нибудь может помочь мне указать, что не так? Где / как исправить?
Спасибо