亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

 更新時(shí)間:2015年07月16日 09:24:00   投稿:goldensun  
這篇文章主要介紹了在Swift程序中實(shí)現(xiàn)手勢識(shí)別的方法,蘋果的Swift語言即將進(jìn)入2.0開源階段,人氣爆棚中:D 需要的朋友可以參考下

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

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

201571691750591.png (731×431)

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

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

201571691820643.png (733×432)

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

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

201571691840146.png (1024×698)

我們開始寫代碼吧.

是時(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行,我們聲明了在之前界面里排列過的 UIViews.

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

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

注意: 在 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í)別的目標(biāo)。所謂的目標(biāo),就是每個(gè)view中的手勢完成后要調(diào)用的方法。

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

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

現(xiàn)在,我們編寫每個(gè)手勢識(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)
}

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


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

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

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

 

復(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í)別器的值.

第2行聲明了 lastRotation.

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


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

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

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

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

復(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) 手勢. 添加如下代碼:

 

復(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ì)算出來的新center  ( 通過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)的視圖,如下圖所示.

201571692025493.png (1024×697)

完工

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

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

相關(guān)文章

  • Swift利用AFN實(shí)現(xiàn)封裝網(wǎng)絡(luò)請求詳解

    Swift利用AFN實(shí)現(xiàn)封裝網(wǎng)絡(luò)請求詳解

    網(wǎng)絡(luò)請求工具是我們經(jīng)常用到的工具類,所以下面這篇文章主要給大家介紹了關(guān)于Swift利用AFN如何實(shí)現(xiàn)封裝網(wǎng)絡(luò)請求的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-10-10
  • Swift心得筆記之運(yùn)算符

    Swift心得筆記之運(yùn)算符

    區(qū)別于 C 語言,在 Swift 中你可以對浮點(diǎn)數(shù)進(jìn)行取余運(yùn)算(%),Swift 還提供了 C 語言沒有的表達(dá)兩數(shù)之間的值的區(qū)間運(yùn)算符,(a..b和a...b),這方便我們表達(dá)一個(gè)區(qū)間內(nèi)的數(shù)值。
    2015-04-04
  • swift使用SDPhotoBriwser瀏覽圖片教程

    swift使用SDPhotoBriwser瀏覽圖片教程

    這篇文章主要為大家介紹了swift如何使用SDPhotoBriwser瀏覽圖片的教程示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2021-10-10
  • Swift踩坑實(shí)戰(zhàn)之一個(gè)字符引發(fā)的Crash

    Swift踩坑實(shí)戰(zhàn)之一個(gè)字符引發(fā)的Crash

    swift通常都是通過對應(yīng)的signal來捕獲crash,下面這篇文章主要給大家介紹了關(guān)于Swift踩坑實(shí)戰(zhàn)之一個(gè)字符引發(fā)的Crash的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-02-02
  • Swift運(yùn)算符使用方法淺析

    Swift運(yùn)算符使用方法淺析

    Swift 語言支持大部分標(biāo)準(zhǔn) C 語言的運(yùn)算符,并且改進(jìn)了許多特性來使我們的代碼更加規(guī)范,其中主要包含算數(shù)運(yùn)算符、區(qū)間運(yùn)算符、邏輯運(yùn)算符、關(guān)系運(yùn)算符、賦值運(yùn)算符、自增自減運(yùn)算符、溢出運(yùn)算符等
    2022-09-09
  • 深入理解Swift中的訪問控制關(guān)鍵字

    深入理解Swift中的訪問控制關(guān)鍵字

    這篇文章主要給大家介紹了Swift中訪問控制關(guān)鍵字的相關(guān)資料,文中介紹的非常詳細(xì),對大家具有一定的參考價(jià)值,需要的朋友們下面來一起看看吧。
    2017-03-03
  • swift依賴注入和依賴注入容器詳解

    swift依賴注入和依賴注入容器詳解

    這篇文章主要為大家介紹了swift依賴注入和依賴注入容器詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01
  • Swift5中從原始文本創(chuàng)建字符串的方法

    Swift5中從原始文本創(chuàng)建字符串的方法

    這篇文章主要給大家介紹了關(guān)于Swift5中從原始文本創(chuàng)建字符串的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Swift5具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • Swift初始化器與可選鏈的使用方法介紹

    Swift初始化器與可選鏈的使用方法介紹

    初始化器初始化是準(zhǔn)備類、結(jié)構(gòu)或枚舉的實(shí)例以供使用的過程。此過程涉及為該實(shí)例上的每個(gè)存儲(chǔ)屬性設(shè)置初始值,并執(zhí)行在新實(shí)例準(zhǔn)備就緒可供使用之前所需的任何其他設(shè)置或初始化,可選鏈?zhǔn)且环N可以請求和調(diào)用屬性、方法和子腳本的過程,用于請求或調(diào)用的目標(biāo)可能為nil
    2022-08-08
  • Swift使用transform 實(shí)現(xiàn)重復(fù)平移動(dòng)畫效果

    Swift使用transform 實(shí)現(xiàn)重復(fù)平移動(dòng)畫效果

    這篇文章主要介紹了Swift使用transform 實(shí)現(xiàn)重復(fù)平移動(dòng)畫效果,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-07-07

最新評論