IOS13 APP『Swift5』實例說明 — 骰子吹牛App
Published in
4 min readJan 2, 2020
骰子吹牛程式本身並不複雜,但是有一個地方需要注意,因為是要搖動骰子,所以會用到motion的偵測,那就先說明一下如何偵測晃動 (shake)呢?
Motion detected function主要有3個function,只需要在controller 裡覆寫下面的function就可,分別如下:
- motionBegan : 搖晃開始。
override func motionBegan(_ motion: UIEvent.EventSubtype, with event: UIEvent?) {
//搖動開始要做什麼事
}
- motionEnded : 搖晃結束。
override func motionEnded(_ motion: UIEvent.EventSubtype, with event: UIEvent?) {
//搖動結束要做什麼事
}
- motionCancelled : 搖晃取消。
override func motionCancelled(_ motion: UIEvent.EventSubtype, with event: UIEvent?) {
//搖動取消要做什麼事
}
那要注意什麼呢?因為搖晃開始播放搖動骰子的音樂,但是搖動結束時要停止搖動骰子的音樂。如果只有在motionEnded內呼叫停止播放搖動骰子的音樂,那麼在實機上(如iphone手機)搖晃時,你會發現有時偵測不到motionEnded,正常因該是motionBegan偵測到開始搖晃,motionEnded偵測到搖晃停止,但是卻不是這樣的,有機會有motionBegan但是沒有motionEnded,因此需要在motionCancelled中也加入停止播放搖動骰子的音樂。如果使用模擬器測試,則不會有這現象,如果使用模擬器可以從 Simulator 的 menu 點選 Hardware > Shake Gesture,或是快速鍵Control–Command–Z,發出搖動。
如果想了解播放音樂,可以參考下面的文章:
如果想了解動畫效果,可以參考下面的文章:
這邊順便說一下亂數產生image時,可以使用for in與randomElement()產生imageView,這樣不論要幾個骰子,都可以快速產生。
@IBOutlet var playOneDiceImageViews: [UIImageView]!
var deicImageNames = ["one", "two", "three", "four", "five", "six"]for imageView in playOneDiceImageViews{
imageView.image = UIImage(named: deicImageNames.randomElement()!)
}