swift从零开始--2048响应事件
2020-05-09 本文已影响0人
迷夏湖
昨天画好了主界面,今天给界面加点,让界面动起来,能够响应滑动事件。
1. 添加滑动响应事件
swift中添加滑动响应事件还是相对简单的,就是在ViewController中添加方法注册事件,上下左右滑动各对应一个具体的处理方法。废话不说,看代码。
// 增加手势事件:上下左右滑动
func setupSwipeEvent() {
let upSwipe = UISwipeGestureRecognizer(target:self, action:#selector(onUpSwipe(_:)))
upSwipe.numberOfTouchesRequired = 1
upSwipe.direction = .up
view.addGestureRecognizer(upSwipe)
}
// 向上滑动事件处理
@objc func onUpSwipe(_ swiper:UISwipeGestureRecognizer) {
NSLog("向上滑动了")
// 随机生成一个方块
mainScene.boardPanel.insertRandUnit();
}
完了记得要在onViewDid方法中添加setupSwipeEvent这个方法哦。
2. 处理滑动事件
由于2048滑动事件实际处理想起来没那么简单,这次先实现向上滑动时随机添加一个方块,熟悉下这个过程。由于BoardPanel中有方块数组的定义,因此在这个类中添加随机方块的方法。
// 随机插入方块
func insertRandUnit() {
let emptyArr = getRandEmptyGrids()
NSLog(String(emptyArr!.count))
if emptyArr!.isEmpty {
NSLog("全放满了")
return
}
let randIndex = Int(arc4random_uniform(UInt32(emptyArr!.count)))
let label = emptyArr![randIndex]
label.text = "2"
label.backgroundColor = UIColor(red: 0.7, green: 0.8, blue: 1, alpha: 1)
}
// 获取空的方块数组
func getRandEmptyGrids() -> [UILabel]! {
var emptyArr = [UILabel]() //空数组
for i in 0 ..< DIM*DIM {
let label = gridArr[i];
// 通过label删的text内容判断是否是空的
if("" == label.text) {
emptyArr.append(label)
}
}
return emptyArr
}
3. 效果图
用模拟器测试,达到了预期的效果。
image.png
4.下一步计划
下一步,要研究下方块合并时的动画,以及方块连续合并并积分。