iOS开发之widget实现

iOS14 Widget开发踩坑(四)伪透明的实现和其他研究 iOS14 Widget开发踩坑(四)伪透明的实现和其他研究前言分析实施暗黑模式切换其他问题的研究:去除小组件的名字本篇参考文献小组件参考文献总结 前言 Widgets A widget elevates key content from your app and displays it where people can see it at a glance on iPhone, iPad, and Mac. Useful and delightful, widgets can also help peo 阅读详情

前言

原文:Allence 链接:https://www.cnblogs.com/allencelee/p/widegt.html

iOS extension的出现,方便了用户查看应用的服务,比如用户可以在Today的widgets中查看应用的简略信息,然后点击进入相关的应用界面。
暂且不表网络上现有的widget文章,本篇文章主要说明本人具体实现widget的步骤,希望能够帮助到需要实现widget的同行朋友。

image

文章将依次从以下几个问题着手,进行详细说明:
1、如何为现有的工程添加widget;
2、如何绘制UI;
3、如何调起app;
4、如何与host app共享数据。

添加Today Extension

image

如图,为现有的工程添加Today Extension,命名这里不赘述了,大家都懂的。

image

这是添加Today Extension之后的工程目录。
    到这里,为现有的工程添加Today Extension算是完成了,运行程序就可以看到类似图1的简单的效果了,很简单哈。

绘制UI

与网上发表文章的童鞋们一样,我也是个代码控(装B一下),习惯用纯代码来绘制Today的UI。

image

这里,删除默认创建的MainInterface.storyboard,并按图4所示修改Info.plist文件。(当然,习惯使用storyboard的童鞋可以略过,直接操作storyboard即可)

首先,设置widget展示视图的大小。关于widget的背景色,以及具体展示的内容大家按需绘制,这里暂且不表。

运行程序后,会发现一个问题:绘制的内容与左侧边界有一定距离(约30px)。如何解决这个问题呢,如图6所示,TodayViewController遵守的NCWidgetProviding协议给出了解决方案。

调起app

因为extension和containing app是两个完全独立的进程,所以它们之间不能直接通信(不能像应用内部点击按钮,跳转到指定页面)。为了实现widget调起app,这里通过openURL的方式来启动containing app。

- (void)openURLContainingAPP{ 
//通过extensionContext借助host app调起app
 [self.extensionContext openURL:[NSURL URLWithString:@"appextension://xxx"] 
completionHandler:^(BOOL success) { NSLog(@"open url result:%d",success); }]; 
}

数据共享

通过App Groups提供的同一group内app共同读写区域,可以用NSUserDefaults和NSFileManager两种方式实现extension和containing app之间的数据共享。

1 通过NSUserDefaults共享数据
保存数据 - 
(void)saveDataByNSUserDefaults{ NSUserDefaults *shared = [[NSUserDefaults alloc]
 initWithSuiteName:@"group.c om.xxx"]; [shared setObject:@"asdfasdf" forKey:@"widget"]; 
[shared synchronize]; 
}
读取数据 -
 (NSString *)readDataFromNSUserDefaults{ NSUserDefaults *shared = [[NSUserDefaults alloc] 
initWithSuiteName:@"group.c om.xxx"]; NSString *value = [shared valueForKey:@"widget"]; 
return value;
 }
2 通过NSFileManager共享数据
保存数据 
- (BOOL)saveDataByNSFileManager{ NSError *err = nil; NSURL *containerURL = [[NSFileManager 
defaultManager] containerURLForSecuri tyApplicationGroupIdentifier:@"group.com.xxx"]; 
containerURL = [containerURL URLByAppendingPathComponent:@"Library/Caches/ widget"]; 
NSString *value = @"asdfasdfasf"; BOOL result = [value writeToURL:containerURL
atomically:YES encoding:NSUTF8StringEncoding error:&err]; if (!result) { NSLog(@"%@",err); } 
else { NSLog(@"save value:%@ success.",value); } return result; 

}
读取数据 
-(NSString *)readDataByNSFileManager{ NSError *err = nil; NSURL *containerURL =
 [[NSFileManager defaultManager] containerURLForSecuri 
tyApplicationGroupIdentifier:@"group.com.xxx"]; containerURL = [containerURL 
URLByAppendingPathComponent:@"Library/Caches/ widget"]; NSString *value = [NSString 
stringWithContentsOfURL:containerURL encoding: NSUTF8StringEncoding error:&err]; return
 value; 
}
iOS14 Widget开发踩坑(一)修正版-初识与刷新 iOS14 Widget开发踩坑(一)前言开发须知准备工作部署环境创建项目引入Widget Extension开始编写认识代码struct MainWidget_Previews: PreviewProvider {}struct PlaceholderViewstruct SimpleEntrystruct MainWidgetEntryView@main struct TestMainWidget: Widget{}struct Provider第一个坑参考文献 前言 最近项目要求想适配iOS14 的小 阅读详情

相关推荐

408计算机复试专业课问答汇总

408计算机复试专业课问答汇总

weixin_45930223的博客 3698

创建 iOS 小组件(Widget)

实际开发中,需要根据需求进一步自定义和优化小组件的功能和外观。

it_15077647703的博客 3268

手把手教你用ET-BERT预训练模型搞定加密流量分类(附完整代码)

本文详细介绍了如何使用ET-BERT预训练模型实现加密流量分类,包括环境配置、数据预处理、模型微调及优化策略。通过实战代码示例,帮助开发者快速掌握这一技术,提升网络安全领域的加密流量分析能力。

weixin_29166013的博客 493

关于iOS Widget(Locket Widget App)

最近一款UI风格很像Clubhouse的App,功能简单到不能再简单的Locket app火了,其主要功能就是通过桌面Widget显示一张朋友分享的照片,死气沉沉的互联网上终于出现了一点新东西。其实widget的概念自从ios8(2014年)开始就已经有了,但是从Widget出现到现在,一直没有得到很多人的关注,所以什么是Widget?Widget能实现哪些功能呢? 什么是widget 一句话描述:widget就是App可以在主屏幕上显示一个功能简单的小插件。 ...

zcsoft 4863

Ubuntu 22.04 搭建 PX4 飞控系统完全指南:从仿真到硬件试飞

定义消息文件protobufuint64 timestamp # 时间戳float32 temperature # 温度float32 humidity # 湿度生成代码:bashPX4 在 Ubuntu 22.04 的搭建涉及环境配置、编译仿真、硬件连接等多环节,核心是理解 PX4 1.14 的新特性(uXRCE-DDS、动态控制分配)。通过本文指南,开发者可快速构建稳定的 PX4 开发环境,为无人机应用开发奠定基础。

zqmgx13291的博客 3039

从Gitee上部署视觉工程到Linux虚拟机

(使用SVM来识别装甲板的编号,此处手机上的图片中只有灯条没有数字,SVM无法识别出编号。这两行代码的意义是,当SVM识别不出或者识别不到编号时,把装甲板的编号默认为2号。找到自瞄程序中,数字识别类下的这两行代码,把注释去掉。这样,每次打开新的终端时,环境变量都会自动设置。(2)查看虚拟机设置选项,检查虚拟机USB接口是否为3.0及以上的接口。如果不是,要更改好。这样,每次打开新的终端时,环境变量都会自动设置。后,每次打开终端时自动设置这些环境变量,你可以将。打开第一个终端,用来挂ROS的内核启动页面。

2301_81035291的博客 1520

iOS 小组件 widget

iOS 小组件 widget

u013712343的博客 843

自然语言处理6 -- 情感分析

1 概述 情感分析是自然语言处理中常见的场景,比如淘宝商品评价,饿了么外卖评价等,对于指导产品更新迭代具有关键性作用。通过情感分析,可以挖掘产品在各个维度的优劣,从而明确如何改进产品。比如对外卖评价,可以分析菜品口味、送达时间、送餐态度、菜品丰富度等多个维度的用户情感指数,从而从各个维度上改进外卖服务。 情感分析可以采用基于情感词典的传统方法,也可以采用基于深度学习的方法,下面详细讲解 ...

谢杨易的博客 5万+

Widget Extension

基础WIdget Extension

s762395的博客 1036

硬件工程师提前批真题及答案解析2

我们需要考虑题目可能的简化假设,即输入电阻 Ri​ 可能是 rbe​ 和 βre​ 的组合,但题目可能简化为: Ri​≈rbe​+βre​。由于锗管的正向导通电压较小(0.2 V~0.3 V),而硅管的正向导通电压较大(0.6 V~0.7 V),因此-4.7 V的电压差不符合硅管的特性,而更接近锗管的特性。在三极管电路中,静态电位是指在无信号输入时,三极管各电极的直流电压。re​ 是动态发射极电阻,通常可以近似为 re​=IE​VT​​,但在题目中已经给出了 re​=300Ω,因此可以直接使用这个值。

XU157303764的博客 778

Python爬虫实战:微信小程序内容采集的全面指南

在移动互联网时代,微信小程序已成为企业和个人提供服务的重要渠道。小程序中包含了大量有价值的信息,但微信官方并未提供便捷的数据获取接口。本文将详细介绍如何使用Python爬虫技术采集微信小程序内容,包括最新技术方案、完整代码实现以及应对各种反爬机制的策略。小程序运行在微信封闭环境中,无法直接访问数据通信主要通过HTTPS加密传输内容动态加载,依赖JavaScript渲染微信有严格的反爬机制。

2201_76125261的博客 3117

Apple Widget:下一个顶级流量入口?

Widget 的出现,让 iOS 系统的桌面有了破局,一定会有很多产品都期待借助 Widget 来丰富自己产品的内容表达。但是,Widget 设计的初衷是简单明了的在恰当的时机展示一些带有个性化定制的内容,为了不让主屏幕的整体使用体验变得复杂,Widget 从技术上就做的很克制,限制了很多很多的能力。因此我认为Widget 不会成为下一个互联网公司竞争的流量入口,它会成为 App 提高用户体验的利器。

2401_86367029的博客 1258

天地图下载带审图号(审图号: GS(2024)0650号)的 “行政区划” 数据(含shp文件下载地址)

在科研投稿论文过程中,多数期刊杂志要求我们制作涉及国界的图件,必须使用自然资源部地图技术审查中心发布的标准地图底图。如地理学报、地理科学等期刊的投稿指南中写到:非标准底图本刊不予发表!(如图1.1所示)如果一定要用,凡涉国界图件(国内部分地区、全国、世界部分地区、全球)必须使用自然资源部标准地图服务系统标准地图底图(http://bzdt.ch.mnr.gov.cn/)(如图1.1所示)或国家测绘局地理信息局标准地图底图(如图1.2所示),所用底图边界要完全无修改(包括南海诸岛位置)。

JData_Engineer的博客 2303

ios 开发之widget实现

前言     iOS extension的出现,方便了用户查看应用的服务,比如用户可以在Today的widgets中查看应用的简略信息,然后点击进入相关的应用界面。 暂且不表网络上现有的widget文章,本篇文章主要说明本人具体实现widget的步骤,希望能够帮助到需要实现widget的同行朋友。 图1 Today的widget展示----以支付宝为例说明 文章将依

xiaqinnnn的博客 475

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

ios 10 开发-widget实现

前言     iOS extension的出现,方便了用户查看应用的服务,比如用户可以在Today的widgets中查看应用的简略信息,然后点击进入相关的应用界面。 暂且不表网络上现有的widget文章,本篇文章主要说明本人具体实现widget的步骤,希望能够帮助到需要实现widget的同行朋友。 图1 Today的widget展示----以支付宝为例说明 文章将依次从以下

zzzzzdddddxxxxx的专栏 6695

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

iOS Widget 开发-9:可配置 Widget:使用 IntentConfiguration 实现参数选择

iOS Widget 支持通过“参数化”配置内容,让用户在添加 Widget 时根据个人偏好选择展示内容。这一功能通过 IntentConfiguration 实现,是打造个性化、可复用小组件的关键。本篇将详细介绍如何创建 Intent 类型、绑定到 Widget 上,以及在 WidgetProvider 中读取用户配置,完成从 UI 到数据的个性化支持。

郭永明的技术专栏 1721

iOS Widget开发

讲述之前首先看下demo效果图: 基本的展开收起、本App本体交互 然后再展示几个效果不错的 Widget app 毒物 && Keep ESPN PCalc Musixmatch Fantastical 2 Carrot Weather demo 地址在此!欢迎star 比心 一、Wid

星宇大前端 1803

iOS开发-widget基础

Xcode默认创建MainInterface.storyboard来构建UI

xiaoxiaoniu111的博客 534

ios8新特性widget开发

ios8发布已经有一段时间了,伴随着ios8同时也出现了许多新的特性,ios系统将会越来越开放,这是好事。其中一个新特性就是在下拉通知栏里加入了个性的widget,开发者可以自己定义widget的样式内容。当然这个功能在Android上早就实现了,^_^.........,如下图: 首先先说几个概念, 1、app extension:extension是iOS8新开放的一种对几个固定系

wangdaren的专栏 2万+

iOS开发------Widget(Today Extension)插件化开发

iOS10.0发布啦(貌似过去有点时间了吧 - -),在宏观带给我们使用体验的提升之外,更多的是带给iOS开发者一定的欣喜。 因为我们又要学习新东西来适配10啦。 博文所说的Widget并不是iOS10系统新推出的功能模块(其实在iOS8上就已经出现啦,只不过楼主在iOS10发布之后才算真正的了解它,实在是惭愧呀),之前仅仅是存在于通知那一栏中,至于多隐蔽我就不说了吧。但在系统10之下,它

RITL_Y 1万+

从0到1思考与实现iOS-Widget

来自:http://www.jianshu.com/p/1a3bd243f77c 讲述之前首先看下demo效果图: 基本的展开收起、本App本体交互 然后再展示几个效果不错的 Widget app 毒物 && Keep ESPN PCalc Musixmatch Fantastical 2 Carrot Weather demo 地址在此

iOS_开发 329

qt的mainwindow里的widget怎么调用_iOS14 Widget小组件开发实践2——自定义Widget

iOS14 Widget小组件开发实践2——自定义Widget今天要来自定义一个展示诗词的小组件Widget,它显示的内容包括:诗词名字、作者、前两句(为什么只显示前两句呢,因为我找的免费API它只有给前两句?)。切入正题,接下里开始实现,还不了解Widget的同学可以先看看这里iOS14 Widget小组件开发实践11、新建一个Widget Extension,命名PoetryWidg...

weixin_39806603的博客 614
上一篇: flutter中的状态管理Provider
下一篇: 2020年了,跨平台开发框架现在怎样了?
在iOS写bug的杰克
博客等级 码龄6年 6粉丝 18原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值