iOS---watchOS 2基础

相比于watch OS 1 ,OS 2将WatchKit Extension挪到了手表端,手表端将独立进行逻辑处理,编码方面没有太大变化,通信方式发生了改变,改为使用<code>WatchConnectivity</code>进行通信。

Paste_Image.png

与手表端进行通信

你需要在iPhone端和手表端同时进行注册<code>WCSession</code>。
注册方式:

 let session = WCSession.defaultSession()
        if WCSession.isSupported() {
            session.delegate = self;
            session.activateSession()
        }

发送信息:

WCSession.defaultSession().sendMessage(["key":"value"], replyHandler: { (reply) in
            //回调
            }) { (error) in
            //error
        }

我们观察一下<code>WCSessionDelegate</code>,其中包括很多通信中将使用到的协议方法,实现相关协议即可接收到信息。
你可能用的最多的会是这个协议方法:

 optional public func session(session: WCSession, didReceiveUserInfo userInfo: [String : AnyObject])

这个方法将在前台时收到通讯信息,参数是一个字典。
协议中一共有三种方法,分别是:

/** ------------------------- iOS App State For Watch ------------------------ */
/** ------------------------- Interactive Messaging ------------------------- */
/** -------------------------- Background Transfers ------------------------- */

UI以及布局

相比于iPhone端,手表端受限于尺寸大小,UI控件数量上少了很多,经常使用到的UI控件包括:

group
Table
Image
Label
Button
Picker

以上控件都是适合手表尺寸上交互的控件,同时在UI布局上与iPhone端有较大区别,手表端不在使用坐标系进行布局,而是简单使用左、中、右布局,也就是在水平和垂直上都左、中、右三个位置的选择,你只能在这个划分成九宫格的布局中摆放你的控件,当然你是可以控制你的控件的大小的。

group

你可以把你的控件放在<code>group</code>上面,在group上你同样可以用左中右的布局进行布局,相当于html中的<div>,这样的布局方式是什么适合使用storyBoard(当然你也只能使用StoryBoard)。

WKInterfaceLabel

WKInterfaceLabel和UILabel有较大的区别,里面的方法只有三个:

//设置文字
public func setText(text: String?)
//设置文字颜色
public func setTextColor(color: UIColor?)    
//设置文本属性
public func setAttributedText(attributedText: NSAttributedString?)
WKInterfaceImage

WKInterfaceImage中的主要方法:

public func setImage(image: UIImage?)
public func setImageData(imageData: NSData?)
public func setImageNamed(imageName: String?)

这里需要注意一点:在watch中不支持像iPhone端那样的动画,你唯一制作动画的方法可能就是利用WKInterfaceImage一帧一帧绘制你的动画了,也就是用一系列图片串成一个动画,你可以使用<code>WKInterfaceImage</code>来实现这一点:

        let image1 = UIImage(named: "image1")
        let image2 = UIImage(named: "image2")
        let image = UIImage.animatedImageWithImages([image1!,image2!], duration: 1)
        self.heartImage.setImage(image)
        self.heartImage.startAnimating()

像上面那样就是用两张图片拼接成一个动画,你还可以控制的属性包括动画的时间,动画的播放次数,开始动画和结束动画:


    // Play all images repeatedly using duration specified in interface description.
    public func startAnimating()
    
    // Play a subset of images for a certain number of times. 0 means repeat until stop.
    public func startAnimatingWithImagesInRange(imageRange: NSRange, duration: NSTimeInterval, repeatCount: Int)
    
    public func stopAnimating()

·······················
watch中的UI控件大都使用十分简单,大家看看文档自己尝试一下都能整明白。


展示新页面

每一个controller都有一个Identifier,你想要展示这个controller就必须要设置Identifier。


Paste_Image.png

在watch中你可选择展示一个新页面或者展示多个新页面,展示多个新页面也就是通过左滑右滑进行展示,大概长成这样:

Paste_Image.png

这就是两个页面进行切换。
具体的方法:

public func presentControllerWithName(name: String, context: AnyObject?) // modal presentation//展示单个
public func presentController(namesAndContexts: [(name: String, context: AnyObject)])//展示多个

public func pushControllerWithName(name: String, context: AnyObject?) // context passed to child controller via initWithContext:

这里和iPhone端的展示方式是一样的,同样包括modal和push两种展示方式,他需要第一个参数就是上面填写的identifier,第二个参数则是传递给这个页面的参数。

在watch中还有第三种展示方式:

extension WKInterfaceController {
    public class func reloadRootControllers(namesAndContexts: [(name: String, context: AnyObject)])
}

这个方法相当于iPhone端中的<code>window.rootViewController</code>同时这个方法将释放之前所有的界面.

返回上一界面:

 self.popToRootController()
 self.popController()

watch目前的交互方式比较单一,同时apple开发的接口也较少,所以watch开发还是比较容易掌握的。

很多文章欢迎访问我的个人主页:StrongX.cn

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,847评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,208评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,587评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,942评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,332评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,587评论 1 218
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,853评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,568评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,273评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,542评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,033评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,373评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,031评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,073评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,830评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,628评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,537评论 2 269

推荐阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 11,613评论 4 59
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 170,568评论 25 707
  • 1.雾里看花 (容祖儿) 有人心疼说我委屈了点,也有人笑我一定是瞎了眼,但爱不爱你是我自己的人生,我管别人能不能了...
    LYQ1024阅读 992评论 0 2
  • 灵岩山以灵岩奇石得名,旧有“十八奇石”之说, 因为灵岩塔前有一块"灵芝石"十分有名,因此得名"灵岩山"。 山石颜色...
    羽磬和香浏阳阅读 278评论 0 0
  • 一、你的“气”从哪里来 现实生活中总有这样一群人:经常不由自主地生气,甚至不分时间、地点、场合,从而造成一系列或大...
    YeahsBaby阅读 622评论 0 7