繁体   English   中英

Swift:移动后恢复UIView中心

[英]Swift: restoring UIView center after moving it

我正在使用手势缩放和移动UIImageView(例如,Instagram缩放)。 手势结束后,我想恢复UIImageView的初始位置,但是由于它是参考类型,所以无法获得初始中心的副本。 使用:

let prevCenter = myImage.center

当然是没用的。 我该如何复制?

缩放并移动时,将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
}

您确定没有在prevCenter地方更新prevCenter吗? center是struct,因此复制它应该没有问题。

只需在视图处于原始状态时,开始缩放之前以及在使用正确的框架绘制视图后确保将其(居中)

let imageView = UIImageView(frame: CGRect(x: 10, y: 10, width: 20, height: 20))

let prevCenter = view.center // 20, 20

imageView.center = CGPoint(x: 50, y: 50)

// imageView.center - 50, 50
// prevCenter - 20, 20

imageView.frame = CGRect(x: 40, y: 40, width: 10, height: 10)
// imageView.center - 45, 45
// prevCenter - 20, 20

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM