其實之前在[iOS][Xcode][Swift]iPhone手機編程--Text Field在APP中的簡單設定(彈出收起鍵盤收縮頁面, UITextFieldDelegate, Gesture, Tap)一文中,
已經寫過Gesture的用法了,
但由於Gesture是IOS做得很出色的部分,
所以特地來再開一篇,
(明明就是怕自己將來忘了怎麼做所以才寫這麼詳細的⋯⋯
話說,某君這裡應該是EXCEL主場的,怎麼現在IPHONE的篇幅已經超過EXCEL了⋯⋯)
(還不是自己太懶,真正會了的東西都懶得寫)
Gesture手勢目錄
廢話不多說了,
進正題去。
只要在Objects Library中打Gesture,
就可以看到各種各樣的手勢,
結合平時使用手機的習慣,
應該還蠻好理解的,
這裡就不多說了(用文字也很難解釋啊),
Gesture手勢用法
用法也很簡單,
跟一般的Object一樣,
需要與Controller配合,
Gesture手勢--單擊(Tap)轉換顏色
假設某君希望在點選黃色View時會成藍色,
就只需直接將手勢Tap(Click)直接拖曳到View上就可以了,
之後就是代碼的事了,
@IBAction func respontoTap(_ sender: UITapGestureRecognizer) {
object.backgroundColor=UIColor.blue
}
只要變成藍色它就不會動了,
可藍色真的太討厭了,
如果想變回黃色可以怎樣呢?
有編程經驗的,
應該馬上會想到借用一個flag變數來記錄變化,
@IBAction func respontoTap(_ sender: UITapGestureRecognizer) {
if flag==0{
object.backgroundColor=UIColor.blue
flag=1
}else if flag==1{
object.backgroundColor=UIColor.yellow
flag=0
}
}
這樣就可以無限變換啦~
好啦~由於是GIF的關係,
上面那個其實也是無限變換的啦
在Swift中大家大可無需立Flag,
因為可以借用View自己的Tag在完成:
@IBAction func responToTap(_ sender: UITapGestureRecognizer) {
//來回變色
if object.tag==0{
object.backgroundColor=UIColor.systemPurple
object.tag=1
}else if object.tag==1{
object.backgroundColor=UIColor.systemPink
object.tag=0
}
}
既然能做到這裡,
那變換六、七種顏色,
甚至是隨機變換肯定都不在話下啦。
那某君順便貼段Code出來讓大家對答案啦。
Gesture手勢--雙擊(Tap)隨機變色
假設某君希望在雙擊View時會隨機變色,
就需要在設定中設定Taps次數為2,
@IBAction func responToDoubleTap(_ sender: UITapGestureRecognizer) {
//隨機變色
let c=Int.random(in: 0...4)
switch c {
case 0:
object.backgroundColor=UIColor.systemPurple;
case 1:
object.backgroundColor=UIColor.systemPink;
case 2:
object.backgroundColor=UIColor.systemRed;
case 3:
object.backgroundColor=UIColor.systemBlue;
case 4:
object.backgroundColor=UIColor.systemGray;
default:
object.backgroundColor=UIColor.systemTeal;
}
}
這樣單擊就還是黃藍變換,
雙擊就是隨機六種顏色的變換了。
Gesture手勢--拖動物件(Pan)並變形
智能手機不乏拖動物件的情況,
假設某君希望可以直接拖動屏幕上的物件並同時令其變形,
- 拖動物件(令物件位移)
如下圖:
那就需要用到Pan了,
令物件隨滑鼠位移的Code如下:
@IBAction func responToPan(_ sender: UIPanGestureRecognizer) {
let transfer=sender.translation(in: object)
object.center=CGPoint(x: object.center.x+transfer.x,y:object.center.y+transfer.y)
sender.setTranslation(CGPoint.zero, in: object)
print(transfer)
} //object的中心點=object本來的中心點加上位移的距離
- 令物件變形-圓角(繼承)
而要將View變成圓形的話,
需要改變圓角,
某君直接將View繼承了老師的DesignableView,
裡面有可以直接改變圓角的方法,
需要的可以留言,
或是直接上網找,
這邊某君想寫的是如何繼承的方法。
首先將要繼承的Class拖曳進自己的Project中,
然後直接選擇相應物件,
改變它的父類就可以了,
如果無法繼承的話,
可能是類別不同,
可打開下載的Class確認該Class的父類是否與物件相同,
成功之後會發現屬性與原本不同了,
某君這邊就多了個圓角的屬性,
可以直接在這裡修改,
但某君的例子是要在Pan時才改變,
所以需要在Controller中打Code,
加上位移的部分,
整段Code是醬紫的:
@IBAction func responToPan(_ sender: UIPanGestureRecognizer) {
if (sender.state == .began) {
object.cornerRadius=55
}else if (sender.state == .ended){
object.cornerRadius=0
} //開始Pan時,圓角變成55;停止Pan時,圓角變回0。
let transfer=sender.translation(in: object)
object.center=CGPoint(x: object.center.x+transfer.x,y:object.center.y+transfer.y)
sender.setTranslation(CGPoint.zero, in: object)
print(transfer)
}
留言列表