読者です 読者をやめる 読者になる 読者になる

【ios8】タッチの接地領域を取得する

ios8からUITouchクラスにmajorRadiusというプロパティが登場しています.
UITouch Class Reference

Use the value in this property to determine the size of the touch that was reported by the hardware.
This value is an approximation of the size and can vary by the amount specified in the majorRadiusTolerance property.

指の接地領域を円と見立てたときの半径のようです.
ただし連続値は取得できず,かなり離散的な値しか取得できません.

具体的な数値というと,
iOS8からUITouchにタッチ半径を測定するプロパティがある - Qiita
によると,

  • 人差し指の指先でちょんと触って12から25.75000
  • 人差し指をベタっと付けたら51から64.390625程度
  • ペンを握るような感じで手を付けると115から270程度


ただし,このサイズは端末ごとのmajorRadiusToleranceで表される誤差によって少し変わってきます.
手元の端末で調べたところ

  • iPad AirでもiPad Air2でもこのmajorRadiusToleranceの値は5.21875でした.
//    タッチ中
    override func touchesMoved(touches: Set<NSObject>, withEvent event: UIEvent){
        let touch: UITouch = touches.first as! UITouch
        let location = touch.locationInView(self.view)
    
        let mRadius = touch.majorRadius
        let mRadiusT = touch.majorRadiusTolerance
        println("R:\(mRadius), Er:\(mRadiusT)")
    }