2015年

4月

12日

Apple Watch Modal画面遷移の作成 Swift

Apple Watch Pushコード記述による画面遷移の作成

Xcode 6.3 以上(6.3にて制作)
https://developer.apple.com/xcode/downloads/
6.2からAppleWatch開発環境(watchkit)が入っています。

iOS8.2以上 (iPhone)
8.2にバージョンアップするとアプリ「Apple Watch」が追加されるのですぐわかります。

 

■実装
1.新規プロジェクトを作成
2.Apple Watchターゲットを追加
3.Frameworkに「WatchKit.framework」を追加
4.Storyboard上にInterface Controller(View Controller)を3つ配置しボタンを配置します


Apple Watchでは3種類の画面遷移がありますが。
push
modal
page
今回は、コード記述のmodalでの画面遷移についてまとめてみました。


Modalの動作

Second画面が下から上に画面がかぶさります。

 

WatchKitPushの一覧

 

Storyboard上のInterface Controller(View Controller)にIdentifierを指定します。
FirstInterfaceController      -> Identifier : firstInterfaceController
SecondInterfaceController -> Identifier : secondInterfaceController

 

1番目のソースコード
FirstInterfaceController.swiftに記述します。

class FirstInterfaceController: WKInterfaceController {


    // 最初に呼び出されるメソッド

    override func awakeWithContext(context: AnyObject?) {

        super.awakeWithContext(context)

        

        // Configure interface objects here.

    }


    // Second画面遷移アクション Modal

    @IBAction func onModalSecondButtonModal() {

        // presentControllerWithName Identifier:secondInterfaceController

        presentControllerWithName("secondInterfaceController",context:"gotoSecond!!")

    }

引数nameには遷移先のInterfaceControllerのIdentifierを指定します。
IdentifierはStoryboardで設定します。
contextには遷移先のInterfaceControllerに受渡したい値を指定します。
contextはAnyObjectなのでなんでも受け渡せそうです。

(Swift言語のAnyObjectは様々なオブジェクトを表す型)
contextはnilを指定することもできますが、おすすめはしていないようです。


WatchKitにはiOSでいうNavigationControllerのようなものはありません。

presentControllerWithName:context:を実行するだけでModal画面遷移できます。

 

 

2番目のソースコード
SecondInterfaceController.swiftに記述します。

class SecondInterfaceController: WKInterfaceController {


    // 最初に呼び出されるメソッド

    override func awakeWithContext(context: AnyObject?) {

        super.awakeWithContext(context)

        

        NSLog("%@ init context:%@", self, context as! String)

        // Configure interface objects here.

    }

    

    // Dismiss画面を閉じるアクション

    @IBAction func onDismissButtonDismis() {

        // 閉じる

        dismissController()

    }

FirstInterfaceControllerのModalSecondボタン押下時に以下の様なログが表示されます。

2015-04-12 19:33:50.244 WatchKitSwiModal WatchKit Extension[12351:8441205] <WatchKitSwiModal_WatchKit_Extension.SecondInterfaceController: 0x608000072040> init context:gotoSecond!!

contextで値を受け渡せていることがわかります。

 

dismissControllerを実行すると画面が閉じて前の画面が表示されます。
ただ、Modalで画面遷移すると、iOSのNavigationControllerのように自動的に左上に戻るボタンが表示されます。
戻るボタンは自分で実装する必要ないです。

 

GitHub WatchKitSwiModal


 

▫️参考にしたページ

Apple Watchの画面遷移 Objective-C

  

目 次