美文网首页iOS
iOS 10 适配 Widget

iOS 10 适配 Widget

作者: BigSecond | 来源:发表于2016-10-14 17:06 被阅读935次

    一、前言

    随着iOS版本来到10,我们开发的应用种类也越来越丰富,范围也不仅仅局限在app本身,Apple为我们提供了多项系统扩展服务,让你的app与系统层级有更多交互。

    File-New-Target

    我们今天要说的就是将你的app扩展到系统中Today的应用:TodayExtension。

    废话不多说,我们开始实现一个简单的Widget功能。

    二、实现Widget

    创建好Target Today服务后,会在XCODE中生成一个目录

    同时配置文件中也会生成新的Target,设置好标题我们就可以开始写代码了。

    当你新建了这个Target时,不会共享你原有项目的Target的组件或者第三方的插件,我刚开始也是在想玩什么我的AF居然not find。后来才反应过来是在另一个Target了,这里就好像你每创建一个项目附带产生的Tests一样。

    那现在知道我们不能用之前项目中的内容了,我们新的功能如果要用第三方又的自己新加进来使用。

    TodayViewController.m

    TodayViewController.m

    我们发现它自动代理了NCWidgetProviding协议。

    还导入了一个API:NotificationCenter,其中有很多Widget需要的API,就不一一列举了,自己可以点进去看

    我们看看它到底有哪些需要实现的:

    下图可以看到3个optional

    NCWidgetProviding协议

    - (void)widgetPerformUpdateWithCompletionHandler:(void (^)(NCUpdateResult result))completionHandler;

    大致意思是建议你通过实现它的回调来获取数据,你也可以在viewwillappear中设置你的初始数据,但是希望你在获取到新数据时能平稳的过渡到新的数据来。并且它是在主线程更新。

    - (void)widgetActiveDisplayModeDidChange:(NCWidgetDisplayMode)activeDisplayMode withMaximumSize:(CGSize)maxSize NS_AVAILABLE_IOS(10_0);

    这个代理就是很多人问的Widget折叠和收起,实现了之后就会在Widget上有“折叠”和“收起”的功能。这里要根据NCWidgetDisplayMode枚举来判断当前是处于哪个状态。

    NCWidgetDisplayMode

    if (activeDisplayMode == NCWidgetDisplayModeCompact) {

         self.preferredContentSize = CGSizeMake([UIScreen mainScreen].bounds.size.width, 100);

    } else {

         self.preferredContentSize = CGSizeMake([UIScreen mainScreen].bounds.size.width, 400);

    }

    宽度我这里用的是屏幕宽,高度自己设定。

    - (UIEdgeInsets)widgetMarginInsetsForProposedMarginInsets:(UIEdgeInsets)defaultMarginInsets;

    这个方法主要是修改Widget的MarginInset的,默认Widget的内容视图是有一定边距的,如果想要去掉要实现这个代理方法。

    介绍到这里相信你自己再开发功能就不用我来说了吧。

    要注意的是Widget中不支持键盘弹出,也不建议ScrollView的滑动。苹果也建议上面的功能不要打断正常APP功能里的业务流程。

    下面在分享几个我觉得做的好的Widget

    天猫

    什么值得买

    相关文章

      网友评论

      • 陈伯君:大神请问,不用折叠的方法,如何像天猫那样,实现自定义高度?我尝试设置preferredContentSize,但是并没有效果,不知道是xcode8.3.2的问题,还是ios10.3的问题。请问你有遇到过么?如果有,请问如何解决的?

      本文标题:iOS 10 适配 Widget

      本文链接:https://www.haomeiwen.com/subject/rmjwyttx.html