iOS开发之 3D Touch 开发

在App 的开发中对于开发人员来说新设备以及新功能的适配无疑是一个很苦逼的事。在今年九月份iPhone 6S 以及 6S+ 出来之后,新的功能 3D Touch又是一个比较头疼的事。刚刚看到的时候以为是比较麻烦的东西 看着开发文档就头大(本撸主英语水平有限)。但是看完官方文档之后感觉也不是很麻烦。所以就自己写了一个Demo 供大家吐槽和狂喷。

我感觉  3D Touch  的使用和  UITabBar  差不多还是一个比较简单的东西,几乎是拿过来就能用的东西。

一、 给桌面 Icon 添加 3D Touch

首先是App 的桌面  Icon 的效果的实现。这里最多只能添加四个Btn 的点击事件。虽然对于有些App 来说的确是有点少但是我感觉 这样设计是有一定道理的 毕竟是多了之后会感觉跟一个 膏药一样很坑爹。 (附部分代码1.1  在AppDelegate 里面实现就好)

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

// Override point for customization after application launch.

/* 桌面icon 的 重压效果 可以使用系统的Type 当然也可以进行自定义 还可以将其进行本地化静态处理存储为一个plist 文件 然后进行调取使用

// 系统提供的部分的类型 直接可以使用  并且附带   icon

UIApplicationShortcutIconTypeCompose,

UIApplicationShortcutIconTypePlay,

UIApplicationShortcutIconTypePause,

UIApplicationShortcutIconTypeAdd,

UIApplicationShortcutIconTypeLocation,

UIApplicationShortcutIconTypeSearch,

UIApplicationShortcutIconTypeShare

*/

UIApplicationShortcutItem *item1 = [[UIApplicationShortcutItem alloc] initWithType:@"TYShortcut1" localizedTitle:@"TYLocation" localizedSubtitle:@"你点一下试试(定位)" icon:[UIApplicationShortcutIcon iconWithType:UIApplicationShortcutIconTypeLocation] userInfo:nil];

UIApplicationShortcutItem *item2 = [[UIApplicationShortcutItem alloc] initWithType:@"TYShortcut2" localizedTitle:@"TYLocaPlay" localizedSubtitle:@"点一下试试呗(播放)" icon:[UIApplicationShortcutIcon iconWithType:UIApplicationShortcutIconTypePlay] userInfo:nil];

UIApplicationShortcutItem *item3 = [[UIApplicationShortcutItem alloc] initWithType:@"TYShortcut3" localizedTitle:@"TYShare" localizedSubtitle:@"点一下试试吧(分享)" icon:[UIApplicationShortcutIcon iconWithType:UIApplicationShortcutIconTypeShare] userInfo:nil];

// 这里是可以自定义的效果  可以自己设置  Icon

UIApplicationShortcutItem * item4 = [[UIApplicationShortcutItem alloc]initWithType:@"TYShortcut4" localizedTitle:@"TYCustom" localizedSubtitle:@"来点一下!(自定义)" icon:[UIApplicationShortcutIcon iconWithTemplateImageName:@""] userInfo:nil];

[[UIApplication sharedApplication] setShortcutItems: @[ item1, item2, item3, item4 ]];

// 这个鬼东西实现起来是不是还是很简单的啊

return YES;

}

当然添加上之后还要实现他们的点击事件  具体代码如下(1.2) 同样在AppDelegate 里边实现就好

-(void) application:(UIApplication *)application performActionForShortcutItem:(UIApplicationShortcutItem *)shortcutItem completionHandler:(void (^)(BOOL))completionHandler{

NSLog(@"%@",shortcutItem.type);

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

/*

在此处添加需要跳转到的页面 如果不写默认进入程序正常开启页面(不添加3D Touch的效果)

*/

} else if ([shortcutItem.type isEqualToString:@"TYShortcut2"]){

}else if ([shortcutItem.type isEqualToString:@"TYShortcut3"]){

} else if([shortcutItem.type isEqualToString:@"TYShortcut4"]){

}

return ;

}

二、在某个controller 里添加3D Touch

我感觉这个鬼东西还是蛮简单的么  但是在页面里边的效果还是比较复杂的

因为在此处会有三种不同的状态   一、 第一次按压(出现悬浮窗口)二、向上滑动(有向上滑动的指示箭头的情况下 出现设定好的  UIActionSheet ) 三、 第二次按压 (进入到定义好的Controller)  大体就有这三种不同的状态

// 生明 添加3D Touch

if (self.traitCollection.forceTouchCapability == UIForceTouchCapabilityAvailable) {

[self registerForPreviewingWithDelegate:self sourceView:self.view];

}

else {

NSLog(@"ForceTouch not available. use LongPress...");

}

# pragma  - mark 3D Touch delegate UIViewControllerPreviewingDelegate   添加代理 并实现代理中的方法

- (UIViewController *)previewingContext:(id <UIViewControllerPreviewing>)previewingContext viewControllerForLocation:(CGPoint)location

{    // 第一次 重压 显示的悬浮窗口

CGPoint  TYPoint = [TYTabView convertPoint:location fromView:self.view];

NSIndexPath * TYindexpath = [TYTabView indexPathForRowAtPoint:TYPoint];

[TYTabView deselectRowAtIndexPath:TYindexpath animated:YES];

CGRect TYCGrect = [TYTabView cellForRowAtIndexPath:TYindexpath].frame;

previewingContext.sourceRect = TYCGrect;

TY3DTouchVC* TYVC = [[TY3DTouchVC alloc] init];

TYVC.view.backgroundColor = [UIColor whiteColor];

TYVC.TYImageView.image = [UIImage imageNamed:@"lyf-1"];

TYVC.preferredContentSize = CGSizeMake(0, 300); // 修改悬浮窗口的大小

return TYVC;

}

- (void)previewingContext:(id <UIViewControllerPreviewing>)previewingContext commitViewController:(UIViewController *)viewControllerToCommit

{

// 第二次重压之后显示的 详情页

TY3DTouchVC * TYVC = [[TY3DTouchVC alloc]init];

TYVC.view.backgroundColor = [UIColor whiteColor];

TYVC.TYImageView.image = [UIImage imageNamed:@"LYF"];

[self presentViewController:TYVC animated:YES completion:nil];

}

三、 在3D Touch 所跳转到的页面添加的  UIActionSheet  的效果

//  这个点击事件的实现实在Block 里添加的还是比较容易理解的  具体效果 会附上效果图片

// 整体效果的实现也就是这样了 当然这些仅仅是一个初步的使用和了解 望各位童鞋们还不要喷的太厉害 以后还会陆续发一些 自己在各个设备上适配不同屏幕的方法 和心得

- (NSArray <id <UIPreviewActionItem>> *)previewActionItems

{

UIPreviewAction *TYAction1 = [UIPreviewAction actionWithTitle:@"TYActionFist" style:UIPreviewActionStyleDefault handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) {

NSLog(@"action1 selected.");

}];

UIPreviewAction *TYAction2 = [UIPreviewAction actionWithTitle:@"TYActionSecond" style:UIPreviewActionStyleSelected handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) {

NSLog(@"action2 selected.");

}];

UIPreviewAction *TYAction3_1 = [UIPreviewAction actionWithTitle:@"TYActionThird_1" style:UIPreviewActionStyleDefault handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) {

NSLog(@"action3-1 selected.");

}];

UIPreviewAction *TYAction3_2 = [UIPreviewAction actionWithTitle:@"TYActionThird_2" style:UIPreviewActionStyleDefault handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) {

NSLog(@"action3-2 selected.");

}];

UIPreviewActionGroup *TYAction3 = [UIPreviewActionGroup actionGroupWithTitle:@"TYActionThird" style:UIPreviewActionStyleDestructive actions:@[TYAction3_1, TYAction3_2]];

return @[TYAction1, TYAction2, TYAction3];

}

/*

TianYang_AN

我只是一个小小的菜鸟,跪求各位大神 枪下留情

*/

时间: 2024-12-08 16:04:12

iOS开发之 3D Touch 开发的相关文章

iOS开发之3D Touch

1.简介 3DTouch是在6s之后苹果的一项技术,只能在6s及其以上机型真机运行,Xcode的模拟器是不支持的. Quick Actions(点击icon的快捷方式) Peek&Pop(应用内快速预览内容) UITouch和LivePhoto(读取压力和最大压力) 2.Quick Actions(点击icon的快捷方式) 点击app的图标,可以弹出Today小组件(如果有的话)和UIApplicationShortcutItem快捷方式--这就是Quick Actions! // // UIA

iOS 开发之Widget的开发及使用(下)

在iOS 开发之Widget的开发及使用(上)中都交代清楚了关于widget扩展的添加,以及布局部分的内容,下面说下关键部分:关于数据共享的操作. 在Apple发布iOS8.0以后,对App有提供一个新的扩展选择项,叫做App groups,选择宿主Target之后,在capabilities选项卡下面会找到这个选项: 那么这个选项主要是做何使用呢? iOS系统,每个开发应该都清楚,其内部程序都是遵循沙盒机制,App与App之间,是不能进行数据共享的,A 不能访问 B 的数据,同样 B 也不能访

iOS 开发之Widget的开发及使用(上)

在iOS8发布以后,Apple官方发布了,有关第三方开发软件可以集成进手机的通知中心,对于我们这帮开发来说,无疑是一个很新鲜的玩意儿,都巴不得赶紧将自己的App加入Widget的功能扩展. 那么关于widget的功能扩展需要做的步骤,我简单的分享一下我个人的简单过程.不对望斧正.我将会分为两次分别概述widget的基本添加以及布局和数据共享部分. 首先,在自己的在xcode的菜单项,为当前项目添加一个新的target.然后选择Application Extension 类型选Today. 接下来

李洪强IOS开发之iOS好项目收集

李洪强IOS开发之iOS好项目收集 在这里收集一些最近出现的比较实用好玩的框架或者项目,会不断更新 项目 简述 日期 SCTableViewCell 类似与QQ侧滑删除Cell的Demo 201501018 JHChainableAnimations 可读性好使用方便的动画库,语法类似与Masonry,使用链式编程 20150506 awesome-ios-chart iOS平台下的各种图表组件 20150513 DevArticles iOS Animation 主流炫酷动画框架(特效)收集整

iOS开发之CocoaPods的使用

透明色:00ff00ff //设置柱状图的颜色                ColorSet cs = new ColorSet();                cs.Id = "colorset1"; #region 设置柱状图的颜色 待开发                    string strColor = oYAXIS.Color;                    switch (strColor)                    {           

iOS开发之UILabel

UILabel是iOS开发中常用的一个组件,主要用来显示内容. UILabel的主要使用如下: ? 1 2 3 4 5 6 7 8 9 10 /*尺寸*/ CGRect labelRect = CGRectMake(100, 100, 80, 40); /*初始化*/ UILabel *titleLabel = [[UILabel alloc] initWithFrame:labelRect]; /*一些属性的设置*/ titleLabel.font = [UIFont systemFontOf

iOS开发之多XIB之间相互关联

Xib link Xib 1.直接加载xib中的UIView 创建一个View1.xib, 随便设一个背景色,加一个标识UILabel, 这样好知道是这个view是哪一个view. 你可以在这个view上加作意的subview,我只是说明原理,所以这儿并没有加作何subview. 最终我的View1如下图: 由于View1会放到其它View上作为subview,所以这儿size是Freeform, Status Bar是:None. 将下面代码放到viewDidLoad中: &1这行代码就是加载

iOS开发之UISearchBar初探

iOS开发之UISearchBar初探 UISearchBar也是iOS开发常用控件之一,点进去看看里面的属性barStyle.text.placeholder等等.但是这些属性显然不足矣满足我们的开发需求.比如:修改placeholder的颜色.修改UISearchBar上面的UITextfield的背景颜色.修改UITextfield上面的照片等等. 为了实现上述的需求,最好写一个UISearchBar的子类就叫LSSearchBar吧 LSSearchBar.h如下: #import <U

iOS开发之MVVM在项目中的应用

今天写这篇博客是想达到抛砖引玉的作用,想与大家交流一下思想,相互学习,博文中有不足之处还望大家批评指正.本篇博客的内容沿袭以往博客的风格,也是以干货为主,偶尔扯扯咸蛋(哈哈~不好好工作又开始发表博客啦~). 由于本人项目经验有限,关于架构设计方面的东西理解有限,我个人对MVVM的理解主要是借鉴于之前的用过的MVC的Web框架~在学校的时候用过ThinkPHP框架,和SSH框架,都是MVC的架构模式,今天MVVM与传统的MVC可谓是极为相似,也可以说是兄弟关系,也就是一家人了. 说到架构设计和团队