【watchOS2】
Timetravelを実装したComplicationを
タップした時の情報を取得する方法
@mogmet
2016/03/01 shibuya.swift #3
About me
• twitter: @mogmet
• 好物:iOS, php, MySQL, Oracle
• 仕事:インフラエンジニア→iOSエンジニア→フリーランスなDBA
• ブログとか: http://mogmet.com/
• 作ったアプリたち↓
ワンナイト人狼 for iPhone STARBUCKSHOLIC
2度目の発表の場でも
緊張してます(確信
)
おさらい
what is Complication?
what is
Timetravel?
http://www.culpeperfamily.com/wp-content/uploads/2015/02/back-to-the-future.jpg
http://img.tiqav.com/5KF.jpg
本題
Complicationはタップすると
、watchアプリが
起動します。
http://www.recruit.jp/news_data/release/img/20150424_01.jpg
だがしかし
http://futtsu.co/wp-content/uploads/dagashikashi_01-600x338.jpg
CLKComplicationDataSourceの中
にタップイベントを取得する
ようなメソッドが見当たらない!
!
タイムトラベルで選んだ情報を表示したいのに!
解決策を探してみた
http://pic.prepics-cdn.com/kaito19971031/16677605.jpeg
答えは遷移した先に
あった
WKInterfaceController
一画面の描画を担当するコントロールクラス
handleUserActivity(
userInfo: [NSObject :AnyObject]?)
Handsoffとかから起動
された時に呼ばれたりする
メソッドだが
Complicationから呼ば
れた時にも呼ばれる!
userInfo[CLKLaunchedTim
elineEntryDateKey]
Timetravel中にタップした
Complicationの
時間が取れる!
Sample Demo
https://github.com/mogmet/SGComplicationSample/
DemoではuserInfoから
とれる時間をキーとして
データを引っ張ってきている
。
override func handleUserActivity(userInfo: [NSObject : AnyObject]?) {
super.handleUserActivity(userInfo)
let tapDate = userInfo?[CLKLaunchedTimelineEntryDateKey] as? NSDate ?? NSDate()
self.ending = WorldLine.endings.filter { $0.time.isEqualToDate(tapDate) }.first
self.reloadView()
}
https://github.com/mogmet/SGComplicationSample/blob/master/SGComplicationSample%20WatchKit%20Extension/InterfaceController.swift
無事タップしたComplication
との紐付きができるように
なりました!!
もっといい方法あった
ら教えて下さい
99%E3%81%88%E3%81%A6%E3%83%BB%E3%83%BB%E6%95%99%E3%81%88%E3%82%8D%E3%83%BB%E3%83%BB%E6%95%99%E3%81%88%E3%81%AD%E3%81%88%E3%81%8B%E3%80%81%E3%81%93%E3%
まとめ
Timetravelからの情報が欲しか
ったらhandleUserActivityメソ
ッドのuserInfoを使おう!
Thank you for listening!

【watchOS2】Timetravelを実装したComplicationをタップした時の情報を取得する方法