您的位置:首页 > 产品设计 > UI/UE

iOS3D-Touch开发之Home Screen Quick Actions(Ocjective-C)

2016-03-04 17:17 561 查看
通过主屏幕的应用Icon,我们可以用3D Touch呼出一个菜单,进行快速定位应用功能模块相关功能的开发。

这是在
UIApplicationShortcutItems
中添加多个item(静态标签)

在Appdelegate.m 中

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

- (void)creatShortcutItem{
UIApplicationShortcutItem *item1 = [[UIApplicationShortcutItem alloc] initWithType:@"Shortcut1" localizedTitle:@"搜索" localizedSubtitle:@"" icon:[UIApplicationShortcutIcon iconWithType:UIApplicationShortcutIconTypeLocation] userInfo:nil];

UIApplicationShortcutItem *item2 = [[UIApplicationShortcutItem alloc] initWithType:@"Shortcut2" localizedTitle:@"设置" localizedSubtitle:@"" icon:[UIApplicationShortcutIcon iconWithType:UIApplicationShortcutIconTypePlay] userInfo:nil];

UIApplicationShortcutItem *item3 = [[UIApplicationShortcutItem alloc] initWithType:@"Shortcut3" localizedTitle:@"标签" localizedSubtitle:@"" icon:[UIApplicationShortcutIcon iconWithType:UIApplicationShortcutIconTypeShare] userInfo:nil];

UIApplicationShortcutItem * item4 = [[UIApplicationShortcutItem alloc]initWithType:@"Shortcut4" localizedTitle:@"自由" localizedSubtitle:@"自定义" icon:[UIApplicationShortcutIcon iconWithTemplateImageName:@"iconfont-hometouch.png"] userInfo:nil];

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

注意:真机测试时发现标签的图片显示不正确或者替换图片不成功时,试试修改代码后删除该应用重新安装。

应用在后台运行时,调用该方法

- (void)application:(UIApplication *)application performActionForShortcutItem:(UIApplicationShortcutItem *)shortcutItem completionHandler:(void (^)(BOOL))completionHandler{
if (shortcutItem) {
//判断先前我们设置的快捷选项标签唯一标识,根据不同标识执行不同操作
if ([shortcutItem.type isEqualToString:@"Shortcut1"]) {//进入搜索界面
TabBarViewController * tab = [[TabBarViewController alloc]init];
self.window.rootViewController = tab.tabBarController;
SearchVC * vcc = [[SearchVC alloc]init];
vcc.hidesBottomBarWhenPushed = YES;
[tab.tabBarController.selectedViewController pushViewController:vcc animated:YES];
}
if ([shortcutItem.type isEqualToString:@"Shortcut2"]) {
TabBarViewController * tab = [[TabBarViewController alloc]init];
self.window.rootViewController = tab.tabBarController;
tab.tabBarController.selectedIndex = 4;
SetterVC * vcc = [[SetterVC alloc]init];
vcc.hidesBottomBarWhenPushed = YES;
[tab.tabBarController.selectedViewController pushViewController:vcc animated:YES];
}
if ([shortcutItem.type isEqualToString:@"Shortcut3"]) {
TabBarViewController * tab = [[TabBarViewController alloc]init];
self.window.rootViewController = tab.tabBarController;
tab.tabBarController.selectedIndex = 4;
FilterVC * vcc = [[FilterVC alloc]init];
vcc.hidesBottomBarWhenPushed = YES;
[tab.tabBarController.selectedViewController pushViewController:vcc animated:YES];
}
}
if (completionHandler) {
completionHandler(YES);
}

}

应用未启动时,调用- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{}里的代码

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// 如果是从快捷选项标签启动app,则根据不同标识执行不同操作,然后返回NO,防止调用- (void)application:(UIApplication *)application performActionForShortcutItem:(UIApplicationShortcutItem *)shortcutItem completionHandler:(void (^)(BOOL))completionHandler
if (shortcutItem) {
// 判断先前我们设置的快捷选项标签唯一标识,根据不同标识执行不同操作
if ([shortcutItem.type isEqualToString:@"Shortcut1"]) {//进入搜索界面
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
TabBarViewController * tab = [[TabBarViewController alloc]init];
self.window.rootViewController = tab.tabBarController;
[self.window makeKeyAndVisible];
SearchVC * vcc = [[SearchVC alloc]init];
vcc.hidesBottomBarWhenPushed = YES;
[tab.tabBarController.selectedViewController pushViewController:vcc animated:YES];
});
}
return NO;
}
return YES;
}

此处使用dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{})
是为了能正常显示广告视图,并解决广告视图的NSTimer

[NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(removeLun) userInfo:nil repeats:NO];
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息