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

首頁 > 編程 > Swift > 正文

在Swift程序中實現手勢識別的方法

2020-03-09 17:50:21
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了在Swift程序中實現手勢識別的方法,蘋果的Swift語言即將進入2.0開源階段,人氣爆棚中:D 需要的朋友可以參考下
 

在這次IOS應用開發教程中,我們打算實現手勢識別。正如你所知道的,IOS支持大量的手勢操作,它們能提供了很好的應用控制和出色用戶體驗。
讓我們開始吧!

首先需要在Xcode中創建一個新的Single View Application:

在Swift程序中實現手勢識別的方法

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

確保語言選擇的是 “Swift”.

在Swift程序中實現手勢識別的方法

設計界面

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

在Swift程序中實現手勢識別的方法

我們開始寫代碼吧.

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

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

 

復制代碼代碼如下:
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行,我們聲明了在之前界面里排列過的 UIViews.

在第8行,我們聲明了實現旋轉手勢要用到的變量(lastRotation).

在第 9 – 14行,我們為每個view聲明了一個手勢識別對象.

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


當聲明完應用需要的主要變量后,在viewDidLoad 方法中添加如下代碼.

 

復制代碼代碼如下:
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行,為每個視圖設定手勢識別的目標。所謂的目標,就是每個view中的手勢完成后要調用的方法。

第 9 -14行,把手勢識別添加到視圖中.

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

現在,我們編寫每個手勢識別器要調用的方法 (第3 – 8行設置的目標方法 ).

添加如下代碼:

 

復制代碼代碼如下:
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)
}

 

這三種方法都很好地完成同一件事.每次在手勢在相應的視圖中完成后,每種方法都彈出一個對話框.


所以 tappedView() 方法在用戶滑動視圖時彈出一個對話框,swipedView() 方法在用戶觸摸滑動 swipe視圖時彈出對話框,而longPressedView() 方法則在用戶長按long press view時彈出對話框.

另兩種手勢 (rotate and pinch ) 的代碼稍微有點復雜.

為旋轉手勢添加如下代碼:

 

復制代碼代碼如下:
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
}

 

這個方法包含 sender:UIRotationGestureRecognizer 參數. sender 參數( UIRotationGestureRecognizer 類型) 含有這個方法(在這個案例中是rotateRec)調用的手勢識別器的值.

第2行聲明了 lastRotation.

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


接下來,在 if語句中,我們檢查手勢是否完成,如果沒有完成,我們就將視圖旋轉。

第 8 – 10行,我們計算rotate view的旋轉程度,第10行,我們設置rotate view的旋轉程度。

On line 12 we set the lastRotation 作為旋轉手勢識別器的當前旋轉.

現在我們添加pinch 手勢的代碼:
 

復制代碼代碼如下:
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視圖放到了頂端。然后設置每個pinch視圖的transform,并把pinchRec的scale設為1.

然后是實現 pan (drag) 手勢. 添加如下代碼:

 

復制代碼代碼如下:
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屬性設為計算出來的新center  ( 通過CGPointMake(sender.view.center.x + translation.x, sender.view.center.y + translation.y) 計算) 并把translation 設為 sender (panRec).

現在,代碼部分算是完成了!

回到界面設計.

現在我們回到 “Main.storyboard” 文件. 選擇視圖控制器并把聲明的每個UIView連接到相應的視圖,如下圖所示.

在Swift程序中實現手勢識別的方法

完工

現在你可以在模擬器或你的設備上運行該應用并測試手勢。
后記

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



注:相關教程知識閱讀請移步到swift教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
性欧美长视频免费观看不卡| 九九热精品视频| 国产精品v日韩精品| 国产精品爱久久久久久久| 久久福利网址导航| 午夜精品三级视频福利| 欧美激情极品视频| 视频一区视频二区国产精品| 狠狠久久亚洲欧美专区| 欧美日韩福利视频| 国产精品揄拍一区二区| 精品夜色国产国偷在线| 69视频在线免费观看| 中文字幕精品一区久久久久| 国产精品久久久久久中文字| 国产精品亚洲片夜色在线| 成人免费激情视频| 欧美成年人在线观看| 欧美一级视频免费在线观看| 日韩av在线免费观看| 92版电视剧仙鹤神针在线观看| 日韩精品免费综合视频在线播放| 国产+人+亚洲| 欧美在线视频免费播放| 亚洲va久久久噜噜噜久久天堂| 日韩欧美视频一区二区三区| 国产精品视频专区| 一区二区国产精品视频| 欧美老少做受xxxx高潮| 国产成人精品免高潮费视频| 国产成人综合久久| 日韩av免费在线看| 久久成人综合视频| 福利视频一区二区| 精品国偷自产在线视频| 国产婷婷97碰碰久久人人蜜臀| 亚洲免费一级电影| 亲爱的老师9免费观看全集电视剧| 国产精品欧美风情| 欧美极品美女视频网站在线观看免费| 黑人巨大精品欧美一区二区一视频| 亚洲精品国产精品自产a区红杏吧| 亚洲自拍偷拍区| 欧美日韩视频在线| 成人免费高清完整版在线观看| 91国产美女视频| 欧美电影在线观看完整版| 中文字幕在线观看日韩| 欧美一区亚洲一区| 国产欧美日韩精品在线观看| 国产精品久久久久久久av大片| 国产在线观看不卡| www欧美xxxx| 91精品国产高清久久久久久91| 欧美丝袜一区二区三区| 91久久在线视频| 国产日韩在线免费| 国产成人精品国内自产拍免费看| 亚洲欧美日韩精品久久奇米色影视| 欧美色图在线视频| 亚洲直播在线一区| 亚洲色图日韩av| 亚洲 日韩 国产第一| 日韩精品在线观| 91免费的视频在线播放| 国产成人精品午夜| 在线日韩中文字幕| 国产精品视频网站| 国产噜噜噜噜久久久久久久久| 国产精品视频99| 欧美壮男野外gaytube| 日韩在线精品一区| 国产精品一区二区三| 国产亚洲a∨片在线观看| 亚洲大胆人体在线| 国产精品美腿一区在线看| 欧美电影免费观看高清完整| 国产精品自产拍在线观| 国产日韩在线精品av| 在线国产精品播放| 久久免费视频网站| 午夜欧美不卡精品aaaaa| 国产精品99蜜臀久久不卡二区| 亚洲性69xxxbbb| 国产精品久久久久久影视| 91精品国产91久久久久久久久| 日韩性xxxx爱| 亚洲激情小视频| 亚洲欧美日韩在线一区| 国产精品都在这里| 亚洲成av人影院在线观看| 成人免费大片黄在线播放| 91日韩在线播放| 亚洲成人xxx| 亚洲精品福利资源站| 国产精品无码专区在线观看| 久久久久久国产| 欧美资源在线观看| 综合国产在线观看| 国产精品高清在线观看| 欧美另类69精品久久久久9999| 91欧美视频网站| 亚洲另类xxxx| 国产97在线|亚洲| 欧美日本啪啪无遮挡网站| 欧美野外猛男的大粗鳮| 国产亚洲精品美女久久久久| 亚洲国语精品自产拍在线观看| 美女视频黄免费的亚洲男人天堂| 亚洲欧美日韩一区二区三区在线| 国产精品久久在线观看| 中文字幕av一区| 亚洲综合大片69999| 欧美国产日产韩国视频| 精品偷拍一区二区三区在线看| 国模视频一区二区| 91夜夜揉人人捏人人添红杏| 欧美激情一区二区三区成人| 国产欧美日韩中文字幕| 亚洲精品国产精品乱码不99按摩| 91精品国产乱码久久久久久久久| 中国人与牲禽动交精品| 国产精品日韩在线播放| 欧美色视频日本版| 久久免费国产视频| 久久久久久美女| 日韩av影院在线观看| 亚洲精品国偷自产在线99热| 日韩美女主播视频| 精品自在线视频| 91免费电影网站| 久久国产色av| 正在播放欧美视频| 久久久女女女女999久久| 国产欧美久久一区二区| 日韩暖暖在线视频| 91免费人成网站在线观看18| 一区二区三区美女xx视频| 91大神福利视频在线| 日韩欧美亚洲范冰冰与中字| 国产精品免费视频久久久| 国内精品视频一区| 国产精品流白浆视频| 国产精品久久久久久久久免费| 久久全球大尺度高清视频| 日韩电影免费观看中文字幕| 色综合伊人色综合网站| 久久综合伊人77777蜜臀| 久久综合久久美利坚合众国| 亚洲午夜女主播在线直播| 欧美成人精品在线视频| 国产激情999| 亚洲欧美中文字幕在线一区| 最近2019年手机中文字幕| 久久99亚洲精品| 亚洲美女喷白浆| 亚洲第一偷拍网| 久久免费视频网| 亚洲国产古装精品网站| 色综合久综合久久综合久鬼88| 中文字幕欧美日韩精品| 成人黄色网免费| 国产精品久久久久久久久久99| 欧洲亚洲女同hd|