close

其實之前在[iOS][Xcode][Swift]iPhone手機編程--Text Field在APP中的簡單設定(彈出收起鍵盤收縮頁面, UITextFieldDelegate, Gesture, Tap)一文中,

已經寫過Gesture的用法了,

但由於Gesture是IOS做得很出色的部分,

所以特地來再開一篇,

(明明就是怕自己將來忘了怎麼做所以才寫這麼詳細的⋯⋯

話說,某君這裡應該是EXCEL主場的,怎麼現在IPHONE的篇幅已經超過EXCEL了⋯⋯)

(還不是自己太懶,真正會了的東西都懶得寫)

 

Gesture手勢目錄

廢話不多說了,

進正題去。

只要在Objects Library中打Gesture,

就可以看到各種各樣的手勢,

結合平時使用手機的習慣,

應該還蠻好理解的,

這裡就不多說了(用文字也很難解釋啊),

image

 

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在完成:

image

    @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,

image

    @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了,

image

令物件隨滑鼠位移的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中,

image

然後直接選擇相應物件,

改變它的父類就可以了,

image

如果無法繼承的話,

可能是類別不同,

可打開下載的Class確認該Class的父類是否與物件相同,

image

成功之後會發現屬性與原本不同了,

某君這邊就多了個圓角的屬性,

image

可以直接在這裡修改,

但某君的例子是要在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)        

    }

 

arrow
arrow

    4ngus 發表在 痞客邦 留言(0) 人氣()