如何在Swift、iOS中制作可重新定位的3x3正方形?
我是Swift(和iOS编程)新手,遇到了一个问题: 我有一个3x3区域,每个单元都有UIImageView-s 这些必须是可移动的,所以在拖动它们时,它们必须移动到指定的位置。像这样:如何在Swift、iOS中制作可重新定位的3x3正方形?,ios,swift,Ios,Swift,我是Swift(和iOS编程)新手,遇到了一个问题: 我有一个3x3区域,每个单元都有UIImageView-s 这些必须是可移动的,所以在拖动它们时,它们必须移动到指定的位置。像这样: ┌──┬──┬──┐ │ 1│ 2│ 3│ ├──┼──┼──┤ │ 4│ 5│ 6│ ├──┼──┼──┤ │ 7│ 8│ 9│ └──┴──┴──┘ 将第一行拖动到右侧会产生以下结果: ┌──┬──┬──┐ │ 3│ 1│ 2│ 1,2,3 changed to 3,1,
┌──┬──┬──┐
│ 1│ 2│ 3│
├──┼──┼──┤
│ 4│ 5│ 6│
├──┼──┼──┤
│ 7│ 8│ 9│
└──┴──┴──┘
将第一行拖动到右侧会产生以下结果:
┌──┬──┬──┐
│ 3│ 1│ 2│ 1,2,3 changed to 3,1,2
├──┼──┼──┤
│ 4│ 5│ 6│
├──┼──┼──┤
│ 7│ 8│ 9│
└──┴──┴──┘
如果没有动画,或者可能使用动画,我如何才能做到这一点?UIAttachmentBehavior类可用于创建两个项目之间或项目与点之间的连接。您可以通过将视图附加到定位点,然后添加平移手势来识别屏幕上的拖动,同时将附加视图的定位点更新到用户拖动到的位置来使用它 您可以使用这些平移手势执行多种不同类型的平移/动画。这里有一个例子,你可以修改和编辑,以适合你的应用程序的手势 将平移手势识别器从对象库拖动到视图控制器,并通过将控件从识别器拖动到AttachViewController.swift文件,为手势识别器创建动作。将操作手柄命名为span,并将操作类型选择为uipangestrerecognizer,而不是AnyObject 它将包含类似于此示例的代码*请注意,正方形是通过编程方式创建的。但在您的情况下,您可以用UIView替换。当然,您可以随意命名ViewController类 你的应用程序没有使用重力,但它仍然在这里
import UIKit
class AttachViewController: UIViewController {
var squareView: UIView!
var anchorView: UIView!
var attachment: UIAttachmentBehavior!
var animator: UIDynamicAnimator!
var gravity: UIGravityBehavior!
@IBAction func handlePan(sender: UIPanGestureRecognizer) {
attachment.anchorPoint = sender.locationInView(view)
anchorView.center = sender.locationInView(view)
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
squareView = UIView(frame: CGRect(x: 100, y: 100, width: 100, height: 100))
squareView.backgroundColor = UIColor.blueColor()
view.addSubview(squareView)
anchorView = UIView(frame: CGRect(x: view.center.x, y: view.center.y, width: 20, height: 20))
anchorView.backgroundColor = UIColor.redColor()
view.addSubview(anchorView)
attachment = UIAttachmentBehavior(item: squareView, attachedToAnchor: CGPointMake(anchorView.center.x, anchorView.center.y))
animator = UIDynamicAnimator(referenceView: view)
animator.addBehavior(attachment)
gravity = UIGravityBehavior(items: [squareView])
animator.addBehavior(gravity)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
粗略地给出一个想法
var containerview = UIView() //set frame and color and stuff
var boxdata = [[UIImageView]]()
func viewdidload() {
for index in 0..<3 {
var row = [UIImageView]()
for index in 0..<3 {
println(index)
var imageview = UIImageView() //set frame color image etc set so each iteration has a different frame..
row.append(imageview)
containerview.addSubview(imageview)
}
boxdata.append(row)
}
}
func swaplocations(first: UIImageView, second: UIImageView) {
//swap frame of the 2 views and add animate with duration here
}
var containerview=UIView()//设置框架、颜色和内容
var-boxdata=[[UIImageView]]()
func viewdidload(){
对于0中的索引..发布您首先尝试的内容我并没有真正完成任何部分,只是一个带有这些数字的2d数组,另一个只是故事板