变换的UIImageView失去轻扫手势

问题描述 投票:0回答:1

我有我想要在每次用户刷上它的时候旋转图像。它的工作原理是第一次,也是唯一一次!它是如何的看法是失去了滑动手势识别?

        myCircle = UIImageView( ... )
        myCircle.isUserInteractionEnabled = true

        let swipeLeft = UISwipeGestureRecognizer(target: self, action: #selector(swiping(sender:)))
        swipeLeft.direction = .left
        myCircle.addGestureRecognizer(swipeLeft)
        let swipeRight = UISwipeGestureRecognizer(target: self, action: #selector(swiping(sender:)))
        swipeRight.direction = .right
        myCircle.addGestureRecognizer(swipeRight)
    }

    @objc func swiping(sender: UISwipeGestureRecognizer) {
        // this function only called the first time!
        if sender.direction == UISwipeGestureRecognizer.Direction.left {
            myCircleRotation -= CGFloat(Double.pi/2)
        } else if sender.direction == UISwipeGestureRecognizer.Direction.right {
            myCircleRotation += CGFloat(Double.pi/2)
        }
        // if I comment out this next line, function is called (correctly) every swipe!
        myCircle.transform = CGAffineTransform(rotationAngle: myCircleRotation)
    }
swift uiimageview cgaffinetransform uiswipegesturerecognizer
1个回答
1
投票

您可以添加UIView作为容器,以便您的层次结构,然后将UIGestureRecognizers添加到容器视图,而不是到UIImageView。这将使你的图像,而不影响手势旋转。

import UIKit

class ImageViewController: UIViewController {

    @IBOutlet weak var myCircleView: UIImageView!
    @IBOutlet weak var containerView: UIView!

    var myCircleRotation:CGFloat = 0

    override func viewDidLoad() {
        super.viewDidLoad()
        setupImage()
    }

    private func setupImage() {
        let image = UIImage(named: "your-image")
        myCircleView.image = image
        myCircleView.isUserInteractionEnabled = true

        let swipeLeft = UISwipeGestureRecognizer(target: self, action: #selector(swiping(sender:)))
        swipeLeft.direction = .left
        containerView.addGestureRecognizer(swipeLeft)
        let swipeRight = UISwipeGestureRecognizer(target: self, action: #selector(swiping(sender:)))
        swipeRight.direction = .right
        containerView.addGestureRecognizer(swipeRight)
    }

    @objc func swiping(sender: UISwipeGestureRecognizer) {
        // this function only called the first time!
        if sender.direction == UISwipeGestureRecognizer.Direction.left {
            myCircleRotation -= CGFloat(Double.pi/2)
        } else if sender.direction == UISwipeGestureRecognizer.Direction.right {
            myCircleRotation += CGFloat(Double.pi/2)
        }

        UIView.animate(withDuration: 0.5) {
            self.myCircleView.transform = CGAffineTransform(rotationAngle: self.myCircleRotation)
        }
    }
} 
© www.soinside.com 2019 - 2024. All rights reserved.