UIKit-UIStepper按鈕(文字轉數字)、Array換圖、UIPageControl、Button換圖、UISwipeGestureRecognizer、(Market01)
Published in
9 min readApr 3, 2024
swift: Swipe滑動換圖、Stepper按鈕文字轉數字、數字再轉回文字、PageControl、Button
因為內容太多,決定分幾個部分寫功能,之後會出第二篇解釋其他功能用法。
先來看一下畫面吧:
動態展示:
接下來我會把每個功能都獨立分別列出來,這樣看的時候才不會像大海撈針一樣痛苦,每個功能直接複製貼上就能直接使用,如果要整合,要記得把一樣的部分刪除。
- PageControl & Array
如圖,讓使用者可以按下去後換下一張或上一張圖。
//建立一個圖片庫
let pictureArray = ["changePic1","changePic2","changePic3"]
var index = 0
//建立要換圖的ImageView
@IBOutlet weak var changePicture: UIImageView!
//建立Page Control按鈕
@IBOutlet weak var PageControl: UIPageControl!
@IBAction func clickpagecontrol(_ sender: UIPageControl) {
//currentPagey自己會判斷操作者點在哪個點上,所以index就會跟著改變值
index = sender.currentPage
//這時候就告訴要換的圖(changePicture),跟著.currentPage改變index
changePicture.image = UIImage(named: pictureArray[index])
}
//下面是為了設定剛打開APP顯示的是哪一張圖,上面var index = 0,所以這樣設定出來會是第一張圖片"changePic1"
override func viewDidLoad() {
super.viewDidLoad()
//設定一開始圖案顯示哪一張,因為上面有宣告index=0所以這邊會index會從0開始
changePicture.image = UIImage(named: pictureArray[index])
}
2. Button換圖
可以置換下一張圖片或上一張圖片。
//建立一個圖片庫
let pictureArray = ["changePic1","changePic2","changePic3"]
var index = 0
//建立要換圖的ImageView
@IBOutlet weak var changePicture: UIImageView!
//之後很多功能都要點左邊右邊,為了省事,先把往左邊換圖跟把右邊換圖都寫func
func right(){
index = (index + 1) % 3
changePicture.image = UIImage(named: pictureArray[index])
}
func left(){
index = (index - 1)
//讓index要<0的時候回到最後一張圖,也可寫成index = pictureArray - 1
if index < 0{
index = 2
}
changePicture.image = UIImage(named: pictureArray[index])
}
//建立左右箭頭按鈕
@IBOutlet weak var nextButton: UIButton!
@IBAction func nextButtonAction(_ sender: UIButton) {
right()
}
@IBOutlet weak var lastButton: UIButton!
@IBAction func lastButtonAction(_ sender: UIButton) {
left()
}
//下面是為了設定剛打開APP顯示的是哪一張圖,上面var index = 0,所以這樣設定出來會是第一張圖片"changePic1"
override func viewDidLoad() {
super.viewDidLoad()
//設定一開始圖案顯示哪一張,因為上面有宣告index=0所以這邊會index會從0開始
changePicture.image = UIImage(named: pictureArray[index])
}
3. Swipe換圖
觸控左右換圖效果。
感覺很厲害的功能,其實很多東西都寫好了,只要指定設定的感覺,比較特別的是,他左滑&右滑是吃不同的指令,要拉兩個Swipe Gesture Recognizer放在同一個Action,如圖:
再來因為要顯示滑到哪個畫面,所以他的Outlet是跟著你要滑動的ImageView,如圖:
@IBOutlet weak var changePicture: UIImageView!
@IBAction func swipeChangePage(_ sender: UISwipeGestureRecognizer) {
if sender.direction == .left {
left()
}else if sender.direction == .right{
right()
}
}
//之後很多功能都要點左邊右邊,為了省事,先把往左邊換圖跟把右邊換圖都寫func
func right(){
index = (index + 1) % 3
changePicture.image = UIImage(named: pictureArray[index])
}
func left(){
index = (index - 1)
//讓index要<0的時候回到最後一張圖,也可寫成index = pictureArray - 1
if index < 0{
index = 2
}
changePicture.image = UIImage(named: pictureArray[index])
}
//下面是為了設定剛打開APP顯示的是哪一張圖,上面var index = 0,所以這樣設定出來會是第一張圖片"changePic1"
override func viewDidLoad() {
super.viewDidLoad()
//設定一開始圖案顯示哪一張,因為上面有宣告index=0所以這邊會index會從0開始
changePicture.image = UIImage(named: pictureArray[index])
}
4. UIStepper按鈕(文字轉數字)
點選+-按鈕更改數量,這部分比較複雜,先來拉連線:
//依照圖一把連線都拉好
@IBOutlet weak var amount: UILabel!
@IBOutlet weak var buleStonePrice: UILabel!//viewDidLoad設定價格
@IBOutlet weak var buleStoneQuantity: UILabel!//紅圈
@IBOutlet weak var buleStoneStepper: UIStepper!//籃框
//再來看圖二寫程式碼
@IBAction func blueStoneStepperAction(_ sender: UIStepper) {
//stepper本身是double,所以要改成Int
let blueStepper = Int(buleStoneStepper.value)
//要把結果印在label上,但label因為是文字,所以數字要轉文字
buleStoneQuantity.text = String(blueStepper)
//在viewDidLoad已經設定好價格,但是有一個總數要算,顯示在label裡面的都是字串,所以要把他改成數字,才能列公式計算,算好再把他改成文字顯示在label裡面
let blueStoneP = Int(buleStonePrice.text!)!
amount.text = String(blueStepper*blueStoneP)
}
override func viewDidLoad() {
super.viewDidLoad()
//商品價格設定
buleStonePrice.text = "12"
}
但是這樣只能運行一個商品的價格,如果要上架很多商品,很顯然這個用法不符合需求,會在第二篇寫第二種用法。
to be continued……