Handling Input from Apple Pencil
13202 ワード
https://developer.apple.com/documentation/uikit/pencil_interactions/handling_input_from_apple_pencil
"Learn how to detect and respond to touches from Apple Pencil."
アップルのペンからのタッチを検出して応答する方法を理解します.
Figure 1 Using stylus information as input
アップルペンは独立したデバイスであるため、アップルペンが収集した高さ、方位角、圧力の時間とアプリケーションで既知の値との間に遅延がある.したがって、
Note
アップルペンが動作可能な装置は240 Hzのタッチ制御を提供することができる.
Getting High-Fidelity Input with Coalesced Touches
https://developer.apple.com/documentation/uikit/touches_presses_and_gestures/handling_touches_in_your_view/getting_high-fidelity_input_with_coalesced_touches
https://velog.io/@panther222128/Getting-High-Fidelity-Input-with-Coalesced-Touches
タッチオブジェクトに測定された属性が含まれている場合、
Listing 1は、タッチデータを取得するためのアプリケーションの
Listing 1 Tracking touches that need updates
Listing 2は、Listing 1で作成されたキャッシュされたオブジェクトの圧力値を更新するための
Listing 2 Updating estimated values
既知の圧力値を3 Dタッチ圧力値と一致させるように調整します.
https://developer.apple.com/documentation/uikit/pencil_interactions/handling_input_from_apple_pencil/computing_the_perpendicular_force_of_apple_pencil
https://velog.io/@panther222128/Computing-the-Computing-the-Perpendicular-Force-of-Apple-Pencil
ビュー内のコンテンツに複雑なタッチ操作がある場合は、直接ビューサブクラスでタッチイベントを使用します.
https://developer.apple.com/documentation/uikit/touches_presses_and_gestures/handling_touches_in_your_view
https://velog.io/@panther222128/Handling-Touches-in-Your-View
タッチ圧力による操作内容.
https://developer.apple.com/documentation/uikit/touches_presses_and_gestures/tracking_the_force_of_3d_touch_events
https://velog.io/@panther222128/Tracking-the-Force-of-3D-Touch-Events
画面上のタッチポイントの位置、サイズ、動き、圧力を示すオブジェクト.
https://developer.apple.com/documentation/uikit/uitouch
https://velog.io/@panther222128/UITouch
"Learn how to detect and respond to touches from Apple Pencil."
アップルのペンからのタッチを検出して応答する方法を理解します.
Overview
UIKit
は、ユーザの指で入力されたタッチと同じように、ユーザにアップルペンのタッチを教える.具体的には、UIKit
は、アプリケーションにタッチ位置を含むUITouch
オブジェクトを伝達する.しかし、アップルペンからのタッチオブジェクトには、方位角、アップルペンの高さ、入力圧力などの他の情報が含まれています.Figure 1 Using stylus information as input
アップルペンは独立したデバイスであるため、アップルペンが収集した高さ、方位角、圧力の時間とアプリケーションで既知の値との間に遅延がある.したがって、
UIKit
は、これらの属性の測定値を早期に提供し、その後、実際の値を提供する.アップルペンの高さ、方位、圧力情報を使用する場合は、これらの測定プロパティを明示的に処理する必要があります.Note
アップルペンが動作可能な装置は240 Hzのタッチ制御を提供することができる.
UIKit
は通常60 Hzのレベルで警報を発するので、追加のすべてのタッチは最後の位置を表す1つのタッチポイントに統合される.追加のタッチデータの詳細については、「販売タッチの追加」の「高精度入力の作成」を参照してください.Getting High-Fidelity Input with Coalesced Touches
https://developer.apple.com/documentation/uikit/touches_presses_and_gestures/handling_touches_in_your_view/getting_high-fidelity_input_with_coalesced_touches
https://velog.io/@panther222128/Getting-High-Fidelity-Input-with-Coalesced-Touches
Handle Estimated Properties
UIKit
が属性値のみを測定する場合、タグは、対応するUITouch
オブジェクトのestimatedPropertiesExpectingUpdates
属性を含む.タッチイベントを処理するときは、プロパティを確認して、タッチ情報を後で更新する必要があるかどうかを確認します.タッチオブジェクトに測定された属性が含まれている場合、
UIKit
は、タッチを後で確認するためのestimationUpdateIndex
の属性にも値を提供する.estimationUpdateIndex
の属性値を保持するバイナリキーとして使用してください.キーの値をapp-specificオブジェクトに設定し、タッチ情報を保存します.UIKit
がその後実際の値を発行する場合は、インデックスを使用してapp-特定のオブジェクトを検索し、測定値を実際の値に置き換える必要があります.Listing 1は、タッチデータを取得するためのアプリケーションの
addSamples
メソッドを表す.各タッチについて、方法はタッチ情報を有するカスタムStrokeSample
オブジェクトを作成する.タッチ圧力値が測定値のみである場合、registerForEstimates
メソッドは、estimationUpdateIndex
プロパティでキー値を使用してサンプルをディクシャナにキャッシュする.Listing 1 Tracking touches that need updates
var estimates : [NSNumber : StrokeSample]
func addSamples(for touches: [UITouch]) {
if let stroke = strokeCollection?.activeStroke {
for touch in touches {
if touch == touches.last {
let sample = StrokeSample(point: touch.location(in: self),
forceValue: touch.force)
stroke.add(sample: sample)
registerForEstimates(touch: touch, sample: sample)
} else {
let sample = StrokeSample(point: touch.location(in: self),
forceValue: touch.force, coalesced: true)
stroke.add(sample: sample)
registerForEstimates(touch: touch, sample: sample)
}
}
self.setNeedsDisplay()
}
}
func registerForEstimates(touch : UITouch, sample : StrokeSample) {
if touch.estimatedPropertiesExpectingUpdates.contains(.force) {
estimates[touch.estimationUpdateIndex!] = sample
}
}
UIKit
がタッチの実際の値を受信すると、UIKit
は、リスナーまたはリスナーのtouchesEstimatedPropertiesUpdated(_:)
メソッドを呼び出す.UIKit
で提供される対応する方法を使用して、実際の測定データを提供してください.Listing 2は、Listing 1で作成されたキャッシュされたオブジェクトの圧力値を更新するための
StrokeSample
方法の一例を示す.方法touchesEstimatedPropertiesUpdated(_:)
プロパティの値を使用して、StrokeSample
オブジェクトを測定リストから回収します.後続の圧力値を更新し、ディックバンナから例を削除します.Listing 2 Updating estimated values
override func touchesEstimatedPropertiesUpdated(_ touches: Set<UITouch>) {
for touch in touches {
// If the force value is no longer an estimate, update it.
if !touch.estimatedPropertiesExpectingUpdates.contains(.force) {
let index = touch.estimationUpdateIndex!
var sample = estimates[index]
sample?.force = touch.force
// Remove the key and value from the dictionary.
estimates.removeValue(forKey: index)
}
}
}
Topics
Related Articles
Computing the Perpendicular Force of Apple Pencil
既知の圧力値を3 Dタッチ圧力値と一致させるように調整します.
https://developer.apple.com/documentation/uikit/pencil_interactions/handling_input_from_apple_pencil/computing_the_perpendicular_force_of_apple_pencil
https://velog.io/@panther222128/Computing-the-Computing-the-Perpendicular-Force-of-Apple-Pencil
See Also
Touches
Handling Touches in Your View
ビュー内のコンテンツに複雑なタッチ操作がある場合は、直接ビューサブクラスでタッチイベントを使用します.
https://developer.apple.com/documentation/uikit/touches_presses_and_gestures/handling_touches_in_your_view
https://velog.io/@panther222128/Handling-Touches-in-Your-View
Tracking the Force of 3D Touch Events
タッチ圧力による操作内容.
https://developer.apple.com/documentation/uikit/touches_presses_and_gestures/tracking_the_force_of_3d_touch_events
https://velog.io/@panther222128/Tracking-the-Force-of-3D-Touch-Events
UITouch
画面上のタッチポイントの位置、サイズ、動き、圧力を示すオブジェクト.
https://developer.apple.com/documentation/uikit/uitouch
https://velog.io/@panther222128/UITouch
Reference
この問題について(Handling Input from Apple Pencil), 我々は、より多くの情報をここで見つけました https://velog.io/@panther222128/Handling-Input-from-Apple-Pencilテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol