ios 3DTouch基本使用教程

摘要:
虽然3DTouch已经推出了很长时间,但该项目最近才接触到它,所以我已经整理并记录了我实现的代码。

尽管3DTouch已经出来很久,但是项目最近才接触到,所以就整理了一下自己实现的代码,记录。

1.实现重按app,弹出窗口(如图所示)

ios 3DTouch基本使用教程第1张

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions方法中实现:

    //添加3dtouch
    //动态加载自定义的ShortcutItem
    if (application.shortcutItems.count == 0) {
    
        UIMutableApplicationShortcutItem *itemScan = [[UIMutableApplicationShortcutItem alloc]initWithType:@"Scan"  localizedTitle:@"扫一扫" localizedSubtitle:nil icon:[UIApplicationShortcutIcon iconWithTemplateImageName:@"icon2"] userInfo:nil];
        UIMutableApplicationShortcutItem *itemWrite = [[UIMutableApplicationShortcutItem alloc]initWithType:@"listen" localizedTitle:@"去写作" localizedSubtitle:nil icon:[UIApplicationShortcutIcon iconWithTemplateImageName:@"icon1"] userInfo:nil];

        application.shortcutItems = @[itemScan,itemListen];
    }
/*ps:about icon
[UIApplicationShortcutIcon iconWithTemplateImageName:@"icon1"]//这是替换自己的图片
[UIApplicationShortcutIcon iconWithType:UIApplicationShortcutIconTypeCompose];//这是系统内的特定icon*/

  随后实现:

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

在该方法中,可以通过判断唯一标示符(之前设置的initwithtype:)或者判断localizedTitle来区别点击的哪一行

而后可以使用通知或者直接导航等等跳转到你想要去的界面,这里就不细说了。

2.重按cell的3DTouch效果

ios 3DTouch基本使用教程第2张

 

 实现

UIViewControllerPreviewingDelegate代理方法

- (void)viewDidLoad {
       [self registerPreview];
}

-(void)registerPreview{
//判断是否支持3dtouch,设置委托代理
    if (self.traitCollection.forceTouchCapability == UIForceTouchCapabilityAvailable) {
        [self registerForPreviewingWithDelegate:self sourceView:self.tableView];
    }
    else {
        NSLog(@"该设备不支持3D-Touch");
    }
}

#pragma mark - UIViewControllerPreviewingDelegate
- (nullable UIViewController *)previewingContext:(id <UIViewControllerPreviewing>)previewingContext viewControllerForLocation:(CGPoint)location
{
    NSIndexPath * indexPath =[_tableView indexPathForRowAtPoint:location];
    
    UITableViewCell * cell = [_tableView cellForRowAtIndexPath:indexPath];
//以上得到你点击的哪一行的cell
    if (!cell) {
        return nil;
    }
//显示3dtouchpreviewViewcontroller界面
    3DTouchPreviewViewController *detailVC =[[3DTouchPreviewViewController alloc]init];
    detailVC.preferredContentSize = CGSizeMake(0, 0);
    previewingContext.sourceRect = cell.frame;
    return detailVC;
}

- (void)previewingContext:(id <UIViewControllerPreviewing>)previewingContext commitViewController:(UIViewController *)viewControllerToCommit
{
    [self.navigationController pushViewController:viewControllerToCommit animated:NO];
}

在3dtouchpreviewViewController.m中实现:

- (void)viewDidLoad {
    [super viewDidLoad];
    
    self.view.backgroundColor =[UIColor whiteColor];
   //你所想要显示的东西
    UILabel *textlabel = [[UILabel alloc]initWithFrame:CGRectMake(0, 0, self.view.bounds.size.width, 40)];
    textlabel.backgroundColor = [UIColor colorWithRed:54/255.0 green:54/255.0 blue:54/255.0 alpha:1];
    textlabel.textColor = [UIColor whiteColor];
    textlabel.text = @"哈哈哈哈哈哈";
    textlabel.textAlignment = NSTextAlignmentCenter;
    textlabel.font = [UIFont fontWithName:@"STHeitiSC-Light" size:16];
    [self.view addSubview:textlabel];
    
    _imageViewShow =[[UIImageView alloc]init];
    _imageViewShow.frame = CGRectMake(0, 40, self.view.bounds.size.width, self.view.bounds.size.height-40);
    _imageViewShow.image = [UIImage imageNamed:@"picture"];
    [self.view addSubview:_imageViewShow];

}

//下面的actionview
- (NSArray <id <UIPreviewActionItem>> *)previewActionItems
{
    UIPreviewAction *action = [UIPreviewAction actionWithTitle:@"删除" style: UIPreviewActionStyleDestructive handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) {
        NSLog(@"实现删除功能!");
    }];
    
    return @[action];
}

  以上就是3DTouch的简单使用,如有不足之处,欢迎指出。

免责声明:文章转载自《ios 3DTouch基本使用教程》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Python request SSL证书问题HttpClient 接口调用下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

backgroundsize

当背景大小值为和时,可以设置两个值,也可以设置一个值。当只取一个值时,第二个值相当于auto,但此处的auto不会将背景图像的高度保持在其原始高度,而是与第一个值相同。此外,如果只取一个值,宽度和高度将相同,这相当于背景大小:80%自动。...

Python之路

Python之路引子与其感慨路难行,不如马上出发PythonPython之路(一):初识Python之路(二):基本数据类型(上)Python之路(三):基本数据类型(下)Python之路(四):函数介绍及使用Python之路(五):内置函数Python之路(六):迭代器,装饰器,生成器Python之路(七):字符串处理Python之路(八):基础模块(一)...

DB2字符函数简介及使用

Param2可以是编码单元16-16位UTF-16编码,也就是说,字符串表示为16位UTF-18编码字符串。Codeunits32-32位UTF-32编码,即字符串表示为32位UTF 32编码字符串。请注意,定义为FORBITDATA的字符串不能转换为图形字符。如果length<length,则来自的原始字符串短于结果中的长度。...

docker安装MySQL5.7示例!!坑,ERROR 1045 (28000): Access denied for user

处理mysql1045错误1.在/usr/local/mysql/conf中添加一个文件。d目录:mysql文件的内容是:[mysqld]skip-grant-tables2重新启动mysql:dockerstartmysql5.73进入docker:dockerexec-itmysql5.7bash4登录mysql:mysql-uroot-p5将root密...

H3C 12508 收集诊断信息

案例:H3C12508单板卡出现remove状态,需要配合研发收集诊断信息。)总体:12500交换机返回三种文件----故障时诊断信息,主备单板的日志文件,主备单板的诊断日志操作步骤:一、故障时诊断信息:disdiagnostic-informationdiag收集必须在问题出现的时候,单板重起之前执行。在save时请选择Y保存到CF卡方式。一般情况下,此命...

汇编指令MOV

格式:MOVDST,SRC例如:MOVEAX,#050aH;将十六进制050a传送到通用寄存器eax中MOVDI,BXMOVES,AXMOVAX,DSMOVAL,23HMOV[2000H],02HMOV[2061H],BX...