3DTouch
来源:互联网 发布:矩阵分析视频百度云 编辑:程序博客网 时间:2024/05/23 05:07
iOS9中新增添了一个耀眼的功能,那就是新一代多点触控技术3D-Touch,想必大家都已经关注到了,3D-Touch有Peek and Pop 功能以及重力点击应用图标时弹出的ShortcutItem。一拿到6s那会便迫不及待地想试试这个牛逼哄哄滴新功能,对了3D-Touch需要硬件支持,目前只有6s和6sp支持。
首先是Peek and Pop 功能
1、首先是判断当前设备是否支持3D-Touch
self.traitCollection.forceTouchCapability==UIForceTouchCapabilityAvailable
2、在需要使用3D-Touch的Peek and Pop功能的地方调用以下代码
//Registers a view controller to participate with 3D Touch preview (peek) and commit (pop). [self registerForPreviewingWithDelegate:self sourceView:self.view]; //遵守协议UIViewControllerPreviewingDelegate,并实现方法previewingContext:viewControllerForLocation:和previewingContext:commitViewController:
3、添加UIPreviewAction
在需要添加UIPreviewAction的ViewControll方法中重写previewActionItems,并且放回一个元素为UIPreviewAction的数组-(NSArray<id<UIPreviewActionItem>>*)previewActionItems{ return self.kPreviewActionItems;}#pragma mark - Lazy Method-(NSMutableArray *)kPreviewActionItems{ if (_kPreviewActionItems==nil) { _kPreviewActionItems=[[NSMutableArray alloc] init]; UIPreviewAction *cancelAction=[UIPreviewAction actionWithTitle:@"取消" style:UIPreviewActionStyleDestructive handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) { NSLog(@"取消"); }]; UIPreviewAction *firstAction=[UIPreviewAction actionWithTitle:@"第一个" style:UIPreviewActionStyleSelected handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) { NSLog(@"第一个 选中"); }]; UIPreviewAction *secondAction=[UIPreviewAction actionWithTitle:@"第二个" style:UIPreviewActionStyleDefault handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) { NSLog(@"第二个"); }]; [_kPreviewActionItems addObject:firstAction]; [_kPreviewActionItems addObject:secondAction]; [_kPreviewActionItems addObject:cancelAction]; } return _kPreviewActionItems;}
完整代码如下:
AppDelegate:
#import "AppDelegate.h"#import "ViewController.h"@interface AppDelegate ()@end@implementation AppDelegate- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // Override point for customization after application launch. ViewController *VC=[[ViewController alloc] init]; UINavigationController *navi=[[UINavigationController alloc] initWithRootViewController:VC]; self.window.rootViewController=navi; return YES;}
ViewController:
#import "ViewController.h"#import "DetailViewController.h"@interface ViewController () <UIViewControllerPreviewingDelegate>@end@implementation ViewController- (void)viewDidLoad { [super viewDidLoad]; self.view.backgroundColor=[UIColor whiteColor]; UIBarButtonItem *rightItem=[[UIBarButtonItem alloc] initWithTitle:@"Next" style:UIBarButtonItemStylePlain target:self action:@selector(nextAction)]; self.navigationItem.rightBarButtonItem=rightItem; UIBarButtonItem *backItem=[[UIBarButtonItem alloc] initWithTitle:@"back" style:UIBarButtonItemStylePlain target:nil action:nil]; self.navigationItem.backBarButtonItem=backItem; //check if the device supports 3DTouch if (self.traitCollection.forceTouchCapability==UIForceTouchCapabilityAvailable) { //Registers a view controller to participate with 3D Touch preview (peek) and commit (pop). [self registerForPreviewingWithDelegate:self sourceView:self.view]; }}- (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning];}#pragma mark - UIViewControllerPreviewingDelegate-(UIViewController *)previewingContext:(id<UIViewControllerPreviewing>)previewingContext viewControllerForLocation:(CGPoint)location{ DetailViewController *VC=[[DetailViewController alloc] init]; //可以设置大小// VC.preferredContentSize=CGSizeMake(0.0, 400); return VC;}-(void)previewingContext:(id<UIViewControllerPreviewing>)previewingContext commitViewController:(UIViewController *)viewControllerToCommit{ [self showViewController:viewControllerToCommit sender:self];}#pragma mark - Action Method-(void)nextAction{ DetailViewController *VC=[[DetailViewController alloc] init]; [self.navigationController pushViewController:VC animated:YES];}@end
DetailViewController:
#import "DetailViewController.h"@interface DetailViewController ()@property(nonatomic,retain) NSMutableArray *kPreviewActionItems;@end@implementation DetailViewController#pragma mark - Life Cycle- (void)viewDidLoad { [super viewDidLoad]; self.view.backgroundColor=[UIColor grayColor];}- (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning];}#pragma mark - Override-(NSArray<id<UIPreviewActionItem>>*)previewActionItems{ return self.kPreviewActionItems;}#pragma mark - Lazy Method-(NSMutableArray *)kPreviewActionItems{ if (_kPreviewActionItems==nil) { _kPreviewActionItems=[[NSMutableArray alloc] init]; UIPreviewAction *cancelAction=[UIPreviewAction actionWithTitle:@"取消" style:UIPreviewActionStyleDestructive handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) { NSLog(@"取消"); }]; UIPreviewAction *firstAction=[UIPreviewAction actionWithTitle:@"第一个" style:UIPreviewActionStyleSelected handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) { NSLog(@"第一个 选中"); }]; UIPreviewAction *secondAction=[UIPreviewAction actionWithTitle:@"第二个" style:UIPreviewActionStyleDefault handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) { NSLog(@"第二个"); }]; [_kPreviewActionItems addObject:firstAction]; [_kPreviewActionItems addObject:secondAction]; [_kPreviewActionItems addObject:cancelAction]; } return _kPreviewActionItems;}@end
UIApplicationShortcutItem:重压应用图标时
有两种方法,一种是在Info.plist中进行静态设置,一种是用代码动态设置。我偏向第二种,所以下面的方法也是第二种方法。
1、在ViewController中设置应用程序的UIApplicationShortcutItem
-(void)shortCutItemConfig{ UIApplicationShortcutItem *item1=[[UIApplicationShortcutItem alloc] initWithType:@"1" localizedTitle:@"第一个标签" localizedSubtitle:nil icon:nil userInfo:nil]; UIApplicationShortcutIcon *icon2=[UIApplicationShortcutIcon iconWithType:UIApplicationShortcutIconTypeFavorite]; UIApplicationShortcutItem *item2=[[UIApplicationShortcutItem alloc] initWithType:@"2" localizedTitle:@"第二个标签" localizedSubtitle:@"你好,色彩" icon:icon2 userInfo:nil]; UIApplicationShortcutIcon *icon3=[UIApplicationShortcutIcon iconWithType:UIApplicationShortcutIconTypeMessage]; UIApplicationShortcutItem *item3=[[UIApplicationShortcutItem alloc] initWithType:@"3" localizedTitle:@"第三个标签" localizedSubtitle:@"消息" icon:icon3 userInfo:nil]; UIApplicationShortcutIcon *icon4=[UIApplicationShortcutIcon iconWithType:UIApplicationShortcutIconTypeLove]; UIApplicationShortcutItem *item4=[[UIApplicationShortcutItem alloc] initWithType:@"4" localizedTitle:@"第四个标签" localizedSubtitle:@"爱神" icon:icon4 userInfo:nil]; [UIApplication sharedApplication].shortcutItems=@[item4,item3,item2,item1];}
2、用户点击UIApplicationShortcutItem时,在AppDelegate中进行相应的响应
-(BOOL)application:(UIApplication *)application willFinishLaunchingWithOptions:(NSDictionary *)launchOptions{//判断应用是不是从UIApplicationShortcutItem进入的 NSString *shortcutItemKey=[launchOptions objectForKey:UIApplicationLaunchOptionsShortcutItemKey]; NSLog(@"shortcutItemKey=%@",shortcutItemKey); if ([shortcutItemKey intValue]>=1) { return NO; } return YES;}//当我们点击标签进入应用程序时,也可以进行一些操作。当我们通过标签进入app时,就会调用这样一个回调,我们可以获取shortcutItem的信息进行相关逻辑操作//except when -application:willFinishLaunchingWithOptions: or -application:didFinishLaunchingWithOptions returns NO.-(void)application:(UIApplication *)application performActionForShortcutItem:(UIApplicationShortcutItem *)shortcutItem completionHandler:(void (^)(BOOL))completionHandler{ ViewController *VC=[[ViewController alloc] init]; UINavigationController *navi=[[UINavigationController alloc] initWithRootViewController:VC]; self.window.rootViewController=navi; NSLog(@"shortcutItem=%@",shortcutItem); int type=[shortcutItem.type intValue]-1; UIViewController *viewController; NSArray *classArr=@[[FirstViewController class],[SecondViewController class],[ThirdViewController class],[ForthViewController class]]; viewController=[[[classArr objectAtIndex:type] alloc] init]; [navi pushViewController:viewController animated:YES];}
0 0
- 3DTouch
- 3DTouch
- 3DTouch
- IOS 3Dtouch
- 3DTouch Demo
- IOS9 3DTouch
- 3DTouch学习笔记
- 关于3DTouch
- 3DTouch 基本使用
- IOS开发 3DTouch
- 3DTouch简单实现
- 3DTouch的分享
- 3DTouch的使用
- iOS 3DTouch 开发
- 3Dtouch 基本原理
- 3Dtouch实现
- 3DTouch桌面快捷方式
- iOS 3DTouch
- 基于RxJava、RxAndroid的EventBus实现
- ios 界面间跳转方法
- 腾讯暑期实习面经验1
- MFC+Direct2D以屏幕中心为中心缩放的实现
- [宇宙与天文]火星与土星为什么有矛盾?
- 3DTouch
- ios开发之 icon规范+启动图规范
- JAVA学习12_Java中的注解是如何工作的?
- QML解析C++的QVariantList、QVariantMap
- JavaScript 调试常见报错以及修复方法
- android pbap协议翻译
- 算法交易经典文章
- 使用自定义透明Dialog样式的Activity
- 日经春秋 20160104