2016-02-26 11:11:13 Coding_Niu 阅读数 1742

众所周知,苹果公司每年9月份都会发布一款新的iPhone设备,而每代的iPhone都会在硬件和技术上有所升级。

随着iPhone6S、iPhone6SPlus 的发布,一项新的技术也出现在世人的视野中,是的,就是3DTouch功能。一直想分享这个新功能给大家,但是带班就忙起来了,现在利用空余时间整理一下。

但是也有一个缺陷,3DTouch的只能在6S,6SPlus以及以后的产品中使用。

更多关于3DTouch的功能,大家可以去网上找找文字资料,我就不在这过多赘述了,咱们直接上代码。

大家按照这个步骤将代码添加到自己的工程中

第一步:为桌面应用图标添加3DTouch功能,在AppDelegate.m文件的-(BOOL)application:(UIApplication )application didFinishLaunchingWithOptions:(NSDictionary )launchOptions 方法中添加以下代码:

// 创建一个应用程序快捷方式项
    UIMutableApplicationShortcutItem *itemOne = [[UIMutableApplicationShortcutItem alloc] initWithType:@"111" localizedTitle:@"拍照"];
    UIApplicationShortcutIcon *iconOne = [UIApplicationShortcutIcon iconWithType:UIApplicationShortcutIconTypeCapturePhoto];
    itemOne.icon = iconOne;

    // 创建跳转到相册的快捷方式
    UIApplicationShortcutIcon *iconTwo = [UIApplicationShortcutIcon iconWithTemplateImageName:@"test"];// 此处显示不了彩色图片,只能是黑色镂空的图片
    UIMutableApplicationShortcutItem *itemTwo = [[UIMutableApplicationShortcutItem alloc] initWithType:@"222" localizedTitle:@"相册" localizedSubtitle:@"这是一个子标题" icon:iconTwo userInfo:nil];

    application.shortcutItems = @[itemOne,itemTwo];

第二步:还需在AppDelegate.m中实现一个委托方法

{
    // 在此方法中完成点击后具体的操作
    UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];
    imagePicker.editing = YES;

    // 此处没有判断相机是否可用,因为3DTouch只能真机调试,真机肯定能用
    if ([shortcutItem.type isEqualToString:@"111"])
    {
        imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera;
        [self.window.rootViewController presentViewController:imagePicker animated:YES completion:nil];
    }
    else
    {
        imagePicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
        [self.window.rootViewController presentViewController:imagePicker animated:YES completion:nil];
    }
}
  • 完成上面两步之后就可以通过3DTouch功能进入到App的对应页面中

3DTouch还可以对二级页面进行预览,那怎么实现的呢?我在这举个简单例子,比如我现在可以通过点击一个button跳转到二级页面,那么就可以绑定此功能,也就是咱们接下来要做的第三步

第三步:在当面ViewController中创建一个button
@property (strong, nonatomic) IBOutlet UIButton *button;
并且一定要在ViewDidLoad方法中注册回调

// 注册回调
    [self registerForPreviewingWithDelegate:self sourceView:self.button];

第四步:遵循协议UIViewControllerPreviewingDelegate 然后去实现两个协议方法

#pragma mark UIViewControllerPreviewingDelegate Method
// 预览的视图
- (UIViewController *)previewingContext:(id<UIViewControllerPreviewing>)previewingContext viewControllerForLocation:(CGPoint)location
{
    // 通过storyboard获取当前的VC
    UIViewController *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"erjiVC"];
    return vc;
}

// 继续用力按可推进二级界面
- (void)previewingContext:(id<UIViewControllerPreviewing>)previewingContext commitViewController:(UIViewController *)viewControllerToCommit
{
    [self showViewController:viewControllerToCommit sender:self];
}
  • 做完了上面几步后,基本的功能就已经完成啦,那其实3DTouch还可以稍微复杂那么一点点的,还可以在进入二级页面之前有其他的操作,比如说:

第五步:在要进入的二级页面直接实现一个委托方法

// 返回预览下面的快捷方式
- (NSArray<id<UIPreviewActionItem>> *)previewActionItems
{
    UIPreviewAction *action1 = [UIPreviewAction actionWithTitle:@"分享" style:UIPreviewActionStyleDefault handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) {
        NSLog(@"点击了分享按钮!");
    }];
    UIPreviewAction *action2 = [UIPreviewAction actionWithTitle:@"收藏" style:UIPreviewActionStyleDestructive handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) {
        NSLog(@"点击了收藏按钮!");
    }];
    NSArray *actions = @[action1,action2];
    return actions;
}

好啦,恭喜您,一个小的demo已经可以去测试了,但是注意3DTouch功能在模拟器上不能测试,所以骚年快去连接手机吧~

那关于代码我也已经上传到coding了,如果需要请点击下载代码

下载代码

2018-01-14 13:35:47 qq_18683985 阅读数 956
	苹果是在iphone6s开始加入的3DTouch功能.也就是说是ios9开始加入的3DTouch.3DTouch也就是根据你手按压的力度大小来触发的.


	3DTouch具体有两种表现形式.第一种是在Launch页面,也就是在苹果的桌面上.就算我们不做关于3DTouch的任何集成.在上线的项目中(注:一定是上线的项目,Debug之类的是没有任何显示的)也有一个关于分享的3DTouch按钮

这里写图片描述

	这个就是苹果系统给我们弄上去的.那么如果我们想加一个自己的应该怎么弄呢.

###桌面的3DTouch
对于桌面版的3DTouch.也是两种方式.
1.使用plist文件,这个其实有点恶心,那个键值对其实在plist里面查找不到.我们需要手动添加以下的字段.

UIApplicationShortcutItems(NSArray),这个其实也可以猜出来.毕竟是Items.

	array的每一个元素都是以NSDictionry形式存在的,因为每一个小cell都有不同的标题,副标题,图片嘛.
	UIApplicationShortcutItemType: 快捷可选项的特定字符串(必填)
键值 作用
UIApplicationShortcutItemTitle 快捷可选项的标题(必填)
UIApplicationShortcutItemSubtitle 快捷可选项的子标题(可选)
UIApplicationShortcutItemIconType 快捷可选项的图标(可选)
UIApplicationShortcutItemIconFile 快捷可选项的自定义图标(可选)
UIApplicationShortcutItemUserInfo 快捷可选项的附加信息(可选)
当你点击桌面的shortcutItem之后,系统会调用
- (void)application:(UIApplication *)application performActionForShortcutItem:(UIApplicationShortcutItem *)shortcutItem completionHandler:(void (^)(BOOL))completionHandler {
    if ([shortcutItem.type isEqualToString:@"xxx"]) {//因为我们注册Item的时候就使用了不同的Type,我们可以判断shortcutItem的type来做不同的事情.如果不写代码默认是跳转进入APP

    }
}
	我来简单的描述一下跳转逻辑,对于3DTouch这种特殊的需要在APP界面外调用的功能来说.调试的时候就需要开放一下想象力.
	这样来思考一下,当你把QQ杀死之后.重新进入QQ.走的是applicationdidfinshlaunch.这个我们是知道的.纯代码设置window的rootviewcontroller也是在这个方法里面设置的,这个我们也是知道的.如果我们没有设置rootviewcontroller的话,程序就不会有主界面.就是一黑色的window(我一般喜欢把window设置成白色的).如果我们把QQ杀死,使用的是QQ的3DTouch进入比如扫一扫.就会进入相应的页面.如果没有走finishLaunch的话界面都没有那是如何在里面能正常返回的.

小Tips:如果我们直接运行APP.然后,回退到桌面再在桌面使用3DTouch(不退出APP).那么我们调用相应方法的时候看起来是首先走的3DTouch的响应方法performActionForShortcutItem然后didfinishlaunch没走.如果我们把程序杀死,就不能看到调试信息.其实我们可以在command + R的同时一直按home键.让App不会起来.这个时候就不会去调用didfinishlaunch.这是看到的调用顺序基本上可以说是准确的.

	根据小Tips里面的方法,我们可以得出,在不进入程序的情况下,第一次使用桌面的3DTouch功能.首先调用的是`didfinishLaunch`,然后才是3DTouch的响应方法.后面的话因为已经lauch了就只会直接调用3DTouch的响应方法了.
	//创建UIApplicationShortcutItem
	UIApplicationShortcutItem *applicationShortcutItemItem1 = [[UIApplicationShortcutItem alloc] initWithType:@"Message" localizedTitle:@"消息" localizedSubtitle:nil icon:[UIApplicationShortcutIcon iconWithType:UIApplicationShortcutIconTypeMessage] userInfo:nil];
	UIApplicationShortcutItem *applicationShortcutItemItem2 = [[UIApplicationShortcutItem alloc] initWithType:@"hehe" localizedTitle:@"呵呵" localizedSubtitle:nil icon:[UIApplicationShortcutIcon iconWithType:UIApplicationShortcutIconTypeMessage] userInfo:nil];
	//把item1和item2添加到系统的item属性里面
    application.shortcutItems = @[applicationShortcutItemItem1 ,applicationShortcutItemItem2];	
	其实.桌面呼出的3DTouch工具栏(个人喜欢这么称呼)会根据位置不同而排列不同.比如,如果应用Icon在左上方
	那么.Item的排列方向是,先添加进去的排在上面.图标会在左边.其实也就是说,先添加进去的会离手点击的Icon近.图标的排列就是应用Icon在哪边屏幕(左右).图标就在哪边.

###应用内的3DTouch

1.需要在当前.能够使用3DTouch的控制器里面遵循UIViewControllerPreviewingDelegate
2.然后注册一下代理[self registerForPreviewingWithDelegate:self sourceView:self.view];
3.使用代理的两个方法

	// If you return nil, a preview presentation will not be performed
	- (nullable UIViewController *)previewingContext:(id <UIViewControllerPreviewing>)previewingContext viewControllerForLocation:(CGPoint)location NS_AVAILABLE_IOS(9_0);
	- (void)previewingContext:(id <UIViewControllerPreviewing>)previewingContext commitViewController:(UIViewController *)viewControllerToCommit NS_AVAILABLE_IOS(9_0);

第一个是peek状态的代理方法,第二个是pop状态的代理方法.
peek英文的意思是一瞥.
peek
第二个代理方法是pop页面也就是说直接用力按进去的样子.


- (UIViewController *)previewingContext:(id<UIViewControllerPreviewing>)previewingContext viewControllerForLocation:(CGPoint)location {
//    previewingContext.sourceRect = self.view.frame;
    //peek从哪里出来.比如用的是self.button.frame就是从button上面抛出来.
    previewingContext.sourceRect = self.button.frame;
    ViewControllerDetail *VCDetail = [[ViewControllerDetail alloc] init];
    return VCDetail;
}

对比与QQ比如按一个聊天cell往上拉之后的删除的几个类似于AlertControl的东西又是怎么做的呢

- (NSArray<id<UIPreviewActionItem>> *)previewActionItems {
    //
    UIPreviewAction *action1 = [UIPreviewAction actionWithTitle:@"进入" style:UIPreviewActionStyleDefault handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) {
    }];
    //
    UIPreviewAction *action2 = [UIPreviewAction actionWithTitle:@"取消" style:UIPreviewActionStyleDefault handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) {

    }];
    NSArray *actions = @[action1,action2];
    return actions;
}

是不是和AlertControl很像.3DTouch我就讲到这里.附上一个Demo: 3DTouchDemo

2019-01-25 16:54:28 u011018979 阅读数 686

前言

  • 用代码创建应用图标上的3D touch快捷选项
  • info.plist 配置

I 、通过plist文件静态设置

UIApplicationShortcutItemUserInfo信息  
UIApplicationShortcutItemIconFile图标名称  
UIApplicationShortcutItemIconType图标类型  
UIApplicationShortcutItemTitle标题  
UIApplicationShortcutItemSubTitle副标题  

code

	<key>UIApplicationShortcutItems</key>
	<array>
		<dict>
			<key>UIApplicationShortcutItemIconType</key>
			<string>UIApplicationShortcutIconTypeSearch</string>
			<key>UIApplicationShortcutItemTitle</key>
			<string>View Resume</string>
			<key>UIApplicationShortcutItemType</key>
			<string>$(PRODUCT_BUNDLE_IDENTIFIER).ViewResume</string>
		</dict>
		<dict>
			<key>UIApplicationShortcutItemIconType</key>
			<string>UIApplicationShortcutIconTypeSearch</string>
			<key>UIApplicationShortcutItemTitle</key>
			<string>View Facebook</string>
			<key>UIApplicationShortcutItemType</key>
			<string>$(PRODUCT_BUNDLE_IDENTIFIER).ViewFacebook</string>
		</dict>
		<dict>
			<key>UIApplicationShortcutItemIconType</key>
			<string>UIApplicationShortcutIconTypeSearch</string>
			<key>UIApplicationShortcutItemTitle</key>
			<string>View LinkedIn</string>
			<key>UIApplicationShortcutItemType</key>
			<string>$(PRODUCT_BUNDLE_IDENTIFIER).ViewLinkedIn</string>
		</dict>
		<dict>
			<key>UIApplicationShortcutItemIconType</key>
			<string>UIApplicationShortcutIconTypeSearch</string>
			<key>UIApplicationShortcutItemTitle</key>
			<string>View iOS Development</string>
			<key>UIApplicationShortcutItemType</key>
			<string>$(PRODUCT_BUNDLE_IDENTIFIER).ViewiOS</string>
		</dict>
	</array>

II、通过代码动态创建( application.shortcutItems)

 application.shortcutItems = @[cameraItem,shareItem]; 
// 使用系统提供的图标
+ (instancetype)iconWithType:(UIApplicationShortcutIconType)type;

code

系统图标
UIApplicationShortcutIcon *searchShortcutIcon = [UIApplicationShortcutIcon iconWithType:UIApplicationShortcutIconTypeSearch];
UIApplicationShortcutItem *searchShortcutItem = [[UIApplicationShortcutItem alloc] initWithType:@"search" localizedTitle:@"搜索" localizedSubtitle:@"搜索副标题" icon:searchShortcutIcon userInfo:nil];
// 自定义图标
UIApplicationShortcutIcon *attentionShortcutIcon = [UIApplicationShortcutIcon iconWithTemplateImageName:@"attention"];
UIApplicationShortcutItem *attentionShortcutItem = [[UIApplicationShortcutItem alloc] initWithType:@"attention" localizedTitle:@"关注" localizedSubtitle:@"关注副标题" icon:attentionShortcutIcon userInfo:nil];
// 系统低于9.0是没有这个属性的
if ([[UIApplication sharedApplication] respondsToSelector:@selector(shortcutItems)]) {
    [UIApplication sharedApplication].shortcutItems = @[searchShortcutItem, attentionShortcutItem];
}

III、 3D touch快捷选项触发事件

/** 3D touch快捷选项触发事件 */
- (void)application:(UIApplication *)application performActionForShortcutItem:(UIApplicationShortcutItem *)shortcutItem completionHandler:(void (^)(BOOL))completionHandler{

show UIActivityViewController( 带一个分享的功能)

    if([shortcutItem.type isEqualToString:@"search"]){

//    if([shortcutItem.type isEqualToString:@"one"]){
        // 这个分享的3D touch快捷选项是从plist里面创建的
        NSArray *arr = @[@"Hello 3D Touch--分享"];// 分析的内容
        UIActivityViewController *vc = [[UIActivityViewController alloc]initWithActivityItems:arr applicationActivities:nil];
        [self.window.rootViewController presentViewController:vc animated:YES completion:^{
        }];
    } else if ([shortcutItem.type isEqualToString:@"save"]) {//进入珍藏界面

2015-12-15 16:44:00 gaoyong0624 阅读数 716

1.前言  

  随着6S的到来,3DTouch被各大热门APP迅速普及,博主亲自体验后,发现使用便捷性大幅提高,随后自己照着文档,写了个Demo出来,分享给大家,希望能对有需要的朋友提供有一些帮助。

2.如何使用3D Touch?  

2.1.主界面重按APP图标,弹出Touch菜单  

\

AppleDelegate文件中的程序入口处配置:

didFinishLaunchingWithOptions

01.//给App图标添加3D Touch菜单
02.//拍照
03. 
04.//菜单图标
05.UIApplicationShortcutIcon *iconCamera = [UIApplicationShortcutIcon iconWithType:UIApplicationShortcutIconTypeAdd];
06.//菜单文字
07.UIMutableApplicationShortcutItem *itemCamera = [[UIMutableApplicationShortcutItem alloc] initWithType:@'1' localizedTitle:@'拍照'];
08.//绑定信息到指定菜单
09.itemCamera.icon = iconCamera;
10. 
11.//相册
12.//菜单图标
13.UIApplicationShortcutIcon *iconPhotoLibrary = [UIApplicationShortcutIcon iconWithType:UIApplicationShortcutIconTypeSearch];
14.//菜单文字
15.UIMutableApplicationShortcutItem *itemPhotoLibrary = [[UIMutableApplicationShortcutItem alloc] initWithType:@'2' localizedTitle:@'相册'];
16.//绑定信息到指定菜单
17.itemPhotoLibrary.icon = iconPhotoLibrary;
18.//绑定到App icon
19.application.shortcutItems = @[itemCamera,itemPhotoLibrary];

 弹出菜单,我们需要让用户点击后跳转指定页面

这里我们会用到AppDelegate里新增加的一个方法

1.- (void)application:(UIApplication *)application performActionForShortcutItem:(nonnull UIApplicationShortcutItem *)shortcutItem completionHandler:(nonnull void (^)(BOOL))completionHandler;

 让后我们需要在这个方法里做跳转的操作

01.//照相type
02.if ([shortcutItem.type isEqualToString:@'1']) {
03. 
04.UIImagePickerController *picker = [[UIImagePickerController alloc] init];//初始化
05.picker.allowsEditing = YES;//设置可编辑
06.picker.sourceType = UIImagePickerControllerSourceTypeCamera;
07.[self.window.rootViewController presentViewController:picker animated:YES completion:nil];//进入照相界面
08. 
09.}
10.//相册type
11.if ([shortcutItem.type isEqualToString:@'2']) {
12. 
13.UIImagePickerController *picker = [[UIImagePickerController alloc] init];//初始化
14.picker.allowsEditing = YES;//设置可编辑
15.picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
16.[self.window.rootViewController presentViewController:picker animated:YES completion:nil];//进入图片库

 点击后分别会进入相机和相册

\\

2.2. 3DTouch轻按预览功能,预览时底部菜单的添加  

首先我们要把轻按预览和长按手势区分开来,这里要在初始化时做一个基本的检测。  
01.nterface ViewController () <UIViewControllerPreviewingDelegate>
02.{
03.UILongPressGestureRecognizer *_longPress;
04.}
05.@end
06. 
07. 
08.@implementation ViewController
09. 
10.- (void)viewDidLoad {
11.[super viewDidLoad];
12.UILongPressGestureRecognizer *longPressGr = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longPressToDo)];
13._longPress = longPressGr;
14.}
15. 
16. 
17.//检测页面是否处于3DTouch
18.- (void)check3DTouch{
19. 
20.if (self.traitCollection.forceTouchCapability == UIForceTouchCapabilityAvailable) {
21. 
22.[self registerForPreviewingWithDelegate:self sourceView:self.view];
23.NSLog(@'3D Touch 开启');
24.//长按停止
25._longPress.enabled = NO;
26. 
27.}else{
28._longPress.enabled = YES;
29.}
30. 
31.}
32. 
33. 
34.- (void)viewWillAppear:(BOOL)animated{
35. 
36.[self check3DTouch];
37. 
38.}

然后我们需要实现 UIViewControllerPreviewingDelegate的协议

1.@interface ViewController () <UIViewControllerPreviewingDelegate>
1.//然后实现代理方法
2.- (UIViewController *)previewingContext:(id<UIViewControllerPreviewing>)previewingContext viewControllerForLocation:(CGPoint)location;
01.#pragma mark >> 3D touch 代理方法
02.//轻按进入浮动预览页面
03.- (UIViewController *)previewingContext:(id<UIViewControllerPreviewing>)previewingContext viewControllerForLocation:(CGPoint)location{
04. 
05.//注意这里我因为测试,没做具体的位置处理,如果需要定位到具体的图片Cell位置的话,可以用location通过tableView的convertPoint来取到指定Cell
06. 
07.<a href="http://www.it165.net/pro/webasp/" target="_blank"class="keylink">ASP</a>reviewViewController *vc = [[<a href="http://www.it165.net/pro/webasp/"target="_blank" class="keylink">ASP</a>reviewViewController alloc] init];
08.vc.view.frame = self.view.frame;
09.UIImageView *er = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@'123.png']];
10.vc.view = er;
11.return vc;
12. 
13.}

 完成后可以实现基本的预览效果:

\\

最后我们加上一个

预览时下滑底部菜单的添加

在我们刚刚创建的预览控制器ASPreviewViewController里实现 UIViewControllerPreviewingDelegate的协议

然后重写它的代理方法

1.- (NSArray<id<UIPreviewActionItem>> *)previewActionItems;
01.//预览页面 底部Action Items
02.- (NSArray<id<UIPreviewActionItem>> *)previewActionItems{
03. 
04.UIPreviewAction *p1 =[UIPreviewAction actionWithTitle:@'分享' style:UIPreviewActionStyleDefault handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) {
05.NSLog(@'点击了分享');
06.}];
07. 
08.UIPreviewAction *p2 =[UIPreviewAction actionWithTitle:@'收藏' style:UIPreviewActionStyleDefault handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) {
09.NSLog(@'点击了收藏');
10.}];
11. 
12.NSArray *actions = @[p1,p2];
13.return actions;
14.}
2019-06-28 10:22:00 weixin_41769887 阅读数 40

首先,我希望通过本文能帮到大家,大家的方便就是我最好的回报!
iOS设备上对用户的体验始终都是日渐提升的,其中3DTouch和widget的体验也是重要的一环。这不,最近我们多人开发的项目中也要求去做这块。
首先,支持3DTouch的苹果设备默认会帮每个没有做这块的APP会生成一个自带分享功能,弹出的页面也是苹果系统自己控制的。我们想要做一个自定义的touch功能会覆盖系统的这个分享功能。那么,具体是怎么去一一实现我们自定义的效果呢。我接着和大家聊一聊。
iOS系统有个shortcutItems的属性,这个里面就是暴露出来给用户去添加自定义的touch样式的。我们仅需要控制每个UIApplicationShortcutItem的样式就好了。这个类有三个属性UIApplicationShortcutIcon,localizedTitle,localizedSubtitle。分别给这三个属性赋值就是对图片,标题,详情标题的赋值。如果某个值传空,则对应的地方也会空着,来表示,一般第三个属性传空来显示图片和标题就好了。
那么根据touch如何控制弹出APP相对应的页面呢,这里要用到APPDelegate中的一个方法来控制逻辑,这个方法就是application(_ application: performActionFor shortcutItem: , completionHandler: )
通过在这里面对着shortcutItem.type进行判断来分类处理相关逻辑。
做好如上操作,基本上3DTouch功能就可以用了。那么,紧接着我会为大家聊一下widget的实现
widget的实现其实相当于要构建一个子APP,过程就是在project中的capabilities中通过"+"号来添加一个叫"Today Extension"的项目,添加命名完了之后,需要让主APP与这个子APP相互关联,来达到偏好设置及写文件处理的共享。当然主APP中的方法在子APP中不能调用。那怎么去做这个APP组关联呢。同样是在capabilities中去设置,在APP Group中打开按钮,通过加号来添加这个组名,在子APP中同一位置将这些操作都对应上。以上这些步骤可视为widget的环境搭建
说完了搭建,更重要的一步就是如何具体实现了。widget上的页面显示是完全依赖于子APP上的界面(换句话来说就是这上面的界面)。默认创建的"Today Extension"会给出MainInterface.storyboard的xib文件。在这上面操作最好还是用到xib而不是纯代码。因为很可能会出现对应控件不显示的问题。然后按照你们的需求及样式来铺设相关的界面。如果要求网络传输请求,可以通过widget中extensionContext?.open(NSURL(string: url)! as URL, completionHandler: { (bool) in})这个方法来实现(注意这个方法中url参数需要带有主APP的url schemes)。completionHandler里面要写回调之后的操作,比如要渲染相关的UI,那么调用这个方法之后,我们如何能请求对应的接口呢。这时候需要在主APP上的APPDelegate中的一个方法func application(_ app: ,open url: ,options: )来实现。通过传输的url中带有某个前缀来判断是点了哪个按钮。然后根据URL后缀带有的参数来进行网络请求。请求完了会调用到之前的回调结果,我们在这个回调中写出对应的结果就OK了。
以上就是做3DTouch及widget中用到的思路及步骤,如果有疑问,欢迎来致微(death-god-xpc)

iOS开发 - 3DTouch

阅读数 176

ios 3D Touch 的使用

阅读数 251

3D touch功能的封装

阅读数 561

没有更多推荐了,返回首页