Simulator Screen Shot 2016年3月23日 上午11.02.35.png
DragSquaresView.gif
DragSquaresView.swift
import UIKit
class DragSquaresView: UIView {
let itemArray = NSMutableArray()
var contain:Bool!
var startPoint: CGPoint!
var originPoint: CGPoint!
override init(frame: CGRect) {
super.init(frame: frame)
createdView()
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
func createdView() {
let W = UIScreen.mainScreen().bounds.width //屏幕宽度
_ = UIScreen.mainScreen().bounds.height //屏幕高度
let allView = 40 // 全部视图个数
let mainViewW:CGFloat = W/4 //视图宽度
let mainViewH:CGFloat = W/4 //视图高度
let totalloc = 4 //列数
let margin = (W - mainViewW * CGFloat(totalloc))/5 //边缘
for i in 0..<allView {
let loc = i%totalloc //列数
let row = i/totalloc //行数(1/3=0,2/3=0,3/3=1)
let viewX = margin + (margin + mainViewW) * CGFloat(loc)
let viewY = margin + (margin + mainViewH) * CGFloat(row)
//创建视图
let btn = UIButton(frame: CGRect(x: viewX, y: viewY+20, width: mainViewW, height: mainViewH))
btn.tag = i
btn.titleLabel?.font = UIFont.systemFontOfSize(20)
btn.backgroundColor = randonColor()
btn.setTitle("\(i+1)", forState: .Normal)
self.addSubview(btn)
let longGesture = UILongPressGestureRecognizer(target: self, action: "buttonLongPressed:")
btn.addGestureRecognizer(longGesture) //创建手势
itemArray.addObject(btn)
}
}
// 手势方法
func buttonLongPressed(sender: UILongPressGestureRecognizer) {
let btn = sender.view as! UIButton
switch sender.state {
case .Began:
startPoint = sender.locationInView(sender.view)
originPoint = btn.center
UIView.animateWithDuration(0.2, animations: { () -> Void in
btn.transform = CGAffineTransformMakeScale(1.1, 1.1)
btn.alpha = 0.7
})
case .Changed:
let newPoint = sender.locationInView(sender.view)
let deltaX = newPoint.x - startPoint.x
let deltaY = newPoint.y - startPoint.y
btn.center = CGPoint(x: btn.center.x + deltaX, y: btn.center.y + deltaY)
let index = indexOfPoint(btn.center, withButton: btn)
if index < 0 {
contain = false
} else {
UIView.animateWithDuration(0.2, animations: { () -> Void in
var temp = CGPointZero
let button = self.itemArray[index] as! UIButton
temp = button.center
button.center = self.originPoint
btn.center = temp
self.originPoint = btn.center
self.contain = true
})
}
case .Ended:
UIView.animateWithDuration(0.2, animations: { () -> Void in
btn.transform = CGAffineTransformIdentity
btn.alpha = 1.0
if self.contain != nil {
btn.center = self.originPoint
}
})
default:
break
}
}
func indexOfPoint(point: CGPoint, withButton btn: UIButton) -> Int {
for i in 0..<itemArray.count {
let button = itemArray[i] as! UIButton
if button != btn {
if CGRectContainsPoint(button.frame, point) {
return i
}
}
}
return -1
}
//随机颜色
func randonColor() -> UIColor {
let randomR:CGFloat = CGFloat(drand48())
let randomG:CGFloat = CGFloat(drand48())
let randomB:CGFloat = CGFloat(drand48())
return UIColor(red: randomR, green: randomG, blue: randomB, alpha: 1.0)
}
}
ViewController.swift
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
//使用
let dragView = DragSquaresView(frame: self.view.frame)
self.view.addSubview(dragView)
}
}