利用 page control,segmented control,button & gesture 更換內容

農曆年節即將到來,大年初四台灣家家戶戶都會有迎財神的習俗,在這裡借用一下五路財神爺的典故,和大家聊聊一些有關swift的小東西。

要先有構想,主題是五位財神爺,各自的小故事和圖片, 這需要一個Image View秀圖片,加上Text View來說故事,才能圖文並茂,並且利用 page control,segmented control,button & gesture 來控制畫面。

神尊的擺設習俗最大位的擺中間。參考廟方的擺設順序,需要一個索引(index)來存取array,並且讓app一開始執行就顯示主財神玄壇真君趙公明:

let godspic = ["north","west","center","south","east" ]
var index = 2

然後用這個index來指定Image View和Text View要顯示的資料

框架好了,故事和圖片素材收集好以後,丟進Assets,然後就可以開始先拉畫面,決定好Image View的位置,segmented control、page control配置,然後拉出各自的IBoutlet 和 IBAction。故事有點太長,因此Text View的背後我又加了個scroll view來協助上下滑動。

使用button或swipe gesture 加減index,在最末頁繼續輪播回第一頁,因此我們使用餘數來控制範圍,也就是說讓index永遠不會大於圖片總數而超出索引範圍:

 //segmented controller
@IBAction func selectGod(_ sender: Any) {
index=godsSegmentControl.selectedSegmentIndex
update()
}

//page controller
@IBAction func storypage(_ sender: Any) {
index=godsPageControl.currentPage
update()
}

//左右換頁按鈕
@IBAction func right(_ sender: Any) {
index = (index + godspic.count + 1) % godspic.count
update() ///財神只有五位,用餘數來控制頁數才不會超過index範圍 0 ~ 4
}


@IBAction func left(_ sender: Any) {
index = (index + godspic.count - 1) % godspic.count
update()
}


//手勢
@IBAction func swipeLeft(_ sender: Any) {
index = (index + godspic.count - 1) % godspic.count
update()
}



@IBAction func swipeRight(_ sender: Any) {
index = (index + godspic.count + 1) % godspic.count
update()
}

}

記得手勢要拉回Image View,神明才知道你在畫什麼符…

每一個動作做完之後要更新index 各元件才會同步:

func update() {

godsImageView.image=UIImage(named: godspic[index])
godsStories.text=stories[index]
godsSegmentControl.selectedSegmentIndex=index
godsPageControl.currentPage=index

開始時也要先來一下,神明才會各就各位:

override func viewDidLoad() {
super.viewDidLoad()
update()

中間遇到比較卡的事情反而是在網路上隨便找個字型,下載後直接拉近project資料夾,卻一直秀不出來,搞了很久一直以為是自己方式錯誤。

後來發現這個字體也無法掛進mac字體簿…

應該是字型本身的問題,免費字型太多了規格貌似也參差不齊。最後換王漢宗系列的才搞定,但也有遇到該系列幾個字體檔本身也掛不上mac的字體簿,swift似乎對字型的使用也很嚴格。

以上

--

--