Swift之手勢(shì)操作

手勢(shì)識(shí)別在 iOS 中非常重要约素,他極大地提高了移動(dòng)設(shè)備的使用便捷性届良。iOS 系統(tǒng)在 3.2 以后笆凌,提供了一些常用的手勢(shì)(UIGestureRecognizer 的子類),今天給大家分享一下在swift中這些手勢(shì)的用法士葫。 (≧▽≦)/
使用手勢(shì)很簡(jiǎn)單乞而,分為三步:
  • 創(chuàng)建手勢(shì)識(shí)別器對(duì)象實(shí)例整以。創(chuàng)建時(shí),指定一個(gè)回調(diào)方法绘闷,當(dāng)手勢(shì)開(kāi)始寇漫,改變、或結(jié)束時(shí)齿穗,執(zhí)行回調(diào)方法。
  • 設(shè)置手勢(shì)識(shí)別器對(duì)象實(shí)例的相關(guān)屬性(可選部分)
  • 添加到需要識(shí)別的 View 中。每個(gè)手勢(shì)只對(duì)應(yīng)一個(gè) View鞋喇,當(dāng)屏幕觸摸在 View 的邊界內(nèi)時(shí),如果手勢(shì)和預(yù)定的一樣眉撵,那就會(huì)執(zhí)行回調(diào)方法侦香。

一、UISwipeGestureRecognizer-滑動(dòng)手勢(shì)

  let swip = UISwipeGestureRecognizer(target: self, action: #selector(ViewController.swipeGesture(_:)))
  //設(shè)置滑動(dòng)方向
  //如果UISwipeGestureRecognizer在不指定方向的時(shí)候纽疟,默認(rèn)向右滑動(dòng)才會(huì)觸發(fā)事件罐韩。如果要指定方向,需要設(shè)置direction屬性
  swip.direction = UISwipeGestureRecognizerDirection.Left
  self.view.addGestureRecognizer(swip)

那么有朋友可能會(huì)問(wèn)污朽,如果想要在各個(gè)方向都能滑動(dòng)要怎辦呢散吵,其實(shí)只要多定義幾個(gè)UISwipeGestureRecognizer就可以了

  let swipeUp = UISwipeGestureRecognizer(target:self, action:#selector(swipeGesture(_:)))
  swipeUp.direction = UISwipeGestureRecognizerDirection.Up
  self.view.addGestureRecognizer(swipeUp)
    
  let swipeDown = UISwipeGestureRecognizer(target:self, action:#selector(swipeGesture(_:)))
  swipeDown.direction = UISwipeGestureRecognizerDirection.Down
  self.view.addGestureRecognizer(swipeDown)

滑動(dòng)響應(yīng)事件:

//滑動(dòng)手勢(shì)
func swipeGesture(swip:UISwipeGestureRecognizer) {
    print("開(kāi)始滑動(dòng)")
    if swip.direction == UISwipeGestureRecognizerDirection.Up {
        print("向上滑動(dòng)")
    }else if swip.direction == UISwipeGestureRecognizerDirection.Down {
        print("向下滑動(dòng)")
    }
}

Tip: 有時(shí)候我們會(huì)發(fā)現(xiàn)滑動(dòng)手勢(shì)不響應(yīng),那可能是因?yàn)槟慊瑒?dòng)的太短了哦

二蟆肆、UITapGestureRecognizer-點(diǎn)擊手勢(shì)

在這六種手勢(shì)識(shí)別中矾睦,只有一種手勢(shì)是離散型手勢(shì),就是 UITapGestureRecognizer炎功。離散型手勢(shì)的特點(diǎn)就是:一旦識(shí)別就無(wú)法取消枚冗,而且只會(huì)調(diào)用一次手勢(shì)操作事件(初始化手勢(shì)時(shí)指定的回調(diào)方法)。

?換句話說(shuō)其他五種手勢(shì)是連續(xù)型手勢(shì)蛇损,而連續(xù)型手勢(shì)的特點(diǎn)就是:會(huì)多次調(diào)用手勢(shì)操作事件赁温,而且在連續(xù)手勢(shì)識(shí)別后可以取消手勢(shì)。

  let tapOne = UITapGestureRecognizer(target: self, action: #selector(ViewController.tapOne))
  //通過(guò)numberOfTouchesRequired屬性設(shè)置觸摸點(diǎn)數(shù)淤齐,比如設(shè)置2表示必須兩個(gè)手指觸摸時(shí)才會(huì)觸發(fā)
  tapOne.numberOfTapsRequired = 1
  //通過(guò)numberOfTapsRequired屬性設(shè)置點(diǎn)擊次數(shù)股囊,單擊設(shè)置為1,雙擊設(shè)置為2
  tapOne.numberOfTouchesRequired = 1
  //雙擊
  let tapTwo = UITapGestureRecognizer(target: self, action: #selector(ViewController.tapTwo))
  tapTwo.numberOfTapsRequired = 2
  tapTwo.numberOfTouchesRequired = 1
  //聲明點(diǎn)擊事件需要雙擊事件檢測(cè)失敗后才會(huì)執(zhí)行
  tapOne.requireGestureRecognizerToFail(tapTwo)

點(diǎn)擊響應(yīng)事件:

//單擊
func tapOne() {
    print("單擊")
}
//雙擊
func tapTwo() {
    print("雙擊")
}

三床玻、UIPinchGestureRecognizer-捏合手勢(shì)

捏合即進(jìn)行當(dāng)前圖片視圖縮放

  let pinch = UIPinchGestureRecognizer(target: self, action: #selector(ViewController.pinchDid(_:)))

//捏合手勢(shì)
func pinchDid(pinch:UIPinchGestureRecognizer) {
    print(pinch.scale)//打印捏合比例
    print(pinch.velocity)//打印捏合速度
}

四毁涉、UIRotationGestureRecognizer-旋轉(zhuǎn)手勢(shì)

旋轉(zhuǎn)即進(jìn)行當(dāng)前圖片視圖角度旋轉(zhuǎn)

  let rotation = UIRotationGestureRecognizer(target: self, action: #selector(ViewController.rotationDid(_:)))

//旋轉(zhuǎn)手勢(shì)
func rotationDid(rotation:UIRotationGestureRecognizer) {
    print(rotation.rotation*(180/(CGFloat(M_PI))))//打印旋轉(zhuǎn)的角度
}

五、UIPanGestureRecognizer-拖動(dòng)手勢(shì)

拖動(dòng)即進(jìn)行當(dāng)前圖片視圖位置移動(dòng)

    var rect: UIView?
    override func viewDidLoad() {
      super.viewDidLoad()
      rect = UIView(frame: CGRectMake(0, 0, 100, 100))
    rect?.center = self.view.center
    rect?.backgroundColor = UIColor.cyanColor()
    self.view.addSubview(rect!)
    //拖動(dòng)手勢(shì)
    let pan = UIPanGestureRecognizer(target: self, action: #selector(ViewController.panDid(_:)))
    pan.maximumNumberOfTouches = 1  //一個(gè)手指拖動(dòng)
} 
    //拖動(dòng)手勢(shì)
   func panDid(pan:UIPanGestureRecognizer) {
     let point = pan.locationInView(self.view)
     //設(shè)置矩形的位置
     rect?.center = point
}

六锈死、UILongPressGestureRecognizer-長(zhǎng)按手勢(shì)

  let longPress = UILongPressGestureRecognizer(target: self, action: #selector(ViewController.longPress(_:)))
  longPress.numberOfTapsRequired = 0 //默認(rèn)為0
  longPress.numberOfTouchesRequired = 1  //默認(rèn)為1

 //長(zhǎng)按手勢(shì)
func longPress(longPress:UILongPressGestureRecognizer) {
    if longPress.state == .Began {
        print("長(zhǎng)按響應(yīng)開(kāi)始")
    } else {
        print("長(zhǎng)按響應(yīng)結(jié)束")
    }   
}
當(dāng)我們使用手勢(shì)的時(shí)候贫堰,我們可能會(huì)監(jiān)聽(tīng)屏幕的狀態(tài)穆壕,這個(gè)時(shí)候我們還會(huì)用到UITouch對(duì)象,重寫他的相關(guān)方法:
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
    print("開(kāi)始觸摸")
}
override func touchesMoved(touches: Set<UITouch>, withEvent event: UIEvent?) {
    print("觸摸移動(dòng)")
}
override func touchesCancelled(touches: Set<UITouch>?, withEvent event: UIEvent?) {
    print("取消觸摸")
}
override func touchesEnded(touches: Set<UITouch>, withEvent event: UIEvent?) {
    print("觸摸結(jié)束")
}

好啦其屏,手勢(shì)在swift中的使用就分享到這里啦喇勋。( _ )/~~拜拜

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市偎行,隨后出現(xiàn)的幾起案子川背,更是在濱河造成了極大的恐慌,老刑警劉巖蛤袒,帶你破解...
    沈念sama閱讀 216,997評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件熄云,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡妙真,警方通過(guò)查閱死者的電腦和手機(jī)缴允,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,603評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)珍德,“玉大人练般,你說(shuō)我怎么就攤上這事⌒夂颍” “怎么了薄料?”我有些...
    開(kāi)封第一講書人閱讀 163,359評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)泵琳。 經(jīng)常有香客問(wèn)我摄职,道長(zhǎng),這世上最難降的妖魔是什么虑稼? 我笑而不...
    開(kāi)封第一講書人閱讀 58,309評(píng)論 1 292
  • 正文 為了忘掉前任琳钉,我火速辦了婚禮,結(jié)果婚禮上蛛倦,老公的妹妹穿的比我還像新娘歌懒。我一直安慰自己,他們只是感情好溯壶,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,346評(píng)論 6 390
  • 文/花漫 我一把揭開(kāi)白布及皂。 她就那樣靜靜地躺著,像睡著了一般且改。 火紅的嫁衣襯著肌膚如雪验烧。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 51,258評(píng)論 1 300
  • 那天又跛,我揣著相機(jī)與錄音碍拆,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛感混,可吹牛的內(nèi)容都是我干的端幼。 我是一名探鬼主播,決...
    沈念sama閱讀 40,122評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼弧满,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼婆跑!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起庭呜,我...
    開(kāi)封第一講書人閱讀 38,970評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤滑进,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后募谎,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體扶关,經(jīng)...
    沈念sama閱讀 45,403評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,596評(píng)論 3 334
  • 正文 我和宋清朗相戀三年近哟,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了驮审。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,769評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡吉执,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出地来,到底是詐尸還是另有隱情戳玫,我是刑警寧澤,帶...
    沈念sama閱讀 35,464評(píng)論 5 344
  • 正文 年R本政府宣布未斑,位于F島的核電站咕宿,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏蜡秽。R本人自食惡果不足惜府阀,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,075評(píng)論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望芽突。 院中可真熱鬧试浙,春花似錦、人聲如沸寞蚌。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,705評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)挟秤。三九已至壹哺,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間艘刚,已是汗流浹背管宵。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,848評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人箩朴。 一個(gè)月前我還...
    沈念sama閱讀 47,831評(píng)論 2 370
  • 正文 我出身青樓岗喉,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親隧饼。 傳聞我的和親對(duì)象是個(gè)殘疾皇子沈堡,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,678評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容