Pencilから情報を取得する|TechRacho(テックラッチョ)〜エンジニアの「?」を「!」に〜|BPS株式会社エンジニアの「?」を「!」に。Pencilから情報を取得するyoshi.kシェアツイートブックマークLINEiOSエンジニアのyoshi.kです。Pencil、非常に使い心地良いですよね!私はiPadのマルチタスク機能で、電子書籍アプリやSafariと、メモアプリを同時に開いてノート代わりとしてよく使っています。Pencil対応」と記載があります。記載されているのサンプルコードの動作環境は以下となっています。Pencilからの情報はUITouchとして、アプリに報告されます。情報の取得に関してもUITouchと同じ方法で取得可能です。UITouchTypeにUITouchTypePencilが追加されており、ペンかそれ以外のタッチイベントの判別が可能です。UITouchTypePencilの場合、UITouchから以下の情報が取得可能です。altitudeAngle端末とペンの角度をラジアン値(CGFloat)で返します。M_PI/2となります。ちなみに指でタッチした場合には、1.57固定となりました。azimuthUnitVector(in:)ペンの方位角(倒れてる方向)になります。CGFoatで取得する方法、ベクトルで取得する方法があります。ペンの方位角をラジアン値(CGFloat)で返します。時計周りに回転させると増加し、逆時計回りに回転させると減少します。X方向から180度回転させた位置で正と負が反転します。ペンの方位角をベクトルで返します。force平均的な力量を1を基準とした、力量を返します。Pencilの他に3DTouchでもサポートされてます。サンプル各値を表示してみました。情報の取得に関してもUITouchと同じ方法で取得可能です。実値ではなく推定値がUITouchのプロパティに含まれることがあります。PencilとiPadは別端末であり、情報の収集、送信に遅延が発生してしまうからです。正確なUITouch情報を利用する場合には、あとで実値で上書きする必要があります。estimatedPropertiesExpectingUpdates直ちに報告できないプロパティ、後で更新が予想されるプロパティの定数のビットマスクが入っています。力量が推定プロパティかどうか調べる場合には、下記のような形でBool値として判定可能です。touch.estimatedPropertiesExpectingUpdates.contains(.force)force、altitude、azimuth、locationが判定可能です。estimationUpdateIndex推定値がある場合に、更新時に同じUITouchか判別するためのキーをします。推定値がない場合はnilです。Set<UITouch>)プロパティが推定値から実値にアップデートされた際に呼ばれるメソッドです。オーバーライドして使いましょう。サンプル推定値と実値を表示するサンプルになります。端末上に表示する方法がパッと思いつかなかったので、ログとして出力してます。見で力量は差が見られますが、他の値は殆ど差が見られませんね。サンプルではタッチ情報をキャッシュする際に推定値が存在するかしか見てないので、力量以外はリアルタイムで値を取得できているのかもしれません。Pencilで何が出来るか分かったところで、実際にお絵かきできるアプリを実装してみましょう。今回は、力加減によって線の太さが変わるお絵かきアプリを実装しました。Pencilのチュートリアルが非常に参考になるため、ご興味のある方は一読して見てください。※12/16時点で記事内のサンプルコードがSwift2で書かれている為、そのままでは現時点での最新環境では動作しません。各社それぞれSDKを出しているようですね。Pencilのみのようです。Storageを使ってはいけない(翻訳)#Tags#会社紹介#自社サービス#勉強会#Rails#PHP#デザイン#実績#週刊RailsウオッチCONTACTお気軽にご相談ください。(翻訳)CONTACTTechRachoでは、パートナーシップをご検討いただける方からのご連絡をお待ちしております。お気軽にご意見・ご相談ください。