zoukankan      html  css  js  c++  java
  • 3D Touch集成过程整理

    1、集成App图标按压快速打开某个功能

    在AppDelegate.m中加入以下三个东西

    在启动方法里加入3D Touch菜单

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    {
        ......
        
        //3D Touch iOS9以上才支持
        if([[[UIDevice currentDevice] systemVersion] floatValue] >= 9.0){
            
            //创建3D Touch菜单
            [self createItem];
            
            //启动的时候判断是不是点击3D Touch菜单进来的
            UIApplicationShortcutItem *shortcutItem = [launchOptions valueForKey:UIApplicationLaunchOptionsShortcutItemKey];
            if (shortcutItem)
            {
                [SaveData setValueToSettingWithName:@"ShortcutItemType" value:shortcutItem.type];
                //NSLog(@"We've launched from shortcut item: %@", shortcutItem.localizedTitle);
            }
            else
            {
                //NSLog(@"We've launched properly.");
            }
            
        }
        
        return YES;
    }
    #pragma mark - 创建3D Touch菜单
    -(void)createItem{
        
        //给App图标添加3D Touch菜单
        //签到
        //菜单图标
        UIApplicationShortcutIcon *iconSignin = [UIApplicationShortcutIcon iconWithTemplateImageName:@"3dtouch_signin"];
        //菜单文字
        UIMutableApplicationShortcutItem *itemSignin = [[UIMutableApplicationShortcutItem alloc] initWithType:@"1" localizedTitle:@"签到"];
        //绑定信息到指定菜单
        itemSignin.icon = iconSignin;
        
        //记体重
        //菜单图标
        UIApplicationShortcutIcon *iconWeight = [UIApplicationShortcutIcon iconWithTemplateImageName:@"3dtouch_weight"];
        //菜单文字
        UIMutableApplicationShortcutItem *itemWeight = [[UIMutableApplicationShortcutItem alloc] initWithType:@"2" localizedTitle:@"记体重"];
        //绑定信息到指定菜单
        itemWeight.icon = iconWeight;
        
        //记录饮食运动
        //菜单图标
        UIApplicationShortcutIcon *iconFood = [UIApplicationShortcutIcon iconWithTemplateImageName:@"3dtouch_food"];
        //菜单文字
        UIMutableApplicationShortcutItem *itemFood = [[UIMutableApplicationShortcutItem alloc] initWithType:@"3" localizedTitle:@"记录饮食运动"];
        //绑定信息到指定菜单
        itemFood.icon = iconFood;
        
        //发动态
        //菜单图标
        UIApplicationShortcutIcon *iconWeibo = [UIApplicationShortcutIcon iconWithTemplateImageName:@"3dtouch_weibo"];
        //菜单文字
        UIMutableApplicationShortcutItem *itemWeibo = [[UIMutableApplicationShortcutItem alloc] initWithType:@"4" localizedTitle:@"发动态"];
        //绑定信息到指定菜单
        itemWeibo.icon = iconWeibo;
        
        //绑定到App icon
        NSArray *items = [NSArray arrayWithObjects:itemWeibo, itemFood, itemWeight, itemSignin, nil];
        [UIApplication sharedApplication].shortcutItems = [NSArray arrayWithArray:items];
        
    }
    #pragma mark - 桌面图标3DTouch按压后菜单的事件
    
    - (void)application:(UIApplication *)application performActionForShortcutItem:(nonnull UIApplicationShortcutItem *)shortcutItem completionHandler:(nonnull void (^)(BOOL))completionHandler{
        
        if ([SaveData getValueFromSettingWithName:LOGIN_TICKET]) {
            if ([self.window.rootViewController isKindOfClass:NSClassFromString(@"RootTabBarController")])
            {
                //NSLog(@"有TabBar");
                RootTabBarController *tabBar = (RootTabBarController *)self.window.rootViewController;
                MLNavigationController *nav = (MLNavigationController *)tabBar.selectedViewController;
                
                
                //签到
                if ([shortcutItem.type isEqualToString:@"1"]) {
                    
                    DFPointsMallViewController *newView = [[DFPointsMallViewController alloc]init];
                    newView.title = @"积分商城";
                    newView.hidesBottomBarWhenPushed = YES;
                    [nav pushViewController:newView animated:NO];
                    
                }
                
                //记体重
                if ([shortcutItem.type isEqualToString:@"2"]) {
                    
                    RenwuRecordWeightViewController *newView = [[RenwuRecordWeightViewController alloc]init];
                    newView.title = @"记录体重";
                    newView.hidesBottomBarWhenPushed = YES;
                    [nav pushViewController:newView animated:NO];
                    
                }
                
                //记录饮食运动
                if ([shortcutItem.type isEqualToString:@"3"]) {
                    
                    CalorieCalculatorViewController *newView = [[CalorieCalculatorViewController alloc]init];
                    newView.title = @"记录饮食运动";
                    newView.hidesBottomBarWhenPushed = YES;
                    [nav pushViewController:newView animated:NO];
                    
                }
                
                //发动态
                if ([shortcutItem.type isEqualToString:@"4"]) {
                    
                    QuanziPubViewController *newView = [[QuanziPubViewController alloc]init];
                    newView.title = @"发动态";
                    MLNavigationController *mlNav = [[MLNavigationController alloc]initWithRootViewController:newView];
                    [nav presentViewController:mlNav animated:YES completion:nil];
                    
                }
                
            }
        }
        
    }

    注意:点击应用图标的快速入口进入app时,如果app在后台运行,则会调用后面的回调方法。如果是新打开app,参数则会传入到启动方法的launchOptions里,就和通知类似。

    我这里如果点击是新打开app的话,我是先把数据先记录到本地,等进入到首页后再进行处理,处理好后再销毁记录在本地的数据。

    方法如下:

        //快速进入
        if ([SaveData getValueFromSettingWithName:@"ShortcutItemType"]) {
            NSString *shortcutItemType = [SaveData getValueFromSettingWithName:@"ShortcutItemType"];
            
            //签到
            if ([shortcutItemType isEqualToString:@"1"]) {
                
                DFPointsMallViewController *newView = [[DFPointsMallViewController alloc]init];
                newView.title = @"积分商城";
                newView.hidesBottomBarWhenPushed = YES;
                [self.navigationController pushViewController:newView animated:NO];
                
            }
            
            //记体重
            if ([shortcutItemType isEqualToString:@"2"]) {
                
                RenwuRecordWeightViewController *newView = [[RenwuRecordWeightViewController alloc]init];
                newView.title = @"记录体重";
                newView.hidesBottomBarWhenPushed = YES;
                [self.navigationController pushViewController:newView animated:NO];
                
            }
            
            //记录饮食运动
            if ([shortcutItemType isEqualToString:@"3"]) {
                
                CalorieCalculatorViewController *newView = [[CalorieCalculatorViewController alloc]init];
                newView.title = @"记录饮食运动";
                newView.hidesBottomBarWhenPushed = YES;
                [self.navigationController pushViewController:newView animated:NO];
                
            }
            
            //发动态
            if ([shortcutItemType isEqualToString:@"4"]) {
                
                QuanziPubViewController *newView = [[QuanziPubViewController alloc]init];
                newView.title = @"发动态";
                MLNavigationController *mlNav = [[MLNavigationController alloc]initWithRootViewController:newView];
                [self.navigationController presentViewController:mlNav animated:YES completion:nil];
                
            }
            
            [SaveData removeValueFromSettingWithName:@"ShortcutItemType"];
            
        }

    下面这个是把数据记录到本地的方法,写下吧以免时间长忘记了

    +(id)getValueFromSettingWithName:(NSString *)name{
        //NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
        NSUserDefaults *defaults = [[NSUserDefaults alloc]initWithSuiteName:@"group.fitmissSharedDefaults"];
        id value = [defaults objectForKey:name];
        return value;
    }
    
    +(void)setValueToSettingWithName:(NSString *)name value:(id)value{
        //NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
        NSUserDefaults *defaults = [[NSUserDefaults alloc]initWithSuiteName:@"group.fitmissSharedDefaults"];
        [defaults setObject:value forKey:name];
        [defaults synchronize];
    }
    
    +(void)removeValueFromSettingWithName:(NSString *)name{
        //NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
        NSUserDefaults *defaults = [[NSUserDefaults alloc]initWithSuiteName:@"group.fitmissSharedDefaults"];
        [defaults removeObjectForKey:name];
        [defaults synchronize];
    }

    group.fitmissSharedDefaults是在开发者中心里开启的分组,不用这个,用引掉的那个也行的。

  • 相关阅读:
    UVa 12174 (滑动窗口) Shuffle
    UVa 1607 (二分) Gates
    CodeForces ZeptoLab Code Rush 2015
    HDU 1525 (博弈) Euclid's Game
    HDU 2147 (博弈) kiki's game
    UVa 11093 Just Finish it up
    UVa 10954 (Huffman 优先队列) Add All
    CodeForces Round #298 Div.2
    UVa 12627 (递归 计数 找规律) Erratic Expansion
    UVa 714 (二分) Copying Books
  • 原文地址:https://www.cnblogs.com/lear/p/5201540.html
Copyright © 2011-2022 走看看