Apple Pencil용 API

12184 단어 iOSApplePenciliPad

소개



Pencil의 실물이 수중에 없기 때문에 API를 바라볼 뿐.

익숙하지 않은 단어:

Azimuth… 방위각
Altitude… 고도



이 그림에 Observer 를 필처, Star 를 Lightning 단자와 맞추면 좋을까.

UITouch



UITouchType



터치의 종류에 Stylus(≒Apple Pencil)가 추가되었다.

UITouchType
typedef NS_ENUM(NSInteger, UITouchType) {
    UITouchTypeDirect,                       // A direct touch from a finger (on a screen)
    UITouchTypeIndirect,                     // An indirect touch (not a screen)
    UITouchTypeStylus NS_AVAILABLE_IOS(9_1), // A touch from a stylus
} NS_ENUM_AVAILABLE_IOS(9_0);

  • UITouchTypeDirect : 손가락 터치

  • UITouchTypeIndirect : 상세 불명

  • UITouchTypeStylus : Pencil
  • UITouchTypeIndirect 에 관한 기술은 특별히 없고, 용도 불명. "스크린 밖의 간접적인 터치"라는 취지의 코멘트가 있으므로, 키보드의 포스 터치인가, 혹은 장래 Siri Remote 와 같은 디바이스에 대응하기 위한 것일지도 모른다.

    보다 정확도가 높은 터치 좌표 찾기



    UITouch
    // Use these methods to gain additional precision that may be available from touches.
    // Do not use precise locations for hit testing. A touch may hit test inside a view, yet have a precise location that lies just outside.
    @available(iOS 9.1, *)
    public func preciseLocationInView(view: UIView?) -> CGPoint
    @available(iOS 9.1, *)
    public func precisePreviousLocationInView(view: UIView?) -> CGPoint
    

    정밀도가 높은 좌표란?



    iOS 9.1부터 손가락과 펜슬 모두에서 더 정확하고 정밀한 터치 좌표를 얻을 수 있습니다. 이것은 기존의 -locationInView: 대신에 위의 메소드를 사용하는 것만으로 좋다. 큰 화면을 가지는 단말에는 유효.

    각 메소드의 대응



    일반 터치 좌표
    고정밀 터치 좌표


    현재 터치 좌표
    locationInView()
    preciseLocationInView()

    직전의 터치 좌표
    previousLocationInView()
    precisePreviousLocationInView()


    방위각(Azimuth) 얻기



    방위각을 얻는다. UITouchTypeStylus에서만 사용할 수 있습니다.

    UITouch
    // Azimuth angle. Valid only for stylus touch types. Zero radians points along the positive X axis.
    // Passing a nil for the view parameter will return the azimuth relative to the touch's window.
    @available(iOS 9.1, *)
    public func azimuthAngleInView(view: UIView?) -> CGFloat
    

    방위각의 방향을 가리키는 단위 벡터를 얻는다. UITouchTypeStylus에서만 사용할 수 있습니다.

    UITouch
    // A unit vector that points in the direction of the azimuth angle. Valid only for stylus touch types.
    // Passing nil for the view parameter will return a unit vector relative to the touch's window.
    @available(iOS 9.1, *)
    public func azimuthUnitVectorInView(view: UIView?) -> CGVector
    

    참고로 CGVector

    CGGeometry
    public struct CGVector {
        public var dx: CGFloat
        public var dy: CGFloat
        public init()
        public init(dx: CGFloat, dy: CGFloat)
    }
    

    고도각(Altitude)을 얻



    고도 각을 얻는다. UITouchTypeStylus에서만 사용할 수 있습니다.M_PI/2 라디안은 Pencil이 화면에 수직임을 나타냅니다. 0 라디안은 Pencil이 화면과 평행하다는 것을 나타냅니다.

    UITouch
    // Altitude angle. Valid only for stylus touch types.
    // Zero radians indicates that the stylus is parallel to the screen surface,
    // while M_PI/2 radians indicates that it is normal to the screen surface.
    @available(iOS 9.1, *)
    public var altitudeAngle: CGFloat { get }
    

    비고:라디안/호도법





    estimationUpdateIndex



    이 속성은 예상 속성을 포함한 각 터치에서 단순히 증가합니다. 적절한 터치에 터치 업데이트를 적용하는지 확인하기 위해이 속성을 사용할 수 있습니다. 객체가 추정되거나 업데이트된 속성 중 하나를 포함하지 않을 때 nil을 반환합니다. (Google 번역)

    ……라는 것으로, 터치의 인덱스적인 것 같다.

    UITouch
    // An index which allows you to correlate updates with the original touch.
    // Is only guaranteed non-nil if this UITouch expects or is an update.
    @available(iOS 9.1, *)
    public var estimationUpdateIndex: NSNumber? { get }
    

    UITouchProperties



    추정 속성의 비트 마스크.

    UITouchProperties
    @available(iOS 9.1, *)
    public struct UITouchProperties : OptionSetType {
        public init(rawValue: Int)
    
        public static var Force: UITouchProperties { get }
        public static var Azimuth: UITouchProperties { get }
        public static var Altitude: UITouchProperties { get }
        public static var Location: UITouchProperties { get } // For predicted Touches
    }
    

    각각 Pencil의 필압, 방위, 고도, 좌표를 나타낸다.

    estimatedProperties



    예상 속성을 얻습니다.

    UITouch
    // A set of properties that has estimated values
    // Only denoting properties that are currently estimated
    @available(iOS 9.1, *)
    public var estimatedProperties: UITouchProperties { get }
    // A set of properties that expect to have incoming updates in the future.
    // If no updates are expected for an estimated property the current value is our final estimate.
    // This happens e.g. for azimuth/altitude values when entering from the edges
    @available(iOS 9.1, *)
    public var estimatedPropertiesExpectingUpdates: UITouchProperties { get }
    

    참고 자료



    UITouch Class Reference
    What's New in iOS 9.1
    How to track finger position and touch force in iOS 9

    샘플 코드



    TouchCanvas: Using UITouch efficiently and effectively

    좋은 웹페이지 즐겨찾기