ios - 可拖动的 UIView Swift 3

标签 ios swift xcode animation swift3

我希望能够拖动屏幕上的对象,但它们不会。我什么都试过了,但还是不行。

这是代码。

func panGesture(gesture: UIPanGestureRecognizer) {
    switch gesture.state {
    case .began:
        print("Began.")
        for i in 0..<forms.count {
            if forms[i].frame.contains(gesture.location(in: view)) {
                gravity.removeItem(forms[i])
            }
        }
    case .changed:
        let translation = gesture.translation(in: forms[1])

        gesture.view!.center = CGPoint(x: gesture.view!.center.x + translation.x, y: gesture.view!.center.y + translation.y)

        gesture.setTranslation(CGPoint.zero, in: self.view)

        print("\(gesture.view!.center.x)=\(gesture.view!.center.y)")
        print("t;: \(translation)")
    case .ended:
        for i in 0..<forms.count {
            if forms[i].frame.contains(gesture.location(in: view)) {
                gravity.addItem(forms[i])
            }
        }
        print("Ended.")
    case .cancelled:
        print("Cancelled")
    default:
        print("Default")
    }
}

它们也有引力。形式是正方形和圆形。

解释: 在 .began - 我禁用所选表单的重力。 在 .changed - 我尝试更改坐标。 在 .end - 我再次启用重力。

屏幕截图。

enter image description here

enter image description here

最佳答案

第 1 步:取一个要拖到 Storyboard中的 View 。

@IBOutlet weak var viewDrag: UIView!

第 2 步:添加 PanGesture。

var panGesture       = UIPanGestureRecognizer()

第 3 步:在 ViewDidLoad 中添加以下代码。

override func viewDidLoad() {
    super.viewDidLoad()

    panGesture = UIPanGestureRecognizer(target: self, action: #selector(ViewController.draggedView(_:)))
    viewDrag.isUserInteractionEnabled = true
    viewDrag.addGestureRecognizer(panGesture)

}

第 4 步:draggedView 的代码。

func draggedView(_ sender:UIPanGestureRecognizer){
    self.view.bringSubview(toFront: viewDrag)
    let translation = sender.translation(in: self.view)
    viewDrag.center = CGPoint(x: viewDrag.center.x + translation.x, y: viewDrag.center.y + translation.y)
    sender.setTranslation(CGPoint.zero, in: self.view)
}

第 5 步: 输出。

GIF

关于ios - 可拖动的 UIView Swift 3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43714948/

相关文章:

c - Endianness——为什么 chars 将 Int16 打印倒过来?

ios - "DateWithFormat"适用于终端但不适用于 iOS?

ios - Atos 没有正确地符号化系统框架/库

ios - 如果 swift 按下 NSButton,则创建简单的 Action

ios - 播放长音乐时,AVPlayer 中的搜索时间更快

xcode - 如何获取 Xcode Bot "Run Script"触发器的提交 SHA?在 Github 上更新测试状态

iphone - Xcode:iPhone 应用程序代码设计错误

iOS - UIBezierPath 使起始角度始终垂直

ios - 如何从外部更新 SwiftUI View 状态(例如 UIViewController)

ios - 将 UILabel 放置在父级的中心