Watch OS开发基本知识的学习

一.Watch OS 的由来及现状

 1.AppleWatch背景

  • Apple Watch 是苹果公司于2014年9月公布的一款智能手表 。 

  • 有Apple Watch、Apple Watch Sport 和Apple Watch Edition 三种风格不同的系列。

  • Apple Watch 采用人造蓝宝石水晶屏幕与Force Touch触摸技术,有多种颜色可供选择

  2. 官方介绍

  • 苹果官方的简短视频介绍 http://www.apple.com/cn/watch/more-to-love/

    • 苹果的营销部分介绍AppWatch的功能更加的专业。
  • 苹果官方的网页介绍 http://www.apple.com/cn/watch/

官方开发网站 :

  • https://developer.apple.com/watchos/documentation/


二.WatchOS1.0系统和WatchOS2.0系统

1.开发环境的不同

 1.1   WatchOS1.0    发布时间是2014年9月

  •     Xcode需要6.4版本及以上

  •     iOS系统需要iOS8.2及以上

  •     iPhone手机需要iPhone5及以上

1.2   WatchOS2.0     发布时间是2015年10月

  •     Xcode需要7.0版本及以上

  •     iOS系统需要iOS9.0及以上

  •     iPhone手机需要iPhone5及以上


2.  Watch OS1.0与2.0一个最大的区别就是Watch OS1.0的手表App不能够独立运行,必须要连接手机。而2.0的App可以单独在手表上运行。

  •    在1.0,一旦手表没有连接手机,Watch App根本就打不开。
  •    在2.0,Watch App能够在不依赖手机App的情况下独立运行。
  •     2.0,尽管App能够独立,但是一款WatchApp始终还是作为iPhoneApp的拓展,所以手机上面还是会安装对应的iPhone App


三.WatchOS1.0和WatchOS2.0工程创建的对比

1. WatchOS1.0

  1.1   创建项目是先创建iOS App工程,让后在target中添加Watch OS 1App,创建完成后多了 Watch App和Extension两个文件。

  • 其中 Watch App 部分位于用户的Apple Watch上,它目前为止只允许包含Storyboard文件和Resources文件。在我们的项目里,这一部分不包括任何代码。
  • WatchKit Extension 部分位于用户的iPhone安装的对应App上,这里包括我们需要实现的代码逻辑和其他资源文件

                   Watch OS开发基本知识的学习_第1张图片

2. WatchOS2.0

2.1 直接创建工程,不需要先创建iOS App,如下图

                     

2.2 在创建完成的项目中可以看到,在Watch OS 2.0的项目中比1.0多了一个文件:ExtensionDelegate

  • 该文件负责Watch App的生命周期。
    • func applicationDidFinishLaunching() :项目加载时会调用
    • func applicationDidBecomeActive() :项目显示界面时会调用
    • func applicationWillResignActive() : 项目退到后台时会调用


  • 虽然WachOS2.0能够独立运行,但是一个WatchOS2.0的App仍然有一个iOS App,这是因为苹果将Watch App作为iOS App的延伸和拓展
  • 创建WatchApp之后一定要给storyboard添加一个模块,也就是我们常说的表芯,否则程序将报错:ERROR -[SPRemoteInterface _interfaceControllerClientIDForControllerID:] clientIdentifier for interfaceControllerID:395F0002 not found(说是controller的id找不到)

四.WatchOS 1.0 与iPhone交互框架

     1.一个app的构建是由两部分组成
  • 一部分是界面(UI界面的构建),而是逻辑代码的实现在WatchOS 1.0中,代码逻辑部分在WatchKit  Extension中,也即上面所说的在iPhone 安装的App上,
  •  UI界面编译尚在Watch App上   

     2.Watch App 和Watch Extension 之间的交流
  • Watch App 部分位于用户的Apple Watch上,它目前为止只允许包含Storyboard文件和Resources文件。在我们的项目里,这一部分不包括任何代码。

  • WatchKit Extension 部分位于用户的iPhone安装的对应App上,这里包括我们需要实现的代码逻辑和其他资源文件。

  • 这两个部分之间就是通过 WatchKit进行连接通讯。

    下图就是通讯的流程图


    Watch OS开发基本知识的学习_第2张图片

    3.控制器的生命周期方法

    • (1)当Watch OS加载App中的Storyboard时,iPhone端也会开始加载对应的WatchKit Extension。

    • (2)当Watch OS开始初始化我们Watch App的Storyboard中的UI时,iPhone端WatchKit Extension会生成对应的WKInterfaceController,并且响应awakeWithContext:方法。

    • (3)当Watch OS显示当前加载的UI时,WatchKit Extension中对应的WKInterfaceController响应willActivate方法。

    • (4)当用户切换页面或者停止使用时,WatchKit Extension中对应的WKInterfaceController响应didDeactivate方法。

      // 界面加载的时候 --->>调用我们可以在这里加载数据或者更新在StoryBoard中当前Controller添加的interface objects。
          override func awakeWithContext(context: AnyObject?) {
              super.awakeWithContext(context)
              
              // Configure interface objects here.
          }
          // 将要显示界面的时候调用 --->>我们可以在这里更新interface objects或者处理其他事件
          override func willActivate() {
              // This method is called when watch view controller is about to be visible to user
              super.willActivate()
          }
          //界面消失的时候调用(进入后台或者进入到其他界面) ---->>我们应该在这里清理task或者数据。在这里更新interface objects将会被系统忽略。
          override func didDeactivate() {
              // This method is called when watch view controller is no longer visible
              super.didDeactivate()
          }
          


      注意:

      *在iOS中,NSTimer是一个定时器,定时器的作用的是延迟执行一段代码。

      *在WatchOS中,Timer是一个计时器,计时器与定时器是两个完全不同的概念。

      Timer的使用如下面的代码,参考时间的正负代表的意义不同:

       // 设置一个 10s 计时
        timer.setDate(NSDate(timeIntervalSinceNow: 10))
    
       //如果相对当前时间为正数则为倒计时  如果相对当前时间为负 则为正计时   如果需要从0开始正计时则直接设为 -0
        timer.setDate(NSDate(timeIntervalSinceNow: -0))
    
        //开始计时
        timer.start()


    五.特殊控件的使用和布局

    1.语音输入控件:

    • 语音输入控件是WatchOS系统独有的控件,它不仅仅只支持语音输入,还可以设定文本选择框和一些emoji表情
    • App Watch的屏幕很小,所以没有类似Textfield的文本输入框,所有的输入文字只能通过预设或者调用siri来识别语音文字
    • 语音输入控件与其他的控件不一样,它的本身并没有Api,也不能在storyboard中找到
    • 它的调用是被直接集成在WKInterfaceController中的
     
    2.Group控件

    2.1.1 WatchApp的storyboard中控件的布局规则

    • 一行只能显示一个控件,无法将一个控件拖到另一个控件的左边或者右边。

    2.1.2 如果想让一行显示多个控件,应该怎么办?

    • 使用Group控件

    2.1.3 Group控件的作用

    • Group控件是WatchApp中独有的控件,它是一个可以放置子控件的容器。

    • 在IOS中有一个控件跟Group有一些类似,就是UIScrollerView控件。

    2.1.4 Group控件的特性

    • WatchOS系统中唯一一个可以放置控件的容器

    • 子控件也只能选择水平和竖直放置。 Group控件的Layout属性Vertical和Horizontal



    3.控件的布局

  • 在WatchOS1.0中我们无法通过代码对控件进行布局,只能在storyboard文件中设置
  • 三种布局方式: 1>Size To Fit Content
                             2>Relative to Container

                             3>Fixed

六.WatchKit框架UI总结

1.1-在WatchOS1.0中我们可以对UI控件做一些什么?

  • 设置和更新控件的属性和内容。

  • 可以动态设置外观(如字体颜色和背景图片等)。

  • 可以设置隐藏使界面重新布局。

  • 可以设置alpha让其透明

1.2-我们不能对UI控件做一些什么?

  • UI元素不能通过代码动态创建和删除。
  • UI元素不能动态改变显示次序(位置)。

1.3-在WatchOS中,alpha和Hidden属性的区别

  • setHidden:会将控件隐藏,并且界面重新布局

  • setAlpha:会将控件变成透明不可见,但是界面不会重新布局

1.4-WatchOS2.0中,布局规则的改变

  • 可以动态改变UI元素的显示次序

  • 可以给UI元素添加动画

  • 2.0中我们仍然不可以动态创建和删除控件
    • 根据本人多年开发经验推测,可能苹果考虑到手表的芯片比较小,如果频繁在编译过程中动态创建UI,会消耗内存,并且也费电,所以不支持动态创建和删除UI控件



以上知识总结适合初学者,希望能够在学习的道路上我们共同成长

你可能感兴趣的:(Watch,App)