手势识别的简单使用

UISwipeGestureRecognizer


import UIKit

class ViewController: UIViewController {
  
  var swipeRecognizer: UISwipeGestureRecognizer!
  
  required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
    swipeRecognizer = UISwipeGestureRecognizer(target: self,
      action: "handleSwipes:")
  }
  
  func handleSwipes(sender: UISwipeGestureRecognizer){
    
    if sender.direction  == .Down{
      print("Swiped Down")
    }
    if sender.direction == .Left{
      print("Swiped Left")
    }
    if sender.direction == .Right{
      print("Swiped Right")
    }
    if sender.direction == .Up{
      print("Swiped Up")
    }
    
  }
  
  override func viewDidLoad() {
    super.viewDidLoad()
    
    /* Swipes that are performed from right to
    left are to be detected */
    swipeRecognizer.direction = .Left
    
    /* Just one finger needed */
    swipeRecognizer.numberOfTouchesRequired = 1
    
    /* Add it to the view */
    view.addGestureRecognizer(swipeRecognizer)
    
  }

}

当从右向左滑动时,打印 “Swiped Left”



UIRotationGestureRecognizer


import UIKit

class ViewController: UIViewController {
  
  var helloWorldLabel: UILabel!
  var rotationRecognizer: UIRotationGestureRecognizer!
  var rotationAngleInRadians = 0.0 as CGFloat
  
  func handleRotations(sender: UIRotationGestureRecognizer){
    
    /* Take the previous rotation and add the current rotation to it */
    helloWorldLabel.transform =
      CGAffineTransformMakeRotation(rotationAngleInRadians +
        sender.rotation)
    
    /* At the end of the rotation, keep the angle for later use */
    if sender.state == .Ended{
      rotationAngleInRadians += sender.rotation
    }
    
  }
  
  required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
    helloWorldLabel = UILabel(frame: CGRectZero)
    rotationRecognizer = UIRotationGestureRecognizer(target: self,
      action: "handleRotations:")
  }
  
  override func viewDidLoad() {
    super.viewDidLoad()
    
    helloWorldLabel.text = "Hello, World!"
    helloWorldLabel.font = UIFont.systemFontOfSize(16)
    helloWorldLabel.sizeToFit()
    helloWorldLabel.center = view.center
    view.addSubview(helloWorldLabel)
    
    view.addGestureRecognizer(rotationRecognizer)
    
  }
  
}

借助UIRotationGestureRecognizer实现label的旋转。



UIPanGestureRecognizer


import UIKit

class ViewController: UIViewController {
  
  var helloWorldLabel: UILabel!
  var panGestureRecognizer: UIPanGestureRecognizer!
  
  required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
    let labelFrame = CGRect(x: 0, y: 0, width: 150, height: 100)
    helloWorldLabel = UILabel(frame: labelFrame)
    /* Make sure to enable user interaction; otherwise, tap events
    won't be caught on this label */
    helloWorldLabel.userInteractionEnabled = true
    helloWorldLabel.text = "Hello World"
    helloWorldLabel.frame = labelFrame
    helloWorldLabel.backgroundColor = UIColor.blackColor()
    helloWorldLabel.textColor = UIColor.whiteColor()
    helloWorldLabel.textAlignment = .Center
    panGestureRecognizer = UIPanGestureRecognizer(target: self,
      action: "handlePanGestures:")
  }
  
  override func viewDidLoad() {
    super.viewDidLoad()
    
    /* Now make sure this label gets displayed on our view */
    view.addSubview(helloWorldLabel)
    
    /* At least and at most we need only one finger to activate
    the pan gesture recognizer */
    panGestureRecognizer.minimumNumberOfTouches = 1
    panGestureRecognizer.maximumNumberOfTouches = 1
    
    /* Add it to our view */
    helloWorldLabel.addGestureRecognizer(panGestureRecognizer)
    
  }
  
  func handlePanGestures(sender: UIPanGestureRecognizer){
    
    if sender.state != .Ended && sender.state != .Failed{
      let location = sender.locationInView(sender.view!.superview!)
      sender.view!.center = location
    }
    
  }
  
  
}


借助UIPanGestureRecognizer,实现拖动标签改变它的位置。



UILongPressGestureRecognizer


import UIKit

class ViewController: UIViewController {
  
  var longPressGestureRecognizer: UILongPressGestureRecognizer!
  var dummyButton: UIButton!
  
  func handleLongPressGestures(sender: UILongPressGestureRecognizer){
    
    /* Here we want to find the mid point of the two fingers
    that caused the long press gesture to be recognized. We configured
    this number using the numberOfTouchesRequired property of the
    UILongPressGestureRecognizer that we instantiated before. If we
    find that another long press gesture recognizer is using this
    method as its target, we will ignore it */
    
    if sender.numberOfTouches() == 2{
      
      let touchPoint1 = sender.locationOfTouch(0, inView: sender.view)
      let touchPoint2 = sender.locationOfTouch(1, inView: sender.view)
      
      let midPointX = (touchPoint1.x + touchPoint2.x) / 2.0
      let midPointY = (touchPoint1.y + touchPoint2.y) / 2.0
      
      let midPoint = CGPoint(x: midPointX, y: midPointY)
      
      dummyButton.center = midPoint
      
    } else {
      /* This is a long press gesture recognizer with more
      or less than 2 fingers */
      let controller = UIAlertController(title: "Two fingers",
        message: "Please use two fingers",
        preferredStyle: .Alert)
      controller.addAction(UIAlertAction(title: "OK",
        style: .Default,
        handler: nil))
      presentViewController(controller, animated: true, completion: nil)
    }
  }
  
  required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
    
    dummyButton = UIButton(type:.System)
    dummyButton.frame = CGRect(x: 0, y: 0, width: 72, height: 37)
    dummyButton.setTitle("My Button", forState: .Normal)
    
    /* First create the gesture recognizer */
    longPressGestureRecognizer = UILongPressGestureRecognizer(target: self,
      action: "handleLongPressGestures:")
    
    /* The number of fingers that must be present on the screen */
    longPressGestureRecognizer.numberOfTouchesRequired = 2
    
    /* Maximum 100 points of movement allowed before the gesture
    is recognized */
    longPressGestureRecognizer.allowableMovement = 100
    
    /* The user must press 2 fingers (numberOfTouchesRequired) for
    at least 1 second for the gesture to be recognized */
    longPressGestureRecognizer.minimumPressDuration = 1
    
  }
  
  override func viewDidLoad() {
    super.viewDidLoad()
    
    dummyButton.center = view.center
    view.addSubview(dummyButton)
    
    /* Add this gesture recognizer to our view */
    view.addGestureRecognizer(longPressGestureRecognizer)
    
  }
  
}

实现功能:两个手指长按一秒以上,移动按钮到两个手指的中间位置。



UITapGestureRecognizer


import UIKit

class ViewController: UIViewController {
  
  var tapGestureRecognizer: UITapGestureRecognizer!
  
  func handleTaps(sender: UITapGestureRecognizer){
    
    for touchCounter in 0..<sender.numberOfTouchesRequired{
      
      let touchPoint = sender.locationOfTouch(touchCounter,
        inView: sender.view)
      
      print("Touch \(touchCounter + 1): \(touchPoint)")
      
    }
    
  }
  
  required init?(coder aDecoder: NSCoder){
    super.init(coder: aDecoder)
    
    /* Create the Tap Gesture Recognizer */
    tapGestureRecognizer = UITapGestureRecognizer(target: self,
      action: "handleTaps:")
    
    /* The number of fingers that must be on the screen */
    tapGestureRecognizer.numberOfTouchesRequired = 2
    
    /* The total number of taps to be performed before the
    gesture is recognized */
    tapGestureRecognizer.numberOfTapsRequired = 3
    
  }
  
  override func viewDidLoad() {
    super.viewDidLoad()
    
    /* Add this gesture recognizer to our view */
    view.addGestureRecognizer(tapGestureRecognizer)
    
  }
  
  
}

实现:两个手指,连按三次后打印两个手指的坐标。



UIPinchGestureRecognizer


import UIKit

class ViewController: UIViewController {
  
  var myBlackLabel: UILabel!
  var pinchGestureRecognizer: UIPinchGestureRecognizer!
  var currentScale = 0.0 as CGFloat
  
  func handlePinches(sender: UIPinchGestureRecognizer){
    
    if sender.state == .Ended{
      currentScale = sender.scale
    } else if sender.state == .Began && currentScale != 0.0{
      sender.scale = currentScale
    }
    
    if sender.scale != CGFloat.NaN && sender.scale != 0.0{
      sender.view!.transform = CGAffineTransformMakeScale(sender.scale,
        sender.scale);
    }
    
  }
  
  required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
    
    let labelRect = CGRect(x: 0, y: 0, width: 200, height: 200)
    myBlackLabel = UILabel(frame: labelRect)
    myBlackLabel.backgroundColor = UIColor.blackColor()
    /* Without this line, our pinch gesture recognizer
    will not work */
    myBlackLabel.userInteractionEnabled = true
    
    /* Create the Pinch Gesture Recognizer */
    pinchGestureRecognizer =  UIPinchGestureRecognizer(target: self,
      action: "handlePinches:")
    
    /* Add this gesture recognizer to our view */
    myBlackLabel.addGestureRecognizer(pinchGestureRecognizer)
  }
  
  override func viewDidLoad() {
    super.viewDidLoad()
    
    myBlackLabel.center = view.center
    view.addSubview(myBlackLabel)
    
  }
  
}

借助UIPinchGestureRecognizer实现label的缩放。



UIScreenEdgePanGestureRecognizer


import UIKit
import Twitter

class ViewController: UIViewController {
  
  var screenEdgeRecognizer: UIScreenEdgePanGestureRecognizer!
  
  /* Just a little method to help us display alert dialogs to the user */
  func displayAlertWithTitle(title: String, message: String){
    let controller = UIAlertController(title: title,
      message: message,
      preferredStyle: .Alert)
    
    controller.addAction(UIAlertAction(title: "OK",
      style: .Default,
      handler: nil))
    
    presentViewController(controller, animated: true, completion: nil)
    
  }

  func handleScreenEdgePan(sender: UIScreenEdgePanGestureRecognizer){
    
    if sender.state == .Ended{
      displayAlertWithTitle("Detected",
        message: "Edge swipe was detected")
    }
    
  }
  
  required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
    
    /* Create the Pinch Gesture Recognizer */
    screenEdgeRecognizer =  UIScreenEdgePanGestureRecognizer(target: self,
      action: "handleScreenEdgePan:")
    
    /* Detect pans from left edge to the inside of the view */
    screenEdgeRecognizer.edges = .Left
  }
  
  override func viewDidLoad() {
    super.viewDidLoad()
    view.addGestureRecognizer(screenEdgeRecognizer)
  }
  
  override func viewDidAppear(animated: Bool) {
    super.viewDidAppear(animated)
    
    displayAlertWithTitle("Instructions",
      message: "Start swiping from the left edge of the screen " +
      "to the right, please!")
  }
  
}


当从左边缘拖动到右边时触发事件。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值