原來是個存在感跟我一樣低的邊緣人啊!
不知道大家有沒有印象,在iphone的主頁下有一排圓點點,在切換頁面時點點的顏色會不同,來表示你現在正在顯示哪一頁,而這個功能就是用UIPageControl做的。
通常UIPageControl會搭配UIScrollView,但因為我還沒讀到scrollView,所以就先用UIPageControl來實作個簡單的頁面切換吧!
真的很簡單,簡單到我自己都覺得我在混。
先給大家看一下完成的demo,實在是太可愛了❤️
(圖片來源:google)
首先我們要先初始化一個UIImageView來放活寶們的圖片,並將import進xcode的圖片名稱照對應的頁數放進一個陣列:
let pageImageView = UIImageView(frame: CGRect(x: 0, y: 0, width: UIScreen.main.bounds.width, height: UIScreen.main.bounds.height))
pageImageView.contentMode = UIView.ContentMode.scaleAspectFit
let imageNameArray = ["finn", "jack", "beemo", "princessBubblegum", "iceKing", "lumpySpacePrincess"]
等等,這章不是講UIPageControl嗎@__@
不過不放imageView的話沒東西切換啊啊大家請睜一隻眼閉一隻眼。
接下來先初始化一個UIPageControl的實體並設定總頁數:
let newPageControl = UIPageControl()
newPageControl.numberOfPages = imageNameArray.count
總頁數我們使用陣列資料的筆數來代替直接寫死6張圖片,來增加程式碼的可修改性。如此一來如果需要新增圖片,只需要在陣列中新增資料,頁數便會同步增加。
完成前置作業後設定初始頁面,並將對應的圖片指定給imageView
newPageControl.currentPage = 2
pageImageView.image = UIImage(named: imageNameArray[newPageControl.currentPage])
就先用可愛的Beemo當作初始頁面吧~不過可以看到,當我們切換PageControl的時候,圖片並沒有跟著切換,因為圖片還是指定為初始頁面的對應圖,我們必須為他指定一個動作:
@objc func changePageImage(_ sender: UIPageControl) {
switch sender.currentPage {
case 0...imageNameArray.count-1:
pageImageView.image = UIImage(named: imageNameArray[newPageControl.currentPage])
default: break
}
}
並把他加入UIPageControl裡:
newPageControl.addTarget(self, action: #selector(changePageImage(_:)), for: .valueChanged)
當pageControl的value改變的時候,就會呼叫changePageImage這個function,他裡面有一個判斷式,可以根據當前pageControl的頁數來顯示相對應的圖片。
現在的狀態已經跟我們的成品有87%像了,大家有注意到有哪裡不一樣嗎?
沒錯!就是pageControl的顏色不一樣(自問自答)。
pageControl的顏色是可以指定的,有整體顏色和當前頁面顏色。
以下提供2種顏色的指定方法:
newPageControl.pageIndicatorTintColor = UIColor.white
newPageControl.currentPageIndicatorTintColor = UIColor(red: 61.0/255.0, green: 89.0/255.0, blue: 171.0/255.0, alpha: 1.0)
可以直接使用UIColor內建的顏色,也可以指定顏色的RGB和透明度。
指定完之後,就是我們可愛的成品啦~
我這不是要說了嗎。
還有一些特性在此次範例中沒有使用到,來跟大家介紹一下:
在pageControl只有一頁的前提下,若hideForSinglePage指定為true時會隱藏pageControl(下圖右)。
但我實在搞不懂,只有一頁的話是要用屁用pageControl啊~~
就算會新增頁面也不用藏吧,pageControl的存在感本來就很薄弱了不要再剝奪啊邊緣人臭了嗎QQ
這是一個很神奇的功能。
當pageControl的defersCurrentPageDisplay是true的時候,你點擊pageControl還是會觸發他的動作,但current page的圓點不會更新,要一直到你呼叫updateCurrentPageDisplay()的時候原點才會重新更新。
但我實在是搞不懂,為什麼要這樣子做啊?
是為了整人嗎?其實切換了卻要騙你沒切換這樣,apple的工程師真是調皮啊!
那存在感很低的UIPageControl就跟著這個可愛的demo告一段落啦~
下一回是UISegmentedControl。