国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Swift - 在Swift程序中實現手勢識別的方法

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

2020-12-21 14:39Swift教程網 Swift

這篇文章主要介紹了在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程序中實現手勢識別的方法

完工

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

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

延伸 · 閱讀

精彩推薦
  • SwiftSwift使用CollectionView實現廣告欄滑動效果

    Swift使用CollectionView實現廣告欄滑動效果

    這篇文章主要為大家詳細介紹了Swift使用CollectionView實現廣告欄滑動效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    Stevin的技術博客12372021-01-13
  • SwiftSwift中轉義閉包示例詳解

    Swift中轉義閉包示例詳解

    在Swift 中的閉包類似于結構塊,并可以在任何地方調用,下面這篇文章主要給大家介紹了關于Swift中轉義閉包的相關資料,需要的朋友可以參考下...

    小小小_小朋友11412021-12-26
  • SwiftSwift的74個常用內置函數介紹

    Swift的74個常用內置函數介紹

    這篇文章主要介紹了Swift的74個常用內置函數介紹,這篇文章列舉出了所有的Swift庫函數,內置函數是指無需引入任何模塊即可以直接使用的函數,需要的朋友可...

    Swift教程網5802020-12-19
  • SwiftSwift能代替Objective-C嗎?

    Swift能代替Objective-C嗎?

    這是我在網上上看到的答案,復制粘貼過來和大家分享一下,因為我和很多人一樣很關心Swift的出現對Mac開發的影響和對Objective-C的影響。...

    Swift教程網4412020-12-16
  • Swiftmac git xcrun error active developer path 錯誤

    mac git xcrun error active developer path 錯誤

    本文主要是講訴了如何解決在mac下使用git;xcode4.6的環境時,出現了錯誤(mac git xcrun error active developer path)的解決辦法,希望對大家有所幫助...

    Swift教程網2232020-12-16
  • SwiftSwift實現多個TableView側滑與切換效果

    Swift實現多個TableView側滑與切換效果

    這篇文章主要為大家詳細介紹了Swift實現多個TableView側滑與切換效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    乞力馬扎羅的雪雪5822021-01-08
  • SwiftSwift教程之基礎數據類型詳解

    Swift教程之基礎數據類型詳解

    這篇文章主要介紹了Swift教程之基礎數據類型詳解,本文詳細講解了Swift中的基本數據類型和基本語法,例如常量和變量、注釋、分號、整數、數值類型轉換等...

    Swift教程網5162020-12-18
  • Swiftswift where與匹配模式的實例詳解

    swift where與匹配模式的實例詳解

    這篇文章主要介紹了swift where與匹配模式的實例詳解的相關資料,這里附有簡單的示例代碼,講的比較清楚,需要的朋友可以參考下...

    追到夢的魔術師14382021-01-06
主站蜘蛛池模板: 亚洲一区中文字幕在线观看 | 在线日韩欧美 | 狠狠综合久久av一区二区老牛 | 精品亚洲永久免费精品 | 国产精品福利在线 | 这里只有精品在线视频观看 | 国产一级黄 | 欧美成人精品一区二区三区在线看 | 久久精品国产免费 | 亚洲精品视频在线免费播放 | 精品久久久久久久久久久久久久久久久久 | 日韩精品成人 | 黄色一级毛片 | 日韩在线精品视频 | 91精品久久 | 婷婷精品久久久久久久久久不卡 | 成人自拍视频 | 嫩草视频在线 | 久久精品无码一区二区三区 | 久久精品视频网站 | 日韩精品久久久久久 | 欧美成视频 | 国产精品免费视频观看 | 久久综合一区二区三区 | 91中文字幕在线 | 久久久国产精品入口麻豆 | 日韩码有限公司在线观看 | 一区二区三区免费 | 后人极品翘臀美女在线播放 | 久久女人精品 | 国产在线精品一区 | 色综合视频网 | 黄色毛片在线看 | 国产精品久久久久免费 | 亚洲福利片 | 婷婷国产在线观看 | 亚洲一区二区在线播放 | 久久国产精品一区二区三区 | 日本在线免费观看 | 午夜精品影院 | 8888色大全 |