iOS---watchOS 2基础

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

iOS---watchOS 2基础_第1张图片
Paste_Image.png

与手表端进行通信

你需要在iPhone端和手表端同时进行注册WCSession
注册方式:

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

发送信息:

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

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

 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

你可以把你的控件放在group上面,在group上你同样可以用左中右的布局进行布局,相当于html中的

,这样的布局方式是什么适合使用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一帧一帧绘制你的动画了,也就是用一系列图片串成一个动画,你可以使用WKInterfaceImage来实现这一点:

        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。


iOS---watchOS 2基础_第2张图片
Paste_Image.png

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

iOS---watchOS 2基础_第3张图片
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端中的window.rootViewController同时这个方法将释放之前所有的界面.

返回上一界面:

 self.popToRootController()
 self.popController()

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

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

你可能感兴趣的:(iOS---watchOS 2基础)