Swift:移动 UIView 中心后恢复它

Luc*_*ano 3 value-type ios swift

我使用手势来缩放和移动 UIImageView(例如 Instagram 缩放)。当手势结束时,我想恢复 UIImageView 初始位置,但我无法获取初始中心的副本,因为它是引用类型。使用:

let prevCenter = myImage.center
Run Code Online (Sandbox Code Playgroud)

当然是没用的。我怎样才能复制它?

Gra*_*lex 5

缩放和移动适用transform于视图。最后只需设置.identity值即可。

编辑

例子:

@IBOutlet weak var butt: UIButton!

var offsetTransform: CGAffineTransform = .identity
var zoomTransform: CGAffineTransform = .identity

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view.

    let pan = UIPanGestureRecognizer(target: self, action: #selector(onPan(pan:)))
    pan.minimumNumberOfTouches = 2
    pan.delegate = self
    view.addGestureRecognizer(pan)

    let pinch = UIPinchGestureRecognizer(target: self, action: #selector(onPinch(pinch:)))
    pinch.delegate = self
    view.addGestureRecognizer(pinch)
}

@objc func onPinch(pinch: UIPinchGestureRecognizer) {
    let s = pinch.scale
    zoomTransform = CGAffineTransform(scaleX: s, y: s)
    butt.transform = offsetTransform.concatenating(zoomTransform)
    if (pinch.state == .ended) {
        finish()
    }
}

@objc func onPan(pan: UIPanGestureRecognizer) {
    let t = pan.translation(in: view)
    offsetTransform = CGAffineTransform(translationX: t.x, y: t.y)
}

func updatePos() {
    butt.transform = offsetTransform.concatenating(zoomTransform)
}

func finish() {
    butt.transform = .identity
}

func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
    return true
}
Run Code Online (Sandbox Code Playgroud)