#59 少女之愛我,不愛我摘花瓣 App
Published in
6 min readJun 14, 2021
學習亂數,AVSpeechSynthesizer 講話和 toggle()
傳說中,想知道對方是否喜歡自己,只要找一朵花,一邊摘花瓣,一邊數著 ”她愛我,她不愛我”,摘到最後一片時若是她愛我,即表示她真的愛我。
功能:
- 點選花瓣摘花。
- 除了畫面上顯示愛我,不愛我,也會用 AVSpeechSynthesizer 大聲唸出。
- 搭配 Swift 4.2 的新語法,比方 toggle()
- 人物隨著愛與不愛切換不同表情
1. 點選花瓣摘花
畫面先製作一個花瓣的 Button
定義 變數 var isLove = true
使用 toggle() 語法,每點一次按鈕就會切換 isLove = true 或 isLove = false
建立物件 IBOutlet
@IBOutlet weak var petalsButton: UIButton!
@IBOutlet weak var loveLabel: UILabel!
@IBOutlet weak var girlImageView: UIImageView!
花瓣按鈕的 IBAction
如果 isLove 是 true,就顯示”他愛我”
@IBAction func press(_ sender: UIButton) {
isLove.toggle()
if isLove == true {
loveLabel.text = "他愛我"
girlImageView.image = UIImage(named: "yes")
} else{
loveLabel.text = "他不愛我"
girlImageView.image = UIImage(named: "not")
}
}
2. 用語音唸出文字
因為覺得要設定個好聽的速度音調不容易,所以還是放了可以調整的Slider
詳細作法參考之前的文章
新增可以控制音調與速度的 Slider,並建立 IBOutlet
@IBOutlet weak var speakMultiplier: UISlider!
@IBOutlet weak var speakRate: UISlider!
@IBOutlet weak var speakMultiplierLabel: UILabel!
@IBOutlet weak var speakRateLabel: UILabel!
建立音調速度 Slider 的 IBAction
並將語音寫成一個 function
// 音調速度
@IBAction func changeSlider(_ sender: UISlider) {
speakRateLabel.text = String(format: "%.2f", speakRate.value)
speakMultiplierLabel.text = String(format: "%.2f", speakMultiplier.value)
}func speak() {
let utterance = AVSpeechUtterance(string: loveLabel.text!)
let synthesizer = AVSpeechSynthesizer()
utterance.voice = AVSpeechSynthesisVoice(language: "zh-TW")
utterance.rate = speakRate.value
utterance.pitchMultiplier = speakMultiplier.value
synthesizer.speak(utterance)
}
press按鈕 裡加入 speak() 語音函式
語音不能直接加在按鈕的程式碼開頭,因為這樣唸出的字串會跟文字不一樣
要加在 if else 裡,所以寫成 function 只要加入 speak() 即可
@IBAction func press(_ sender: UIButton) {
// toggle() = 切換true或false
isLove.toggle()
print(isLove)
if isLove == true {
loveLabel.text = "他愛我"
girlImageView.image = UIImage(named: "yes")
speak()
} else{
loveLabel.text = "他不愛我"
girlImageView.image = UIImage(named: "not")
speak()
}
}
自訂Slider 小花圖案
override func viewDidLoad() {
super.viewDidLoad()
// 自訂Slider圖案
speakMultiplier.setThumbImage(UIImage(named: "flowers-icon"), for: .normal)
speakRate.setThumbImage(UIImage(named: "flowers-icon"), for: .normal)
}