ios - 如何在 Swift 4 中的 View Controller 中将多个 uiview 拖动到另一个 uiview 或图像上

标签 ios swift uiview uigesturerecognizer

我正在开发一款益智游戏,我必须将多个 UIviews 拖动到 Viewcontroller 中的另一个 UIviewsUIimages.

这是link对于单个 uiview 可拖动。

在这个程序中只有一个可拖动的UIview,现在我想添加更多可以拖动的UIview

import UIKit

class GameViewController: UIViewController, UIGestureRecognizerDelegate, UITextFieldDelegate {

@IBOutlet weak var viewDrag: UIView!

var panGesture  = UIPanGestureRecognizer()

override func viewDidLoad() {
super.viewDidLoad()
panGesture = UIPanGestureRecognizer(target: self, action: #selector(GameViewController.draggedView(_:)))
viewDrag.isUserInteractionEnabled = true
viewDrag.addGestureRecognizer(panGesture)
viewDrag.backgroundColor = UIColor.green
}

override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}

@objc 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)
 }
}

这是一个白色方形UIview的图像,可以在viewcontroller中的UIimage上拖动

enter image description here

最佳答案

我为你做了一个简单的例子。

在示例中,我创建了一个函数,它将创建 5 个可拖动的 UIView:

   /// Creates A Row Of 5 Draggable UIViews
func createDraggableViews(){

    //1. Determine The Size Of The Draggable View
    let viewSize = CGSize(width: 50, height: 50)

    //2. Create Padding Between The Views
    let padding: CGFloat = 10

    //2. Create 5 Draggable Views
    for i in 0 ..< 5{
        print((CGFloat(i) * viewSize.width) + 10)
        let draggableView = UIView(frame: CGRect(x: 10 + (CGFloat(i) * viewSize.width) + (CGFloat(i) * padding), y: 100,
                                                 width: viewSize.width, height: viewSize.height))
        draggableView.backgroundColor = .purple

        //2a. Create A Pan Gesture Recognizer So The View Can Be Moved
        let panGesture = UIPanGestureRecognizer(target: self, action: #selector(moveObject(_:)))
        draggableView.addGestureRecognizer(panGesture)

        //2b. Add The Draggable View To The Main View
        self.view.addSubview(draggableView)
    }

}

然后通过以下代码使这些 View 可拖动:

 /// Moves A Draggable Object Around The Screen
///
/// - Parameter gesture: UIPanGestureRecognizer
@objc func moveObject(_ gesture: UIPanGestureRecognizer){

    //1. Check That We Have A Valid Draggable View
    guard let draggedObject = gesture.view else { return }

    if gesture.state == .began || gesture.state == .changed {

        //2. Set The Translation & Move The View
        let translation = gesture.translation(in: self.view)
        draggedObject.center = CGPoint(x: draggedObject.center.x + translation.x, y: draggedObject.center.y + translation.y)
        gesture.setTranslation(CGPoint.zero, in: self.view)


    }else if gesture.state == .ended {

    }
}

这不是一个完整的示例,但希望它可以成为您的一个很好的起点^______^。

关于ios - 如何在 Swift 4 中的 View Controller 中将多个 uiview 拖动到另一个 uiview 或图像上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47152406/

相关文章:

ios - 如何在 iOS 6 中强制方向为纵向

ios - 核心数据 - 编辑、增加和保存属性到已经存在的实体

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

ios - 使用自动布局使 3 个 UIbuttons 居中对齐

Swift 设置子类 UIView 的宽度和高度

swift - 如何添加 "one-to"的 "one-to-many"部分来获取结果

ios - 带有 Swift 5.0 编译器的 Xcode 10.2 - 协议(protocol)继承问题

ios - UITableView 滚动时遇到的问题

objective-c - 旋转和捏合(缩放)手势会扰乱父 UIView 及其 subview 框架

ios - 隐藏导航栏和内容之间的分隔线