iOS SDK详解之UIEvent/UITouch

原创Blog,转载请注明出处
http://blog.csdn.net/hello_hwc?viewmode=list
欢迎关注我的iOS SDK详解专栏
http://blog.csdn.net/column/details/huangwenchen-ios-sdk.html

前言:为什么要讲解这两个类?因为后边要讲到响应链(Response chain),这两个类是基础的概念,有助于后续的讲解,也有助于深入的理解。

UIEvent

Event的类型
在iOS 中UIEvent的类型由type和Subtype来区分。
type分为三种

enum UIEventType : Int {
    case Touches //触摸
    case Motion //设备运动
    case RemoteControl//远程控制,例如耳机控制音乐视频播放
}

SubType分为

enum UIEventSubtype : Int {
    case None //typeTouches
    case MotionShake//typeMotion
    case RemoteControlPlay
    case RemoteControlPause
    case RemoteControlStop
    case RemoteControlTogglePlayPause
    case RemoteControlNextTrack
    case RemoteControlPreviousTrack
    case RemoteControlBeginSeekingBackward
    case RemoteControlEndSeekingBackward
    case RemoteControlBeginSeekingForward
    case RemoteControlEndSeekingForward
}

Touch Event

触摸事件是绝大多数情况下处理的事件。
例如UIResponser的子类(UIView,UIWindow,UIViewController等)都有这组方法来让自类有机会处理触摸

- touchesBegan:withEvent: - touchesMoved:withEvent: - touchesEnded:withEvent: - touchesCanceled:withEvent:

例如,用如下代码可以监听TouchMoved,这里禁用了多点触摸

override func viewDidLoad() {
    super.viewDidLoad()
    self.view.multipleTouchEnabled = false;
}
override func touchesMoved(touches: Set<UITouch>, withEvent event: UIEvent?) {
    let touch = event?.allTouches()?.first
    NSLog(NSStringFromCGPoint((touch?.locationInView(self.view))!))
}

UIEvent提供了四个个方法来获取Touch对象

func allTouches() -> Set<UITouch>?
func touchesForView(_ view: UIView) -> Set<UITouch>?//针对View的touch
func touchesForWindow(_ window: UIWindow) -> Set<UITouch>?//针对Window的touch
func touchesForWindow(_ window: UIWindow) -> Set<UITouch>?//针对某一个手势的touch

UITouch

通过UITouch对象可以获取到

  • Touch所发生的View或者Window
  • Touch的位置
  • Touch的大概半径
  • Touch的力度(支持3D Touch的设备iPhone 6s/6s plus 和之后设备)
  • Touch发生的时间戳
  • Touch的手指数目

获取Touch的位置

注意,位置都是有坐标系的,所以相对哪一个坐标系一定要搞清楚

func locationInView(_ view: UIView?) -> CGPoint //位置
func previousLocationInView(_ view: UIView?) -> CGPoint //上一次位置
func preciseLocationInView(_ view: UIView?) -> CGPoint //精确位置
func precisePreviousLocationInView(_ view: UIView?) -> CGPoint//上一次精确位置

其他常用属性

view// touch发生的View
window// touch发生的Window
majorRadius//touch的半径
tapCount//点击数量
timestamp//时间戳
phase//状态
type//类型
force//力度

你可能感兴趣的:(ios,event,touch)