Apple Watch、中でもForceTouchとDigitalCrownによって導入された新しいユーザーインタラクションの可能性に非常に興奮しています。
ただし、WatchKitAPIでそれらの言及を見つけることができませんでした。 Force Touch/Digital Crownからイベントを受け取る方法はありますか?イベントのカスタムハンドラーを持つことは可能ですか?
watchOS 3は WKCrownSequencer
と WKCrownDelegate
を追加して、デジタルリューズの状態(回転速度など)を報告し、受信しますユーザーがリューズを回転させたときの通知。
クラウンシーケンサーを使用して、シーンやインターフェイスオブジェクトを制御するための一般的な入力を提供できます。
Appleは WatchKitカタログサンプルコード を更新して、Apple Watchデジタルクラウンを使用して他のオブジェクトと対話する方法を示すWKInterfaceControllerクラウンシーケンサーの例を含めました:
class CrownDetailController: WKInterfaceController, WKCrownDelegate {
@IBOutlet var velocityLabel: WKInterfaceLabel!
@IBOutlet var stateLabel: WKInterfaceLabel!
@IBOutlet var pickerView: WKInterfacePicker!
override func awake(withContext context: AnyObject?) {
super.awake(withContext: context)
let itemList: [(String, String)] = [
("Item 1", "Red"),
("Item 2", "Green"),
("Item 3", "Blue")
]
let pickerItems: [WKPickerItem] = itemList.map {
let pickerItem = WKPickerItem()
pickerItem.caption = $0.0
pickerItem.title = $0.1
return pickerItem
}
pickerView.setItems(pickerItems)
crownSequencer.delegate = self
}
override func willActivate() {
// This method is called when watch view controller is about to be visible to user
super.willActivate()
crownSequencer.focus()
}
@IBAction func focusCrown(sender: AnyObject) {
crownSequencer.focus()
}
func updateCrownLabels() {
velocityLabel.setText(String(format: "RPS: %2.2lf", crownSequencer.rotationsPerSecond))
stateLabel.setText(crownSequencer.isIdle ? "Idle: true" : "Idle: false")
}
func crownDidBecomeIdle(_ crownSequencer: WKCrownSequencer?) {
updateCrownLabels()
}
func crownDidRotate(_ crownSequencer: WKCrownSequencer?, rotationalDelta: Double) {
updateCrownLabels()
}
}
現在(Xcode 6.2ベータ3)Appleは、デジタルクラウンがサードパーティのアプリでページコンテンツを上下にスクロールすることを示していますが、アプリはそれからの通知を受信したり、として使用したりするために登録できませんサードパーティのコードがiPhoneのWatchKitApp Extensionでのみ実行されていることを考えると、これは応答性の低下につながる遅延またはバッテリー寿命のいずれかに関する懸念が原因である可能性が高いと思われます。したがって、これらのイベントはワイヤレスストリームで電話に返送されます。
サードパーティのアプリでは、入力方法としてForceTouchを使用できます。現時点では、Appleがアプリケーションでの感圧タッチについてアドバイスしているのは、コンテキストメニューを表示することだけであり、サードパーティの開発者はこれに完全にアクセスできます。登録する必要はありません。感圧タッチイベントを受信するには、インターフェイスビルダーでメニューを作成し、それにメニューアイテムを追加してから、それらのメニューアイテムをWatchKit拡張機能のIBActionsにワイヤリングするだけです。メニューを同等のものに接続する必要がないのはかなり奇妙です。感圧タッチジェスチャレコグナイザーですが、試してみるとうまくいくことがわかります。ネイティブにすることができた後でも、サードパーティの開発者が感圧タッチを強制する必要がある唯一のアクセスであり続ける可能性があります。 2015年後半のWatch用アプリ。
ただし、Appleは開発者に http://bugreporter.Apple.com で拡張リクエストを送信することを推奨しているので、そうすることをお勧めします。そして、私たちの数としてこれらのAPIへのアクセスを要求してください。既に持っている。
現時点では、どちらの入力メソッドにもカスタムイベントハンドラーを使用することはできません。 Apple開発者フォーラムの従業員は、機能リクエストの送信を提案しています。ネイティブの作成を開始できるようになり次第、Digital CrownAPIにアクセスできるようになると思いますApple =来年はアプリを見る。現時点では、データ入力に対する重大な制限が残っています。
WatchOS 2(Xcode 7ベータ版に含まれています)AppleはWKInterfacePicker
を追加して、デリゲートを登録し、デジタルクラウンの変更に応答できるようにしました。ドキュメントを確認できます- ここ 。
WatchOS 2で、デジタルクラウンを使用してWKInterfacePickerのアイテムを選択するには:
時計アプリの拡張機能InterfaceController.h
@property (strong, nonatomic) IBOutlet WKInterfacePicker *TestSelector;
@property (strong, nonatomic) NSArray *TestsArray;
時計アプリの拡張機能InterfaceController.m
// Setup two items the user can select from in picker
WKPickerItem *pickerItem1 = [WKPickerItem alloc];
[pickerItem1 setTitle:@"First item in list"];
WKPickerItem *pickerItem2 = [WKPickerItem alloc];
[pickerItem2 setTitle:@"Second item in list"];
// Add items to array that will be used to set picker list
self.TestsArray = [[NSArray alloc ] initWithObjects:pickerItem1,pickerItem2, nil];
// Set list of items as choices in the picker list
[TestSelector setItems:self.TestsArray];
Interface Builderで、ピッカーUI要素を参照アウトレットとしてTestSelectorにリンクします