首页 > 其他分享 >Apple Watch 开发知识

Apple Watch 开发知识

时间:2023-02-11 08:55:05浏览次数:60  
标签:Apple App 知识 Watch 设置 WatchKit SB 屏幕

热烈欢迎,请直接点击!!!

进入博主App Store主页,下载使用各个作品!!!

注:博主将坚持每月上线一个新app!!!

Apple Watch现在对于第三方开发者来说更多的还是一块额外的屏幕。暂时WatchKit没有能给出足够的接口。现在Watch App的主要运算逻辑需要依赖iPhone,Apple也承诺会有原生的手表App,可能要等到Apple Watch和WatchKit的完全版面世的时候。

1、两种屏幕分辨率

屏幕尺寸 38mm 42mm
分辨率 272 x 340 312 x 390
宽高比 4:5 4:5

2、三种屏幕模式

主屏模式 Glance模式 通知模式
主界面 单屏即时信息页面 消息通知界面
可自定义布局,放置button等控件 所有信息必须在一屏内展示,不能有交互控件,点击进入Watch应用 有通知的时候唤起,可添加合适的按钮

3、两种通知显示方式

  • 两种显示模式
Short Look Long Look
查看屏幕上包含应用图标、名称、简单通知内容等信息 应用图标和名称将会移至屏幕顶端,内容占据主要的显示空间,佩戴者可以滑动来完成其它交互
  • 两种载入模式
static dynamic
直接载入 初始化interfaceController后载入

4、手势

只支持以下手势,不支持自定义手势

手势 行为
纵向滑动 浏览内容
横向滑动 页面间切换
点按 选择内容
长按挤压 打开菜单
数字表冠 旋转,调整滚动速度
屏幕边缘向左扫 返回上一个界面
屏幕底部向上滑 打开Glance界面

5、 Watch App 架构

  • 一个完成的Watch应用由 WatchKit App 和 WatchKit Extension两部分组成,WatchKit App负责展示,安装在Watch上,WatchKit Extension负责业务和控制逻辑,安装在iPhone上。所有运算、逻辑以及控制都是在iPhone上完成。通过WatchKit通讯
    图片名称

  • Watch App 控制流
    图片名称

  • ViewController 生命周期
    图片名称

6 、基础类

  • WKInterfaceController 相当于UIViewController 。生命周期方法分别是:

-initWithContext: 被初始化时调用,一般在这里配置视图元素,相当于-viewDidLoad
-willActivate 将要呈现的时候调用,也可以在这个方法中进行视图元素的设置,相当于-viewWillAppear
-didDeactivate 呈现后调用,在这个方法中停用持有self的对象,如NSTimer。相当于-viewDidDisappear

  • WKInterfaceObject 及其子类

WKInterfaceObject 相当于UIView的代理,WatchKit实际呈现的View对于开发者来说是不可见的,只能通过WKInterfaceObject对UI对象属性进行设置,可以设置的属性非常少。学习成本并不大。
WKInterfaceButton 相当于UIButton的代理
WKInterfaceImage 相当于UIImageView的代理

WatchKit独立于UIKit,所有的类都继承自NSObject,没有完整的Response chain

7、UI开发

  • Watch App 的视图开发不能使用代码,必须StoryBoard

  • Watch App 采取的布局方式和 iOS App完全不同。不能使用 autoLayout或者坐标。只能使用相对布局。

水平:left center right
垂直:top center bottom

  • View Size可以使用三种方式设置:

Size To Fit Content : View的大小适应内容的大小

Relative To Container : 相对容器设置自身大小

Fixed :设置固定的宽高

  • WKInterfaceGroup 布局容器
    貌似其他的WKInterfaceObject子类对象都不能重叠,只有这个类可以同其他的WKInterfaceObject对象重叠布局。相当于Android的layout布局控件。

  • WKInterfaceTable 列表视图

相对于UITableView,不需要设置delegate和dataSource。在初始化的时候直接设置行数和样式。

通过-setNumberOfRows:withRowType:

通过-rowControllerAtIndex:枚举每个行进行设定。

通过rowController设置cell样式,相当于UITableViewCell。rowController继承自NSObject,这点同其他WK组件不同。显示逻辑需要在SB中设置,并绑定。细节看代码

-(void)table:(WKInterfaceTable *)table didSelectRowAtIndex:(NSInteger)rowIndex 实现这个方法接受table的点击回调,不需要也无法设置delegate。

  • Menu 视图

在SB中加入Context Menu,长按屏幕呼出。

可以通过SB或者代码的方式设置Menu Item。上下文环境调用以下方法添加:

-addMenuItemWithItemIcon:title:action:
-addMenuItemWithImageNamed:title:action:
-addMenuItemWithImage:title:action:
-clearAllMenuItems

除了用SB设置和以上方法外,无法获取WKInterfaceMenu和WKInterfaceMenuItem的实例或者代理。

  • WKInterfaceImage

相当于UIImageView

-setImageNamed: 获取Watch App的图片,注意这个图片必须存储在Watch App,手表自己的bundle里。Extension中的图片用这个方法是无法显示的。

-setImage: -setImageData: 从Extension中获取图片,通过蓝牙传送到手表。

可以通过WKInterfaceDevice 的 -addCachedImage:name: 方法将Extension中获取的图片缓存到手表中。每个 app 的 cache 的尺寸大约是 20M,超过的话 WatchKit 将会从最老的数据开始删除,以腾出空间存储新的数据。

8、导航开发

  • 栈导航方式,类似UINavigationController。触碰左上角可返回

-pushControllerWIthName:context: 第一个参数是Controller对应的Identifier字符串,在SB中设置。可通过content传递数据。

-popController

-popToRootController

  • modal方式。行为基本同UIKit一样,不同的是触碰左上角可返回

-presentControllerWithName:context:

-dismissController

  • 分页导航。类似UIPageController。左右滑动切换

-presentControllerWithNames:contexts: 传入 names 和 contexts数组,通过这种方式被呼出的 Controller 将以 page 导航方式呈现。

所有的导航方式都可以通过代码或者SB的方式实现。

9、其他

  • 不能执行需要权限的任务,例如在watch中请求位置权限
  • 不要在watch中进行后台任务
  • 不要在watch中执行复杂逻辑、耗时任务
  • watch中无法播放视频
  • cache尺寸只有20M
  • 传感器API未开放
  • 动画API未开放,用一组帧图片代替

10、 Demo

标签:Apple,App,知识,Watch,设置,WatchKit,SB,屏幕
From: https://www.cnblogs.com/strengthen/p/17110851.html

相关文章

  • 【冷知识】气冲牛斗 还是 气冲斗牛
    在初中时期我们可能学过一篇课文《最后一次讲演》中学过气冲斗牛这个说法,但是课本出错也是经常的事。实际上呢,两个写法都对,牛斗和斗牛都是指的两个星辰,牛郎星和南斗七星,所......
  • php相关知识——查看密码文件
    php相关知识——查看密码文件 例子:http://test.com/test.php?page=../../../../etc/passwd因为test.php一般是在/var/www/html下的,所以后面有4个../如果需要绕过则在......
  • JSP_基本知识
    简而言之,把tomcat服务器会自动把jsp文件转译为servlet类。   一、简介服务器响应客户端,大部分时候是响应一个html页面。而在Servlet中使用io流编写html代码,很麻......
  • Java基础知识(关系运算符/比较运算符、逻辑运算符)
    一:关系运算符符号说明==a==b,判断a和b的值是否相等,成立为true,不成立为false。!=a!=b,判断a和b的值是否相等,成立为true,不成立为false。>a>b,判断a是否大于b,成立为true,不成立f......
  • 001:C++基础知识
    1:***C++是一种高级语言,C++进一步扩充和完善了C语言,是一种面向对象的程序设计语言。  C++可运行于多种平台上,如Windows、MAC操作系统以及UNIX的各种版本。......
  • Java基础知识(自增自减运算符、赋值运算符)
    一:自增自减运算符1.基本用法作用符号说明加++变量的值加1减--变量的值减1注意:++和--既可以放在变量的前边,也可以放在变量的后边。1.单独使用:++和--无论是放在变量的前边还是......
  • Python-知识点2 类型转换
    数据类型转换字符串-->整型(带小数点时将报错)语法:int(变量名)浮点型-->整型(去掉小数部分)语法:int(变量名)字符串-->浮点型语法:float(变量名)整型-->浮点型......
  • 动态代理的相关知识点
    总所周知,两种通用代理:jdk动态代理、cglib代理jdk动态代理(java.lang.reflect.Proxyjava.lang.reflect.InvocationHandler)需要注意,jdk自带的代理只能为接口创建代理......
  • C语言-基础知识
     1:*C语言是一种通用的、面向过程式的计算机程序设计语言。    C语言是一种通用的高级语言。    最新的C语言标准是C18.  2:**预处理器指令 ......
  • 297个机器学习彩图知识点(10)
    导读本系列将持续更新20个机器学习的知识点。1.深度学习的动机2.多元逻辑回归3.自然对数4.神经元5.没有免费的午餐6.噪声修正线性单元7.非参数方法......