简单的Widget

Widget就是iPhone左滑展示出来的小窗口,我理解为——自家app的又一个入口,哈哈。比如下图中的天气。

其实就觉得这个东西比较神奇好玩儿才打算试试的,但是其中,却遇到了很多的问题。接下里就系统的记录一下,如何简单的实现这个小的东西,和其中自己遇到的一些问题吧。源代码点这里

首先我是创建了一个新的工程,其次因为Widget是一个独立的进程,所以我们要再创建一个target,File —— New —— Target 然后选择Today Extension.

创建好工程之后,就可以先进行代码的编写了。但是这里有几个问题问题需要注意。

1、如果在Extension中用到了需要配置路径的第三方库,需要切换到Extension中的Target中进行配置。

2、我是用cocoapod管理第三方工具的,所以这个时候,进行第三方管理的时候,需要区分是给那个target添加第三方库。

3、当代码及库都配置好之后,就需要进行代码的运行了,这个时候为了将两个进程联系起来,就需要添加组了。两个进程一定要加到同一个组里面,并且,组要和BundleID一致。同时配置BundleID的时候,主进程是正常配置,但是Widget进程的BundleID的格式是BundleID.工程名称。这点需要注意。其实默认的格式是正确的,只要按着格式改成自己的BundleID就好,但是就怕遇到像我这种,看都不看直接改的。所以这里需要注意啊~~~

4、运行代码之前还有一个配置需要修改。直接上图,按照图修改就好。一定要改这里,否则的话是加载不出来的。

需要配置的差不多就这些了,但是这些都是很重要的,很容易造成最后显示的效果就是无法载入,这是最悲伤的了。接下来是关于Widget的一些基本信息的内容吧。

1、Widget有两种模式,一种是展开状态,一种是隐藏状态。通过代码可控制。

/*设置widget的展示模式:

NCWidgetDisplayModeExpanded 展开

NCWidgetDisplayModeCompact 隐藏

*/

self.extensionContext.widgetLargestAvailableDisplayMode = NCWidgetDisplayModeExpanded;

2、Widget的样式是可以通过更改展开模式的协议方法来进行更改的。比如高度的修改。

//隐藏展开模式改变是调用此方法

-(void)widgetActiveDisplayModeDidChange:(NCWidgetDisplayMode)activeDisplayMode withMaximumSize:(CGSize)maxSize

{

if(activeDisplayMode == NCWidgetDisplayModeCompact)

{

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

}

else

{

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

}

}

3、Widget的高度,一般来说最低是110,也就是说,当设置widget的高度时,低于110的均是110。

4、设置好模式和高度之后,就可以正常的创建Widget的页面了,但是页面不要太过复杂,通过查看资料,Widget页面能承载的最大内存是11M。

5、设置页面之后,如果与app主体有交互,首先需要页面点击事件通过以下调起URL的方式来进行反馈。这个方法其实是跟app外部通过URL来调起app是一样的道理,所以同样的也需要设置一个scheme URL,这个过后还会有说明。

6、页面代码完成之后,相应了,为了能调起app需要在AppDelegate中配置相应的代码。

7、刚说过,如果要调起app需要配置一下scheme URL,这里是要配置app主体的scheme URL。配置规则则是与之前代码中设置的URL的规则保持一致。

都配置完成之后,运行代码之后,应该就可以了。但是这个时候左滑会看不到自己的小窗口。其实是因为自己没有加入而已。只需要点击那个编辑,然后加入自己的widget就可以啦!

最近做Widget差不多遇到的就这些问题了,目前做的很简单,只是页面的展示,并没有数据的交互和刷新之类的。就以后继续补充吧。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,168评论 19 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 174,126评论 25 709
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,273评论 4 61
  • 前两天刚过了情人节,朋友圈先是一阵浪漫恩爱的图片扫荡全场,打得单身狗们好一个猝不及防,紧随其后又是一番悲伤感慨扑面...
    时间的针脚阅读 879评论 4 1
  • github地址(完整Demo下载) https://github.com/zhouxu88/BottomNavi...
    万户猴阅读 27,749评论 10 37