3DTouch 开发过程记录,按功能模块记录

3DTouch 开发过程记录,按功能模块记录

思维导图

1..添加 Home Screen Quick Actions 的两种方式

解释:
1. Home Screen Quick Actions 就是通过按压应用图标出现的快捷启动菜单,可以添加添加标题,副标题,还有效果图片(系统UIApplicationShortcutIconType枚举中已经预制了好多图片).
2. 快捷菜单允许的最多显示的项目为 4个.
3. 两种创建方式可以共存,但是先加载info 然后才是代码添加的item.
4. icon的位置,如图的icon就在右边.通过拖动图标,可以看出这个现象是根据APP位置居左居右,icon一直靠屏幕边框的方向

这就是Home Search Quick Actinos

  1. 快捷菜单关键字说明:

    keyDescriptionrequired
    UIApplicationShortcutItemType事件的唯一标识,可以通过这个标识来辨别你具体点击了哪个事件Y
    UIApplicationShortcutItemTitle标题,在没有子标题的情况下如果标题太长能自动换行Y
    UIApplicationShortcutItemSubtitle子标题,在标题的下方N
    UIApplicationShortcutItemIconType枚举选取系统中的一个图标类型N
    UIApplicationShortcutItemIconFile自定义一个图标,以单一颜色35x35的大小展示,如果设置这个,UIApplicationShortcutItemIconType将不起作用N
    UIApplicationShortcutItemUserInfo字典,里面可以添加各种key、value对N

1..静态info.plist方法添加

这种方式就是通过预先设置info.plist文件内容,添加启动方式.
<array>
    <dict>
        <key>UIApplicationShortcutItemType</key>
        <string>com.mycompany.myapp.openfavorites</string>
        <key>UIApplicationShortcutItemIconFile</key>
        <string>open-favorites</string>
        <key>UIApplicationShortcutItemTitle</key>
        <string>第一个Item</string>
        <key>UIApplicationShortcutItemUserInfo</key>
        <dict>
            <key>key1</key>
            <string>value1</string>
        </dict>
        <key>UIApplicationShortcutItemSubtitle</key>
        <string>啦啦啦啦啦啦啦啦啦啦啦啦</string>
    </dict>
    <dict>
        <key>UIApplicationShortcutItemType</key>
        <string>com.mycompany.myapp.newmessage</string>
        <key>UIApplicationShortcutItemIconType</key>
        <string>UIApplicationShortcutIconTypeCompose</string>
        <key>UIApplicationShortcutItemTitle</key>
        <string>New Message</string>
        <key>UIApplicationShortcutItemUserInfo</key>
        <dict>
            <key>key2</key>
            <string>value2</string>
        </dict>
    </dict>
    <dict>
        <key>UIApplicationShortcutItemType</key>
        <string>com.mycompany.myapp.newmessage</string>
        <key>UIApplicationShortcutItemIconType</key>
        <string>UIApplicationShortcutIconTypeCompose</string>
        <key>UIApplicationShortcutItemTitle</key>
        <string>3</string>
        <key>UIApplicationShortcutItemUserInfo</key>
        <dict>
            <key>key2</key>
            <string>value2</string>
        </dict>
    </dict>
    <dict>
        <key>UIApplicationShortcutItemType</key>
        <string>com.mycompany.myapp.newmessage</string>
        <key>UIApplicationShortcutItemIconType</key>
        <string>UIApplicationShortcutIconTypeCompose</string>
        <key>UIApplicationShortcutItemTitle</key>
        <string>4</string>
        <key>UIApplicationShortcutItemUserInfo</key>
        <dict>
            <key>key2</key>
            <string>value2</string>
        </dict>
    </dict>
    <dict>
        <key>UIApplicationShortcutItemType</key>
        <string>com.mycompany.myapp.newmessage</string>
        <key>UIApplicationShortcutItemIconType</key>
        <string>UIApplicationShortcutIconTypeCompose</string>
        <key>UIApplicationShortcutItemTitle</key>
        <string>4</string>
        <key>UIApplicationShortcutItemUserInfo</key>
        <dict>
            <key>key2</key>
            <string>value2</string>
        </dict>
    </dict>
</array>

总结

2..动态方法,通过代码创建 UIApplicationShortCutItem实例,添加到UIApplication的shortcutItem中

通过以下代码,动态设定快捷菜单:

    UIApplicationShortcutIcon *shortIcon =[UIApplicationShortcutIcon iconWithType:UIApplicationShortcutIconTypeUpdate];
    UIApplicationShortcutItem * shortItem =[[UIApplicationShortcutItem alloc] initWithType:@"One" localizedTitle:@"Me is few " localizedSubtitle:nil icon:shortIcon userInfo:nil];

    [UIApplication sharedApplication].shortcutItems = @[shortItem];

通过 “Home QA” 启动APP , API中提供了下面这个方法,其中shortcutItem中包含了我们启动的一些信息,type,userInfo 等,可以通过这些判断来决定我们要做什么操作.

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

关于 completionHandler解释(目前我还没有太透彻的理解):
Call this block after your quick action implementation completes,
returning YES or NO depending on the success or failure of your implementation code.

2.. Peek && Pop && Peek quick actions

关于 Peek:
这个功能需要在ViewController中来实现.首先,当前要实现PeekView的A-VC要遵从<UIViewControllerPreviewingDelegate>协议,下面说代码部分,首先要判断一下当前设备是否开启了3DTouch(因为用户可以在”设置”中关闭),如果3DTouch开启了,就注册一下实现代理的VC和响应的View:

判断当前设备是否开启3DTouch:

forceTouchCapability 是个枚举类型,可以CMD点击进去看一下.

    if (self.traitCollection.forceTouchCapability == UIForceTouchCapabilityAvailable)
    {
        NSLog(@"Available");

        [self registerForPreviewingWithDelegate:self sourceView:btn];

    }

上面这是我们主动判断,也有一种情况就是,APP启动了,然后进入设置将3DTouch关闭了,我们将通过这个方法进行判断:

To be overridden as needed to provide custom behavior when the environment’s traits change.The UITraitCollection object before the interface environment changed.

-(void)traitCollectionDidChange:(UITraitCollection *)previousTraitCollection
{
    if (self.traitCollection.forceTouchCapability == UIForceTouchCapabilityUnavailable)
    {
        NSLog(@"Available");

        [self registerForPreviewingWithDelegate:self sourceView:btn];

    }
}
Peek:

Peek

A-VC 中要实现这两个代理:

按压进入 “Peek”:

- (nullable UIViewController *)previewingContext:(id <UIViewControllerPreviewing>)previewingContext viewControllerForLocation:(CGPoint)location NS_AVAILABLE_IOS(9_0);
-(UIViewController*)previewingContext:(id<UIViewControllerPreviewing>)previewingContext viewControllerForLocation:(CGPoint)location
{
    if ([self.presentedViewController isKindOfClass:[ViewController class]]) {
        return nil;
    }

    ViewController * view =[[ViewController alloc]init];
    view.view.frame =self.view.frame;

    UIImageView *imagev =[[UIImageView  alloc] initWithImage:[UIImage imageNamed:@"0.png"]];

    view.view =imagev;

    return view;
}

持续用力按压 “进入页面B-VC”

- (void)previewingContext:(id <UIViewControllerPreviewing>)previewingContext commitViewController:(UIViewController *)viewControllerToCommit NS_AVAILABLE_IOS(9_0);
-(void)previewingContext:(id<UIViewControllerPreviewing>)previewingContext commitViewController:(UIViewController *)viewControllerToCommit
{    
    [self showViewController:viewControllerToCommit sender:self]; 
}
Peek Quick:

Peek Quick

UIViewControllerPreviewingDelegate中还有一个方法,B-VC要遵循这个协议,而且B-VC中要实现-(NSArray<id<UIPreviewActionItem>> *)previewActionItems,
实现了这个方法,在A-VC中在此按压出现PeekView就出现了快捷菜单了.通过这个方法返回
这个快捷菜单的数据,可以是一个二维数组,比如:@[@[],@[]],如下:

-(NSArray<id<UIPreviewActionItem>> *)previewActionItems
{
    // 生成UIPreviewAction
    UIPreviewAction *action1 = [UIPreviewAction actionWithTitle:@"Action 1" style:UIPreviewActionStyleDefault handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) {
        NSLog(@"Action 1 selected");
    }];

    UIPreviewAction *action2 = [UIPreviewAction actionWithTitle:@"Action 2" style:UIPreviewActionStyleDestructive handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) {
        NSLog(@"Action 2 selected");
    }];

    UIPreviewAction *action3 = [UIPreviewAction actionWithTitle:@"Action 3" style:UIPreviewActionStyleSelected handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) {
        NSLog(@"Action 3 selected");
    }];

    UIPreviewAction *tap1 = [UIPreviewAction actionWithTitle:@"tap 1" style:UIPreviewActionStyleDefault handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) {
        NSLog(@"tap 1 selected");
    }];

    UIPreviewAction *tap2 = [UIPreviewAction actionWithTitle:@"tap 2" style:UIPreviewActionStyleDestructive handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) {
        NSLog(@"tap 2 selected");
    }];

    UIPreviewAction *tap3 = [UIPreviewAction actionWithTitle:@"tap 3" style:UIPreviewActionStyleSelected handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) {
        NSLog(@"tap 3 selected");
    }];

    UIPreviewActionGroup *group1 = [UIPreviewActionGroup actionGroupWithTitle:@"Action Group" style:UIPreviewActionStyleDefault actions:@[action1, action2, action3]];
    UIPreviewActionGroup *group2 = [UIPreviewActionGroup actionGroupWithTitle:@"Action Group" style:UIPreviewActionStyleDefault actions:@[tap1, tap2, tap3]];

    return @[group1,group2];;
}

参考文档:
<<官方API文档>>
<<浅谈3D Touch(1) – Home screen quick action>>
<<浅谈3D Touch(2) – UITouch && Peek && Pop>>
<<【文档】在iPhone上使用3D Touch>>

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
项目:使用 JavaScript 编写的杀死幽灵游戏(附源代码) 杀死鬼魂游戏是使用 Vanilla JavaScript、CSS 和 HTML 画布开发的简单项目。这款游戏很有趣。玩家必须触摸/杀死游荡的鬼魂才能得分。您必须将鼠标悬停在鬼魂上 - 尽量得分。鬼魂在眨眼间不断从一个地方移动到另一个地方。您必须在 1 分钟内尽可能多地杀死鬼魂。 游戏制作 这个游戏项目只是用 HTML 画布、CSS 和 JavaScript 编写的。说到这个游戏的特点,用户必须触摸/杀死游荡的幽灵才能得分。游戏会根据你杀死的幽灵数量来记录你的总分。你必须将鼠标悬停在幽灵上——尽量得分。你必须在 1 分钟内尽可能多地杀死幽灵。游戏还会显示最高排名分数,如果你成功击败它,该分数会在游戏结束屏幕上更新。 该游戏包含大量的 javascript 以确保游戏正常运行。 如何运行该项目? 要运行此游戏,您不需要任何类型的本地服务器,但需要浏览器。我们建议您使用现代浏览器,如 Google Chrome 和 Mozilla Firefox。要玩游戏,首先,单击 index.html 文件在浏览器中打开游戏。 演示: 该项目为国外大神项目,可以作为毕业设计的项目,也可以作为大作业项目,不用担心代码重复,设计重复等,如果需要对项目进行修改,需要具备一定基础知识。 注意:如果装有360等杀毒软件,可能会出现误报的情况,源码本身并无病毒,使用源码时可以关闭360,或者添加信任。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值