gpt4 book ai didi

swift - UIPanGestureRecognizer - ImageView 在平移后恢复到原始位置

转载 作者:行者123 更新时间:2023-11-30 11:28:25 28 4
gpt4 key购买 nike

我正在使用 UIPanGestureRecognizer 测试以下项目。平移后如何“固定”图像?

这就是代码的用途:

(1) ViewController 上有 2 个 ImageView(image1, image2)。位置是由约束定义的。

(2) 我想将 image1 和 image2 移动到 2 个目标 ImageView(target1、target2)。

(3) 当我在任一目标图像上移动其中一个图像时,我希望图像保留在那里,无法再次移动。此外,第二个图像无法放置在已填充的目标上。

(4) 当我移动第二个图像时,我可以将其移动到空目标,图像停留在那里无法再次移动。

此代码的问题:

此代码适用于步骤(3)。问题是,当我开始移动第二个图像时,我放在目标上的第一个图像会弹回到原始位置。

import UIKit

class sample: UIViewController {

@IBOutlet weak var image1: UIImageView!
@IBOutlet weak var image2: UIImageView!
@IBOutlet weak var target1: UIImageView!
@IBOutlet weak var target2: UIImageView!

var target1flg: Bool!
var target2flg: Bool!

var imageViewOrigin: CGPoint!

override func viewDidLoad() {
super.viewDidLoad()

target1flg = true
target2flg = true

addPanGesture(v: image1)
addPanGesture(v: image2)

}

func addPanGesture(v: UIView) {

let pan = UIPanGestureRecognizer(target: self, action: #selector(sample.handlePan(sender:)))
v.addGestureRecognizer(pan)
}

@objc func handlePan(sender: UIPanGestureRecognizer) {

let pannedImageView = sender.view!

switch sender.state {

case .began:

imageViewOrigin = pannedImageView.frame.origin
view.bringSubview(toFront: pannedImageView)

case .changed:

moveViewWithPan(v: pannedImageView, sender: sender)

case .ended:
if pannedImageView.frame.intersects(target1.frame) && target1flg == true {
snapView(v: pannedImageView, targetBox: target1)
target1flg = false

}
else if pannedImageView.frame.intersects(target2.frame) && target2flg == true {
snapView(v: pannedImageView, targetBox: target2)
target2flg = false

}
else {
returnViewToOrigin(v: pannedImageView, loc: imageViewOrigin)
}

default:
break
}
}


func moveViewWithPan(v: UIView, sender: UIPanGestureRecognizer) {

let translation = sender.translation(in: view)

v.center = CGPoint(x: v.center.x + translation.x, y: v.center.y + translation.y)
sender.setTranslation(CGPoint.zero, in: view)
}


func returnViewToOrigin(v: UIView, loc: CGPoint) {

UIView.animate(withDuration: 0.3, animations: {
v.frame.origin = loc
})
}

func snapView(v:UIView, targetBox:UIImageView){
UIView.animate(withDuration: 0.3) {

v.center = CGPoint(x:targetBox.center.x, y: targetBox.center.y)
v.isUserInteractionEnabled = false
}
}
}

最佳答案

问题已解决。

我通过以下方式更改了 image1 和 image2 位置设置:(1)删除图像的约束。(2)将它们添加到新 View 下,并使用大小[检查器> View ]定位它们。

关于swift - UIPanGestureRecognizer - ImageView 在平移后恢复到原始位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50500307/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com