如何在 Swift 4 中的视图控制器中将多个 uiview 拖到另一个 uiview 或图像上
How to drag multiple uiview on another uiview or image in a view controller in Swift 4
我正在开发一款益智游戏,我必须将多个 UIviews
拖到另一个 UIviews
或 UIimages
上 Viewcontroller
。
这是单个 uiview 可拖动的 。
在这个程序中只有一个 UIview
是可拖动的,现在我想添加更多 UIviews
我可以拖动到谁。
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
我已经为你做了一个简单的例子。
在示例中,我创建了一个函数,它将创建 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)
}
}
然后通过以下代码使这些视图可拖动:
/// 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 {
}
}
这不是一个完整的示例,但希望它能成为您的一个很好的起点^______^。
我正在开发一款益智游戏,我必须将多个 UIviews
拖到另一个 UIviews
或 UIimages
上 Viewcontroller
。
这是单个 uiview 可拖动的
在这个程序中只有一个 UIview
是可拖动的,现在我想添加更多 UIviews
我可以拖动到谁。
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
我已经为你做了一个简单的例子。
在示例中,我创建了一个函数,它将创建 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)
}
}
然后通过以下代码使这些视图可拖动:
/// 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 {
}
}
这不是一个完整的示例,但希望它能成为您的一个很好的起点^______^。