また1からこつこつと

最高はひとつじゃないと信じてまたがんばります。

【AppleWatch】簡単なカウントアプリを作ってみた

昨年の8月に購入したAppleWatchだけど、プロビジョニングファイルの諸々の設定が前に使っていたAppleIDに紐付いていたりしてなかなか開発できていなかった。もともと開発用に買ったのに…

今日、少しスイッチがはいったので久しぶりにコード書いてみた。

とりあえずソースコード

ほぼほぼ見たまんま書いてるのであまり参考にはならないですが、とりあえずソースコード載せておきます。

//
//  InterfaceController.swift
//  HelloWatch Extension
//
//  Created by mjk on 2016/01/06.
//  Copyright © 2016年 Kirie Miyajima. All rights reserved.
//

import WatchKit
import Foundation


class InterfaceController: WKInterfaceController {
    @IBOutlet var myLabel: WKInterfaceLabel!
    @IBOutlet var plusBtn: WKInterfaceButton!
    @IBOutlet var minusBtn: WKInterfaceButton!
    
    var num:Int = 0

    override func awakeWithContext(context: AnyObject?) {
        super.awakeWithContext(context)
        
        myLabel.setText(String(num))
        myLabel.setTextColor(UIColor.whiteColor())
        
        plusBtn.setTitle("+1")
        plusBtn.setBackgroundColor(UIColor.redColor())
    
        minusBtn.setTitle("-1")
        minusBtn.setBackgroundColor(UIColor.blueColor())
        
        
        //FourceTouch時の設定
        addMenuItemWithItemIcon(WKMenuItemIcon.Decline, title: "reset", action: Selector("SelectMenu"))
        
    }
    
    func SelectMenu(){
        num = 0
        myLabel.setText(String(num))
    }
    

    override func willActivate() {
        // This method is called when watch view controller is about to be visible to user
        super.willActivate()
    }

    override func didDeactivate() {
        // This method is called when watch view controller is no longer visible
        super.didDeactivate()
    }
    
    @IBAction func plus(){
        num++
        myLabel.setText(String(num))
    }
    
    @IBAction func minus(){
        num--
        myLabel.setText(String(num))
    }

}

これを動かすとこうなります

基本的な構造

AppleWatchのアプリはStoryBoardを使わないと開発できない。僕はiOSアプリを開発するときにStoryboardを使わない派だったので、単純にStoryboardの使いかたがわからずちょっと悩んだw

UIKitは使えず、WatchKitをimportする
なのでUILabelとかUIButtonとかは使えなくて、その代わりWKInterfaceLabelやWKInterfaceButtonというクラスが用意されている

awakeWithContextがいってみればviewDidLoadみたいな感じかな
とりあえずここに書いておけば動く
...ちゃんと調べますすみません

forceTouch

forceTouchの実装って大変なのかなって思ってたけどなにも難しくなかった

addMenuItemWithItemIcon(WKMenuItemIcon.Decline, title: "reset", action: Selector("SelectMenu"))

これだけ。forceTouchするとアプリのMenuが呼ばれる仕組みになっているので、addMenuItemsしてしまえば勝手になってくれるらしい
便利だ

ちなみに、WKMenuItemIconっていうのにはあらかじめ用意されているアイコンを載せることもできるし、自分でimageを貼り付けることもできる
こちら一覧です

f:id:mjk0513:20160107001936j:plain
【AppleWatch】コードからコンテキストメニューを生成する | 株式会社スカイセンス

【追記 2016/01/07】
GitHubソースコード置きました
github.com