iOS9 新特征之3D Touch实现

2015-12-16  本文已影响0人  雄壮的玻璃心

API介绍

UITouch类里API的变化

iOS9中添加的属性

altitudeAngle

estimatedProperties

updatedProperties

estimationUpdateIndex

iOS9中添加的方法

UIForceTouchCapability

UITouchType

关于重按App icon展开菜单的实现

在项目的Appdelegate中找到如下方法,创建展开菜单

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

for example
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    [self.window makeKeyAndVisible];
    UIViewController* vc = [[UIViewController alloc] initWithNibName:nil bundle:nil];
    self.window.rootViewController = vc;

    UIApplicationShortcutItem *item1 = [[UIApplicationShortcutItem alloc] initWithType:@"item1" localizedTitle:@"我的消息" localizedSubtitle:nil icon:nil userInfo:nil];
    
    UIApplicationShortcutIcon *icon2 = [UIApplicationShortcutIcon iconWithType:UIApplicationShortcutIconTypeAdd];
    UIApplicationShortcutItem *item2 = [[UIApplicationShortcutItem alloc] initWithType:@"item2" localizedTitle:@"发布动态" localizedSubtitle:nil icon:icon2 userInfo:nil];
    
    UIApplicationShortcutIcon *icon3 = [UIApplicationShortcutIcon iconWithTemplateImageName:@"ico_discovery"];
    UIApplicationShortcutItem *item3= [[UIApplicationShortcutItem alloc] initWithType:@"item3" localizedTitle:@"搜索寻味师" localizedSubtitle:nil icon:icon3 userInfo:nil];
    application.shortcutItems = @[item3,item2,item1];
    
    
}

创建完之后就运行项目,看到效果啦,如图

image

之后可以在application:performActionForShortcutItem:completionHandler方法内根据shortcutItem.type处理点击事件

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

for example
if ([shortcutItem.type isEqualToString:@"item1"]) {    
    MyMessageViewController *vc = [[MyMessageViewController alloc] init];
    vc.hidesBottomBarWhenPushed = YES;
    [self.navigationController.tabBarController.selectedViewController pushViewController:vc animated:YES];
}

}

关于peek 和 pop的实现

效果图
image

首先创建2个viewController,例如HomeViewControllerDetailPageViewController

在HomeViewController中添加<UIViewControllerPreviewingDelegate>,并注册delegate

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

实现该Delegate的方法

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

CGPoint point = [self.view convertPoint:location toView:self.tableView];//根据loaction获取其在不同坐标系中的点坐标,后面会通过这个取获取数据的indexPath
NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:point];
UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath];
CGRect cellRect = cell.frame;
context.sourceRect = cellRect;
Humors *humor = [(FinderInfo*)dataList[indexPath.row] humors][0];//这是我们项目的一个model,大家可以换成自己的model进行操作
    DetailPageViewController *controller = [[DetailPageViewController alloc]initWithFlavorId:[humor.param intValue]];//创建需要pop的ViewController        
    controller.view.frame = self.view.frame;
    return controller;

}

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

[self showViewController:viewControllerToCommit sender:self];

}

效果图
image

然后在DetailPageViewController中实现peek操作

打开前面pop出的ViewController(DetailPageViewController),在实现文件中添加如下代码

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

__weak typeof(self) weakSelf = self;
NSString *actionTitle = mUserRes.isAttention?@"取消关注":@"+关注";
UIPreviewAction *p1 =[UIPreviewAction actionWithTitle:actionTitle style:UIPreviewActionStyleDefault handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) {
    [weakSelf attention]; //这里添加你需要点击后的操作
}];


UIPreviewAction *p2 =[UIPreviewAction actionWithTitle:@"取消" style:UIPreviewActionStyleDestructive handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) {
    //这里添加你需要点击后的操作
}];
NSArray *actions = @[p1,p2];
return actions;

}

Tips:判断设备是否支持3D touch,需要做判断

必须要两样同时满足,才可以使用,不作判断会引起不支持3D Touch的手机编译crash

部分内容摘自简书原地址点我

上一篇 下一篇

猜你喜欢

热点阅读