How to Support 3D Touch - Static Action on Xcode6

Background

As Apple mentioned in developer documents:

With iOS 9, new iPhone models add a third dimension to the user interface.

A user can now press your Home screen icon to immediately access functionality provided by your app.
Within your app, a user can now press views to see previews of additional content and gain accelerated access to features.

U.S managers hope adopt part of them(home screen static action) in current release. But we need to huge effort(e.g IPv6 related task) to upgrade Xcode7, and current release had been in last development sprint. So I have to try implement ‘home screen static action’ feature using Xcode6.

Issues

After took a rough review about Apple’s documents. To implement ‘home screen static action’ feature, Apple introduced one new class named UIApplicationShortcutItem and one new application delegate method named - (void) application: (UIApplication *)application performActionForShortcutItem: (UIApplicationShortcutItem *)shortcutItem completionHandler;

Above api were introduced since iOS9, how make it happen using Xcode6(maxim iOS version, iOS 8)?

How

Basically we would use runtime to resolve above issues. See below:

@class UIApplicationShortcutItem;

- (void) handleShortCutItem: (UIApplicationShortcutItem *)shortcutItem;
{
    if ([[shortcutItem valueForKey: @"type"] isEqualToString: @"Foo"])
    {
        /* quick action 'Foo' */
    }
    else if ([[shortcutItem valueForKey: @"type"] isEqualToString: @"Bar"])
    {
        /* quick action 'Bar' */
    }
    else
    {
        /* default handle */
    }
}

- (void) application: (UIApplication *)application performActionForShortcutItem: (UIApplicationShortcutItem *)shortcutItem completionHandler:(void(^)(BOOL successed))completionHandler;
{
    [self handleShortCutItem: shortcutItem];
}

More Code

Modify the Info.plist

    <key>UIApplicationShortcutItems</key>
<array>
    <dict>
        <key>UIApplicationShortcutItemIconFile</key>
        <string>UIApplicationShortcutIconTypeCompose</string>
        <key>UIApplicationShortcutItemTitle</key>
        <string>Foo</string>
        <key>UIApplicationShortcutItemType</key>
        <string>Foo</string>
        <key>UIApplicationShortcutItemUserInfo</key>
        <dict>
            <key>key1</key>
            <string>value1</string>
        </dict>
    </dict>
    <dict>
        <key>UIApplicationShortcutItemIconType</key>
        <string>UIApplicationShortcutIconTypeFavorite</string>
        <key>UIApplicationShortcutItemTitle</key>
        <string>Bar</string>
        <key>UIApplicationShortcutItemType</key>
        <string>Bar</string>
        <key>UIApplicationShortcutItemUserInfo</key>
        <dict>
            <key>key2</key>
            <string>value2</string>
        </dict>
    </dict>
</array>

Modify ApplicationDelegate

Need to judge if rawOptions contains UIApplicationLaunchOptionsShortcutItemKey key, if yes handle it and return NO to avoid execute performActionForShortcutItem repeatedly.

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

    [self handleShortCutItem: shortcutItem];

    RC_DLOG_TAG_END_ELAPSED;
}

- (BOOL) application: (UIApplication *)application didFinishLaunchingWithOptions: (NSDictionary *)rawOptions;
{
    BOOL shouldPerformAdditionalDelegateHandling = YES;

    /* please replace the true value of UIApplicationLaunchOptionsShortcutItemKey from Xcode7 */
    if (rawOptions && [rawOptions objectForKey: @"UIApplicationLaunchOptionsShortcutItemKey"])
    {
        shouldPerformAdditionalDelegateHandling = NO;

        [self handleShortCutItem: [rawOptions objectForKey: @"UIApplicationLaunchOptionsShortcutItemKey"]];
    }

    return shouldPerformAdditionalDelegateHandling;
}

Reference

Getting Started with 3D Touch

UIApplicationShortcutItems

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值