Timer自動換圖、UISegmentedControl 、Scroll View、AVPlayerLooper背景音樂播放(Market02)
Published in
6 min readApr 20, 2024
完善上一篇文章畫面如下(有些忘記操作請看YT 連結):
完整音樂跟Scroll View:
下面一樣為了方便大家使用,每個功能會獨立出來,也方便閱讀 。
1.Timer自動換圖
//上一篇有建立Image---------所以這裡省略建立--//
var autoImage: Timer?
override func viewDidLoad() {
super.viewDidLoad()
//設定一開始圖案顯示哪一張,因為上面有宣告index=0所以這邊會index會從0開始
changePicture.image = UIImage(named: pictureArray[index])
//timer每三秒往下換一張圖,跟著 @objc func updatePicture()配合著一起看
autoImage = Timer.scheduledTimer(timeInterval: 3.0, target: self,
selector: #selector(updatePicture), userInfo: nil, repeats: true)
}
//這是為了離開此頁要關掉這個timer
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
autoImage?.invalidate()
}
2.UISegmentedControl -> Scroll View
我建立了三個視窗,分別售賣不同商品,因為背景顏色設置透明,所以預覽畫面才會疊在一起,ScrollView設定在我的其他文章有,這邊不贅述。
以下是SegmentedControl控制三個scrollView的顯示方式:
@IBOutlet weak var segment: UISegmentedControl!
@IBAction func segmentAction(_ sender: UISegmentedControl) {
// 先將所有的 UIScrollView 隱藏
scrollStone.isHidden = true
scrollFlower.isHidden = true
scrollJade.isHidden = true
//點選按鈕後,對應的畫面“不隱藏“所以就會出現
switch sender.selectedSegmentIndex{
case 0:
scrollStone.isHidden = false
case 1:
scrollFlower.isHidden = false
case 2:
scrollJade.isHidden = false
default:break
}
//為了打開app有顯示某個畫面所以要先打開第一個
override func viewDidLoad() {
super.viewDidLoad()
// 預設顯示 scrollStone,隱藏其他兩個 UIScrollView
scrollStone.isHidden = false
scrollFlower.isHidden = true
scrollJade.isHidden = true
}
4.AVPlayerLooper背景音樂播放
因為我很「ㄏㄧ 花」 所以我很喜歡放一些有的沒的讓我的作品更豐富,背景音樂是去網路上找免費,然後剪輯製作而成(P圖、特效、製作一條龍呢):
import AVFoundation
//背景音樂循環播放-------------------//
var looper: AVPlayerLooper?
override func viewDidLoad() {
super.viewDidLoad()
// 使用Bundle.main.url(forResource:withExtension:)方法來查找指定的背景音樂檔案
if let url = Bundle.main.url(forResource: "backgroundMusic", withExtension: "mp3"){
// 使用獲取到的URL初始化AVQueuePlayer對象
let player = AVQueuePlayer()
let item = AVPlayerItem(url: url)
looper = AVPlayerLooper(player: player, templateItem: item)
player.play()
}
}
補充-清除建制做
提示:把畫面所有數量「文字」改成”0"就行了。
以下是記錄一下學程式到現在的感想,趕時間的可以跳過:
很多東西真的卡住的時候很難懂,如果真的看不懂某個東西,或你不知道它可以用在哪,先跳過。不要鑽牛角尖,因為會抹滅你的興趣跟成就感,「先做出來」最重要(這是一位資深開導我的話)。
常常也會覺得,我只是一個抄code的無情機器,但是學習不是就是這樣嗎? 都是從模仿開始,別急呀夥伴們,這句話對你們說也對自己說。
先「會用」所有東西,用著用著,一些東西就在你腦海裡了,腦神經連結也是需要時間讓他長出那條神經的(另外一位資深跟我說的話)。
希望我成功進入職場後,再回來回憶學習歷程,如果覺得原來當初我也有青澀的時候,那就代表我成功了~