亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁(yè) > 編程 > Swift > 正文

在Swift程序中實(shí)現(xiàn)手勢(shì)識(shí)別的方法

2020-03-09 17:50:21
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
這篇文章主要介紹了在Swift程序中實(shí)現(xiàn)手勢(shì)識(shí)別的方法,蘋果的Swift語(yǔ)言即將進(jìn)入2.0開(kāi)源階段,人氣爆棚中:D 需要的朋友可以參考下
 

在這次IOS應(yīng)用開(kāi)發(fā)教程中,我們打算實(shí)現(xiàn)手勢(shì)識(shí)別。正如你所知道的,IOS支持大量的手勢(shì)操作,它們能提供了很好的應(yīng)用控制和出色用戶體驗(yàn)。
讓我們開(kāi)始吧!

首先需要在Xcode中創(chuàng)建一個(gè)新的Single View Application:

在Swift程序中實(shí)現(xiàn)手勢(shì)識(shí)別的方法

然后點(diǎn)擊Next,彈出的窗口要求你填寫項(xiàng)目設(shè)置。在第一欄 (“Product name”) 中填入項(xiàng)目名稱后,點(diǎn)擊Next.

確保語(yǔ)言選擇的是 “Swift”.

在Swift程序中實(shí)現(xiàn)手勢(shì)識(shí)別的方法

設(shè)計(jì)界面

點(diǎn)擊 “Main.storyboard” 文件,拖出6個(gè) UIViews放到視圖中.把視圖排列成如圖所示的樣子.當(dāng)你排列UIViews時(shí),在每個(gè)view下面添加一個(gè)UILabel并依圖設(shè)定文本值。

在Swift程序中實(shí)現(xiàn)手勢(shì)識(shí)別的方法

我們開(kāi)始寫代碼吧.

是時(shí)候編輯實(shí)現(xiàn)文件了 (在我們的案例 “ViewController.swift” ).

為了聲明一些我們將會(huì)用到的變量,要在 “class ViewController: UIViewController “塊中添加如下代碼.

 

復(fù)制代碼代碼如下:
class ViewController: UIViewController {
    @IBOutlet var tapView: UIView
    @IBOutlet var swipeView: UIView
    @IBOutlet var longPressView: UIView
    @IBOutlet var pinchView: UIView
    @IBOutlet var rotateView: UIView
    @IBOutlet var panView: UIView
    var lastRotation = CGFloat()
    let tapRec = UITapGestureRecognizer()
    let pinchRec = UIPinchGestureRecognizer()
    let swipeRec = UISwipeGestureRecognizer()
    let longPressRec = UILongPressGestureRecognizer()
    let rotateRec = UIRotationGestureRecognizer()
    let panRec = UIPanGestureRecognizer()
}

 

在第2 – 7行,我們聲明了在之前界面里排列過(guò)的 UIViews.

在第8行,我們聲明了實(shí)現(xiàn)旋轉(zhuǎn)手勢(shì)要用到的變量(lastRotation).

在第 9 – 14行,我們?yōu)槊總€(gè)view聲明了一個(gè)手勢(shì)識(shí)別對(duì)象.

注意: 在 Swift中,我們用let關(guān)鍵字聲明常量,這意味著它的值在程序運(yùn)行時(shí)不可改變。關(guān)鍵字var則聲明普通變量。


當(dāng)聲明完應(yīng)用需要的主要變量后,在viewDidLoad 方法中添加如下代碼.

 

復(fù)制代碼代碼如下:
override func viewDidLoad() {
    super.viewDidLoad()
    tapRec.addTarget(self, action: "tappedView")
    pinchRec.addTarget(self, action: "pinchedView:")
    swipeRec.addTarget(self, action: "swipedView")
    longPressRec.addTarget(self, action: "longPressedView")
    rotateRec.addTarget(self, action: "rotatedView:")
    panRec.addTarget(self, action: "draggedView:")
    tapView.addGestureRecognizer(tapRec)
    swipeView.addGestureRecognizer(swipeRec)
    pinchView.addGestureRecognizer(pinchRec)
    longPressView.addGestureRecognizer(longPressRec)
    rotateView.addGestureRecognizer(rotateRec)
    panView.addGestureRecognizer(panRec)
    rotateView.userInteractionEnabled = true
    rotateView.multipleTouchEnabled = true
    pinchView.userInteractionEnabled = true
    pinchView.multipleTouchEnabled = true
    tapView.userInteractionEnabled = true
    swipeView.userInteractionEnabled = true
    longPressView.userInteractionEnabled = true
    panView.userInteractionEnabled = true
}

 

第 3 – 8行,為每個(gè)視圖設(shè)定手勢(shì)識(shí)別的目標(biāo)。所謂的目標(biāo),就是每個(gè)view中的手勢(shì)完成后要調(diào)用的方法。

第 9 -14行,把手勢(shì)識(shí)別添加到視圖中.

第15 – 22行,把每個(gè)視圖的 userInteractionEnabled 屬性設(shè)為ture,并把擁有需要多點(diǎn)觸控(rotateView and pinchView)的手勢(shì)所在的視圖的multipleTouchEnabled 屬性設(shè)為true.

現(xiàn)在,我們編寫每個(gè)手勢(shì)識(shí)別器要調(diào)用的方法 (第3 – 8行設(shè)置的目標(biāo)方法 ).

添加如下代碼:

 

復(fù)制代碼代碼如下:
func tappedView(){
    let tapAlert = UIAlertController(title: "Tapped", message: "You just tapped the tap view", preferredStyle: UIAlertControllerStyle.Alert)
    tapAlert.addAction(UIAlertAction(title: "OK", style: .Destructive, handler: nil))
    self.presentViewController(tapAlert, animated: true, completion: nil)
}
  
func swipedView(){
    let tapAlert = UIAlertController(title: "Swiped", message: "You just swiped the swipe view", preferredStyle: UIAlertControllerStyle.Alert)
    tapAlert.addAction(UIAlertAction(title: "OK", style: .Destructive, handler: nil))
    self.presentViewController(tapAlert, animated: true, completion: nil)
}
  
func longPressedView(){
    let tapAlert = UIAlertController(title: "Long Pressed", message: "You just long pressed the long press view", preferredStyle: UIAlertControllerStyle.Alert)
    tapAlert.addAction(UIAlertAction(title: "OK", style: .Destructive, handler: nil))
    self.presentViewController(tapAlert, animated: true, completion: nil)
}

 

這三種方法都很好地完成同一件事.每次在手勢(shì)在相應(yīng)的視圖中完成后,每種方法都彈出一個(gè)對(duì)話框.


所以 tappedView() 方法在用戶滑動(dòng)視圖時(shí)彈出一個(gè)對(duì)話框,swipedView() 方法在用戶觸摸滑動(dòng) swipe視圖時(shí)彈出對(duì)話框,而longPressedView() 方法則在用戶長(zhǎng)按long press view時(shí)彈出對(duì)話框.

另兩種手勢(shì) (rotate and pinch ) 的代碼稍微有點(diǎn)復(fù)雜.

為旋轉(zhuǎn)手勢(shì)添加如下代碼:

 

復(fù)制代碼代碼如下:
func rotatedView(sender:UIRotationGestureRecognizer){
    var lastRotation = CGFloat()
    self.view.bringSubviewToFront(rotateView)
    if(sender.state == UIGestureRecognizerState.Ended){
    lastRotation = 0.0;
    }
    rotation = 0.0 - (lastRotation - sender.rotation)
    var point = rotateRec.locationInView(rotateView)
    var currentTrans = sender.view.transform
    var newTrans = CGAffineTransformRotate(currentTrans, rotation)
    sender.view.transform = newTrans
    lastRotation = sender.rotation
}

 

這個(gè)方法包含 sender:UIRotationGestureRecognizer 參數(shù). sender 參數(shù)( UIRotationGestureRecognizer 類型) 含有這個(gè)方法(在這個(gè)案例中是rotateRec)調(diào)用的手勢(shì)識(shí)別器的值.

第2行聲明了 lastRotation.

第3行我們把 rotateView放到前面.


接下來(lái),在 if語(yǔ)句中,我們檢查手勢(shì)是否完成,如果沒(méi)有完成,我們就將視圖旋轉(zhuǎn)。

第 8 – 10行,我們計(jì)算rotate view的旋轉(zhuǎn)程度,第10行,我們?cè)O(shè)置rotate view的旋轉(zhuǎn)程度。

On line 12 we set the lastRotation 作為旋轉(zhuǎn)手勢(shì)識(shí)別器的當(dāng)前旋轉(zhuǎn).

現(xiàn)在我們添加pinch 手勢(shì)的代碼:
 

復(fù)制代碼代碼如下:
func pinchedView(sender:UIPinchGestureRecognizer){
    self.view.bringSubviewToFront(pinchView)
    sender.view.transform = CGAffineTransformScale(sender.view.transform, sender.scale, sender.scale)
    sender.scale = 1.0
}

 

在之前方法的第1行中,我們把pinch視圖放到了頂端。然后設(shè)置每個(gè)pinch視圖的transform,并把pinchRec的scale設(shè)為1.

然后是實(shí)現(xiàn) pan (drag) 手勢(shì). 添加如下代碼:

 

復(fù)制代碼代碼如下:
func draggedView(sender:UIPanGestureRecognizer){
    self.view.bringSubviewToFront(sender.view)
    var translation = sender.translationInView(self.view)
    sender.view.center = CGPointMake(sender.view.center.x + translation.x, sender.view.center.y + translation.y)
    sender.setTranslation(CGPointZero, inView: self.view)
}

 

第2行,我們把 drag視圖放到頂端 (和前面的方法一樣).

然后我們聲明變量translation,并用 sender.translationInView(self.view)的值給它賦值。 完成后,把sender.view object (panRec) 的center屬性設(shè)為計(jì)算出來(lái)的新center  ( 通過(guò)CGPointMake(sender.view.center.x + translation.x, sender.view.center.y + translation.y) 計(jì)算) 并把translation 設(shè)為 sender (panRec).

現(xiàn)在,代碼部分算是完成了!

回到界面設(shè)計(jì).

現(xiàn)在我們回到 “Main.storyboard” 文件. 選擇視圖控制器并把聲明的每個(gè)UIView連接到相應(yīng)的視圖,如下圖所示.

在Swift程序中實(shí)現(xiàn)手勢(shì)識(shí)別的方法

完工

現(xiàn)在你可以在模擬器或你的設(shè)備上運(yùn)行該應(yīng)用并測(cè)試手勢(shì)。
后記

我希望這篇教程對(duì)你有所幫助。你可以在下載完整源代碼



注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到swift教程頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
美女视频a黄免费| 久久久久久久尹人综合网亚洲| 成人动漫在线观看视频| 国产在线激情视频| 久久伊人91精品综合网站| 每日更新在线观看av| 欧美成人在线免费观看| 天天噜噜噜噜噜噜| 成人av激情人伦小说| 国产伦精品一区二区三区视频青涩| 欧美一区二区视频在线| jlzzjlzz国产精品久久| 欧美日韩亚洲在线观看| 永久看片925tv| av在线免费观看国产| 国产精品免费视频网站| 天天操天天操天天操天天| 97人妻人人澡人人爽人人精品| 日本少妇高潮喷水xxxxxxx| 久久国产柳州莫菁门| 久久久久亚洲av无码专区桃色| 美女的诞生在线观看高清免费完整版中文| 国精产品一区一区三区视频| 无码av免费精品一区二区三区| 亚洲视频在线观看一区| 欧美人狂配大交3d怪物一区| 国产一区二区导航在线播放| 人体久久天天| 99国产精品99久久久久久| 日韩免费不卡视频| 欧洲日本在线| 久久综合九色综合久99| 日韩mv欧美mv国产网站| 久艹在线免费观看| 你懂的网址国产 欧美| 一级黄色免费看| 亚洲一区国产| 亚洲老头老太hd| 清纯唯美亚洲综合一区| 人妻无码一区二区三区久久99| 中文字幕第17页| 一区二区三区四区在线看| 九一在线视频| 欧美一区二区在线视频观看| 少妇被躁爽到高潮无码文| 在线视频一二三区| 亚洲欧洲二区| 欧美日韩视频精品一区二区| 一区二区三区欧美成人| 国产99久久精品一区二区300| 在线视频一二三区| 91久久偷偷做嫩草影院电| 九九热最新地址| 色综合av综合无码综合网站| 亚洲国产精品二十页| 国产日韩欧美自拍| 在线heyzo| 国产欧美日韩亚州综合| 国产激情视频在线播放| 国内精品久久久久久影视8| 啦啦啦在线视频免费观看高清中文| 无罩大乳的熟妇正在播放| 久久九九热re6这里有精品| 久久精品中文字幕免费mv| 成人台湾亚洲精品一区二区| 亚洲男人天堂影院| 国产精品夜夜爽| 国产欧美精品一区aⅴ影院| 欧美韩国日本一区| 欧美一区二区三区红桃小说| 香蕉成人在线视频| 国产成在线观看免费视频| 99久久久精品视频| 女人天堂av在线播放| 欧美成人精品在线观看| 国产精品大全| 久久久久久久999| 久久电影视频| 欧美一级精品片在线看| 欧美乱妇高清无乱码免费| 久久久九九九九| 波多野结衣爱爱视频| 精品二区三区线观看| 国产五月天婷婷| 99精品一区二区三区的区别| 国产精品免费aⅴ片在线观看| 免费大片在线观看| 国产成人a v| 91麻豆免费看| 9999精品成人免费毛片在线看| 欧美三级日韩三级国产三级| 中文字幕伦av一区二区邻居| 国产福利在线播放| www.99在线| 欧美三级电影网站| 久操网在线观看| 亚洲人的天堂男人爽爽爽| 欧美日韩国产综合新一区| 91片黄在线观看喷潮| 久久久无码精品亚洲日韩按摩| 97久久综合区小说区图片区| 波多野结衣视频一区| 一级片免费在线播放| 激情五月婷婷在线| 亚洲第一图区| 欧美大学生性色视频| 精品成人一区| 国内外成人激情免费视频| 国产视频手机在线| 国产 欧美 日韩 在线| 中文在线网在线中文| 日韩一区二区三区三四区视频在线观看| 黄色av免费看| 国产精品一区二区黑丝| 黄色片视频在线观看| 好色视频app| 91九色美女在线视频| 日韩视频在线观看一区| 国产精品自拍视频| 国产盗摄视频一区二区三区| 一区二区三区福利视频| 国产精品国产亚洲精品| 中文字幕在线观看不卡| 久久在线免费视频| 久久色视频免费观看| 粉嫩av一区二区三区天美传媒| 日韩av在线免费观看一区| 久久亚洲免费| 国产成人亚洲综合色影视| 天堂在线观看视频观看www| 国产suv精品一区二区33| 熟妇高潮一区二区| 中文字幕日韩在线视频| 欧美性xxxxx极品少妇| 成人无码一区二区三区| 国产毛片一区二区三区| 日韩午夜视频在线观看| 欧美第一黄网| 美女久久久久久| 亚洲欧美在线免费| 乱中年女人伦av一区二区| 日韩黄色免费网站| 你懂的亚洲视频| 亚洲国内精品在线| 在线观看亚洲一区二区| 欧美在线视频不卡| 96久久久久久| 99视频免费观看蜜桃视频| 激情久久av| 综合136福利视频在线| 97成人超碰视| a在线观看免费| 欧美日韩亚洲在线观看| 91porny在线| 韩日精品在线| 国产在线激情| 亚洲色图欧美自拍| 国产激情久久久久久熟女老人av| 妺妺窝人体色777777| 精品白丝av| 国产精品动漫网站| 国产乱人伦精品一区二区在线观看| 国产黄a三级三级三级| 超碰在线观看91| 精品人妻伦一二三区久久| 欧美一级片网址| 免费在线观看成年人视频| 亚洲综合123| 国产精品99久久久久久久vr| 国产成人综合欧美精品久久| 久久久精品影院| 亚洲欧美成人影院| 久久高清免费视频| 国产成人精品a视频| 亚洲91精品| 久久丝袜视频| 粉嫩aⅴ一区二区三区四区| 美女在线免费视频| 久久久久人妻一区精品色| 久久女同互慰一区二区三区| 久久久久久久久久久久久av| 亚洲香蕉视频| 天天操夜夜逼| 日本激情一区二区三区| 99精品人妻少妇一区二区| 亚洲国产天堂久久国产91| 日韩一二三区不卡| 色噜噜噜噜噜噜| 99人久久精品视频最新地址| 国产视频一区二区三| 久久国产精品毛片| 成人在线免费网站| 人人爽香蕉精品| h片在线播放| 亚洲精品自拍视频在线观看| 国产在线不卡一区二区三区| av电影在线观看一区二区三区| 国产一区一区三区| 一区二区三区在线免费播放| 国产精品情趣视频| 亚洲片区在线| 天海翼一区二区| 91精品国产91久久久久福利| 欧美日韩在线播放三区四区| 成人毛片一区二区三区| 好紧好硬好湿我太爽了| 亚洲午夜精品一区| 欧洲亚洲一区二区三区| 国产精品嫩草99a| 日韩少妇一区二区| 欧美色网站导航| 亚洲第一页av| 久久综合伊人77777麻豆最新章节| 国产精品黄网站| 亚洲av少妇一区二区在线观看| 国产精品草草| 色婷婷av一区二区三区久久| 中文字幕一区二区三区精品| 亚洲天堂久久久久| 婷婷综合在线| 国产成人亚洲精品乱码在线观看| 黄色av免费观看| 91啪亚洲精品| 奇米色一区二区三区四区| 国产一区调教| 大胆国模一区二区三区| a级在线观看| 宅男视频免费在线观看视频| 亚洲午夜影视影院在线观看| 秋霞在线一区| 欧美有码在线| 国产精品人人人人| 国产日本欧美在线观看| 另类图片亚洲另类| 精品国产污网站| 狠狠狠狠狠狠操| 日韩a视频在线观看| 欧美亚洲人成在线| 欧美日韩大片一区二区三区| 成人黄色片在线| 国产伦精品一区二区三区免费| 欧美日韩亚洲一区二区三区在线| 中文字幕欧美人妻精品一区| 操人视频91| 青青成人在线| 青青草久久网络| 狠狠狠综合7777久夜色撩人| 精品久久国产精品| 亚洲国产精品视频在线观看| 91精品国产美女浴室洗澡无遮挡| 欧美日韩伦理在线免费| 一区二区三区四区久久| 看片网址国产福利av中文字幕| 麻豆一区在线| 91成人在线| 久久人人九九| av网站中文字幕| 九九精品在线观看视频| 成人性生交大片免费观看嘿嘿视频| 99久久亚洲精品日本无码| 久久精品人人做人人爽电影蜜月| 国产一二三区av| 亚洲精华一区二区三区| 成人h动漫免费观看网站| 日本小视频在线免费观看| 丝袜美腿av在线| 成年女人毛片| 国产成人a亚洲精品| 国产精品入口麻豆完整版| 无码人妻丰满熟妇区毛片18| 成人啪啪免费看| 超碰精品在线观看| 久久99精品一区二区三区三区| 91免费网站视频| 国产精品久久久亚洲| 一级特黄aaa大片在线观看| 久久精品夜夜夜夜久久| heyzo国产| 欧美激情一区二区三区在线视频观看| 一区二区三区视频网站| 先锋影音欧美四级| 美女av一区二区| 国产三级电影在线| 精品久久91| 亚洲免费精彩视频| 草草草在线视频| 久久91在线| 熟女少妇在线视频播放| 在线欧美视频| 欧美黑人一区二区| aaaaaa毛片| 欧美性猛交xxxx乱大交hd| 秋霞网一区二区| 伊人久久大香线蕉综合网蜜芽| 欧美日韩在线播| 中文字幕在线观看| 一本色道a无线码一区v| 在线免费观看毛片| 国产精品色哟哟| 欧美性xxxx在线播放| 精品国产伦一区二区三区观看体验| 先锋影音av资源网| 亚欧在线观看视频| xxxxxxxxx欧美| 五月婷婷一区二区三区| 国产精品福利电影一区二区三区四区| 亚洲免费av片| 国产99视频在线观看| 最新黄网在线观看| 亚洲av成人无码网天堂| 国产美女自拍视频| 欧美久久久久久久久久久久久久| 国产精品自拍网站| 亚洲在线资源| 国产精品福利小视频| 亚洲自拍偷拍第一页| 神马久久资源| 欧美视频在线免费看| swag国产精品一区二区| 免费人成a大片在线观看动漫| 韩国一区二区视频| 欧美福利一区| jizz国产视频| 亚洲免费在线视频观看| 亚洲精品视频久久久| 久久久久久久久影视| 美女又黄又免费的视频| 欧美a级在线观看|