Widget的简单应用并适配iOS10
来源:互联网 发布:天伟数据恢复中心 编辑:程序博客网 时间:2024/06/06 01:03
自iOS8之后,苹果支持了扩展(Extension)的开发,开发者可以通过系统提供给我们的扩展接入点 (Extension point) 来为系统特定的服务提供某些附加的功能。今年iOS10的推出,让Widget扩展应用渐渐的火了起来,地位得到重大的提升,从这也可以看出苹果对他的重视,今天我们就来一起学习下Widget,来实现一个简单的扩展程序。
iOS Widget扩展程序
程序效果
程序效果图
创建Widget程序
创建工程,在工程中添加扩展程序
创建Widget程序
创建成功后的目录
创建成功
顺便说一句,扩展程序虽然是程序的扩展,但是这两个应用其实是“独立”的。准确的来说,它们是两个独立的进程,默认情况下互相不应该知道对方的存在。扩展需要对宿主 app (host app,即调用该扩展的 app) 的请求做出响应,当然,通过进行配置和一些手段,我们可以在扩展中访问和共享一些容器 app 的资源,这个我们稍后再说。
Widget布局方式
使用Interface Builder
工程默认的方式就是使用Interface Builder,如果实现简单的布局的话可以考虑这种方式。使用代码进行布局
当涉及到比较复杂的UI布局的时候,可以考虑使用这种布局方式,按大家平时的习惯来。这里需要注意一下,如果需要使用代码布局的话需要修改一下plist文件。
首先将原有NSExtensionMainStoryboard
字段删除,添加字段NSExtensionPrincipalClass
,value是你所写的controller的名称,一般默认的都是TodayViewController
修改plist文件
实现相应的方法
1. 设置Widget的size
iOS10之后,Widget支持展开及折叠两种展现方式,通过设置widgetLargestAvailableDisplayMode
属性可以让Widget程序实现展开布局。如下:
- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view from its nib. if (isIOS10) { self.extensionContext.widgetLargestAvailableDisplayMode = NCWidgetDisplayModeExpanded; } self.preferredContentSize = CGSizeMake(kWidgetWidth, 110); }
2. 重写切换展开及折叠布局时的方法(iOS10之后)
- (void)widgetActiveDisplayModeDidChange:(NCWidgetDisplayMode)activeDisplayMode withMaximumSize:(CGSize)maxSize { NSLog(@"maxWidth %f maxHeight %f",maxSize.width,maxSize.height); if (activeDisplayMode == NCWidgetDisplayModeCompact) { self.preferredContentSize = CGSizeMake(maxSize.width, 110); } else { self.preferredContentSize = CGSizeMake(maxSize.width, 200); } }
3. iOS10之前,视图原点默认存在一个间距,可以实现以下方法来调整视图间距注:
该方法在iOS10之后被遗弃,iOS10默认不存在间距。
- (UIEdgeInsets)widgetMarginInsetsForProposedMarginInsets:(UIEdgeInsets)defaultMarginInsets { return UIEdgeInsetsMake(0, 10, 0, 10); }
应用唤醒
本来想叫应用间跳转的,想想还是这个名字比较高大上些
- Widget的简单应用并适配iOS10
- Widget的简单应用并适配iOS10
- iOS10--CallKit的简单应用
- iOS10--CallKit的简单应用
- iOS10:CallKit的简单应用
- iOS10 CAAnimationDelegate的简单适配
- iOS10 CAAnimationDelegate 的简单适配
- ios10的适配
- 简单适配iOS10以及Xcode8
- iOS开发之iOS10简单适配
- iOS10的适配问题
- 关于iOS10的适配
- iOS10的适配(一)
- iOS10的适配(二)
- ios10的各种适配
- ios10的适配问题
- iOS10的适配总结
- iOS10的适配问题
- android根据ListView内部Item最大长度来设置ListView的宽度
- Json的简介与使用
- Java中String类型和其他数据类型之间的转换
- linux下管道破裂的处理
- Docker视频教程 之 熟悉docker-machine及docker常用命令 - 知识林
- Widget的简单应用并适配iOS10
- Mac/Win版:Adobe CC 2017 软件下载(中文/英文版)补丁破解 Adobe Creative Cloud 2017
- 6.1 java 选项 -javaagent、-agentlib、-agentpath
- 用户空间和内核空间通讯之【Netlink 上】
- 使用SpringSession时cookies跨域导致Session不一致问题的解决
- ijkplayer 编译so库过程
- 算法(第四版)——03插入排序
- Runtime Swizzling方法使用补充材料
- Android竖屏视频录制