实训第二天,第一个Demo已经完成了。进展速度还是蛮快的。
简单描述一下第一个Demo的功能吧:
This is the awesome game of Bull's Eye where you can win points and earn fame by dragging a slider.
Your goal is to place the slider as close as possible to the target value. The closer you are, the more points you score.
Enjoy!
简言之,就是一个回合制得分游戏:
首先程序给出一个目标值,这个目标值是1-100间的随机数。
然后玩家通过拖动滑条,来逼近这个目标值。拖动滑条得到的值为当前值。
玩家通过点击【Hit Me!】按钮,判断当前值与目标值的偏差,从而决定相应的完成档次与得分:
由于CSDN不能贴Swift代码,下面的代码全部用OC格式贴出:
可以看到,得分 = 100-绝对偏差。
如果是“完美的”Hit,分数会追加100分。如果是“近乎完美的”,分数会追加50分。
let difference = abs(currentValue - targetValue)
var points = 100 - difference
let title: String
if difference == 0 {
title = "Perfect!"
points += 100
} else if difference < 5 {
title = "You almost had it!"
points += 50
} else if difference < 10 {
title = "Pretty good!"
} else {
title = "Not even close..."
}
score += points //sum the score
为了修正alert的异步性,也就是当Alert动作完成时才进入新回合、更改Label的值,我做了如下改动:
let action = UIAlertAction(title:"OK",
style:.default,
handler:{ action in
self.startNewRound()
self.updateLables()
})
alert.addAction(action)
// make the alert visible
present(alert,animated: true,completion: nil)
下面贴出新回合、新游戏、更新标签的代码:
func startNewRound() {
round += 1
targetValue = 1 + Int(arc4random_uniform(100))
currentValue = 50
slider.value = Float(currentValue)
}
func startNewGame() {
score = 0
round = 0
startNewRound() //NewRound will set round ++
}
func updateLables() {
targetLabel.text = String(targetValue)
scoreLabel.text = String(score)
roundLabel.text = String(round)
// targetLabel.text = "\(targetValue)" // the same
}
以上是今天上午的工作。
今天下午时,我创建了新的视图控制器,用来管理一个说明性的AboutView。
主控制器和说明控制器之间采用了飞入的切换动画。下面贴出Storyboard Segue的属性:
额外做了一些工作,是将About View中的Text View替换成了Web View,植入了写好的HTML代码。
if let url = Bundle.main.url(forResource: "BullsEye",
withExtension:"html") {
if let htmlData = try? Data(contentsOf: url) {
let baseURL = URL(fileURLWithPath: Bundle.main.bundlePath)
webView.load(htmlData, mimeType: "text/html",
textEncodingName: "UTF-8", baseURL:baseURL )
}
}
最后就是移植性的问题了。要让SE界面的视图在4s\6\6s\7\7Plus等等都适应。
8.3.2的Xcode在Align面板有点小问题,可以添加约束,但是不能update frame,这点让我有些疑惑。
不过还是成功地解决了移植性的问题。
然后给这款App添加了图标并命名。
最后的最后,要commit到分支。
梳理一下 git的基本步骤:
1. cd到项目文件夹内
2. git init (初始化)
2. git remote add origin https://xxxxxxxxxxxx(仓库地址)
3. git remote -v (非必要步骤)
4. git checkout -b your_branchname (创建你的分支)
5. git add .
6. git status (非必要步骤)
7. git commit -m "proj_name" (提交)
8. git status (非必要步骤)
9. git push -u origin your_branchname (push)
10. 输入密码 (第二次可能就不用输入了)
11. 回车后开始提交。。。最后显示: Branch your_branchname set up to track remote branch your_branchname from origin
以上就是今天完成的工作。