iOS9系列专题一——3D Touch(二)

简介: iOS9系列专题一——3D Touch

五、Home Screen Quick Action使用与相关api详解


   iOS9为我们提供了两种屏幕标签,分别是静态标签和动态标签。


1、静态标签


   静态标签是我们在项目的配置plist文件中配置的标签,在用户安装程序后就可以使用,并且排序会在动态标签的前面。


我们先来看静态标签的配置:


首先,在info.plist文件中添加如下键值(我在测试的时候,系统并没有提示,只能手打上去):


image.png


先添加了一个UIApplicationShortcutItems的数组,这个数组中添加的元素就是对应的静态标签,在每个标签中我们需要添加一些设置的键值:


必填项(下面两个键值是必须设置的):


UIApplicationShortcutItemType 这个键值设置一个快捷通道类型的字符串


UIApplicationShortcutItemTitle 这个键值设置标签的标题


选填项(下面这些键值不是必须设置的):


UIApplicationShortcutItemSubtitle 设置标签的副标题


UIApplicationShortcutItemIconType 设置标签Icon类型


UIApplicationShortcutItemIconFile  设置标签的Icon文件


UIApplicationShortcutItemUserInfo 设置信息字典(用于传值)


我们如上截图设置后,运行程序,用我们前面的方法进行测试,效果如下:


image.png


2、动态标签


动态标签是我们在程序中,通过代码添加的,与之相关的类,主要有三个:


UIApplicationShortcutItem 创建3DTouch标签的类


UIMutableApplicationShortcutItem 创建可变的3DTouch标签的类


UIApplicationShortcutIcon 创建标签中图片Icon的类


因为这些类是iOS9中新增加的类,所以其api的复杂程度并不大,下面我们来对其中方法与属性进行简要讲解:


@interface UIApplicationShortcutItem : NSObject <NSCopying, NSMutableCopying>

//下面是两个初始化方法 通过设置type,title等属性来创建一个标签,这里的icon是UIApplicationShortcutIcon对象,我们后面再说

- (instancetype)initWithType:(NSString *)type localizedTitle:(NSString *)localizedTitle localizedSubtitle:(nullable NSString *)localizedSubtitle icon:(nullable UIApplicationShortcutIcon *)icon userInfo:(nullable NSDictionary *)userInfo NS_DESIGNATED_INITIALIZER;

- (instancetype)initWithType:(NSString *)type localizedTitle:(NSString *)localizedTitle;

//下面这是一些只读的属性,获取相应的属性值

@property (nonatomic, copy, readonly) NSString *type;

@property (nonatomic, copy, readonly) NSString *localizedTitle;

@property (nullable, nonatomic, copy, readonly) NSString *localizedSubtitle;

@property (nullable, nonatomic, copy, readonly) UIApplicationShortcutIcon *icon;

@property (nullable, nonatomic, copy, readonly) NSDictionary<NSString *, id <NSSecureCoding>> *userInfo;

//这个类继承于 UIApplicationShortcutItem,创建的标签可变

@interface UIMutableApplicationShortcutItem : UIApplicationShortcutItem

@property (nonatomic, copy) NSString *type;

@property (nonatomic, copy) NSString *localizedTitle;

@property (nullable, nonatomic, copy) NSString *localizedSubtitle;

@property (nullable, nonatomic, copy) UIApplicationShortcutIcon *icon;

@property (nullable, nonatomic, copy) NSDictionary<NSString *, id <NSSecureCoding>> *userInfo;


@end

//这个类创建标签中的icon

@interface UIApplicationShortcutIcon : NSObject <NSCopying>

//创建系统风格的icon

+ (instancetype)iconWithType:(UIApplicationShortcutIconType)type;

//创建自定义的图片icon

+ (instancetype)iconWithTemplateImageName:(NSString *)templateImageName;

@end

创建好标签后,将其添加如application的hortcutItems数组中即可,示例如下:


- (void)viewDidLoad {

   [super viewDidLoad];

   // Do any additional setup after loading the view, typically from a nib.

   //创建

   UIApplicationShortcutItem * item = [[UIApplicationShortcutItem alloc]initWithType:@"two" localizedTitle:@"第二个标签" localizedSubtitle:@"看我哦" icon:[UIApplicationShortcutIcon iconWithType:UIApplicationShortcutIconTypePlay] userInfo:nil];

   添加

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

}

效果如下:


image.png


这里,将系统风格icon的枚举列举如下:


typedef NS_ENUM(NSInteger, UIApplicationShortcutIconType) {

   UIApplicationShortcutIconTypeCompose,//编辑的图标

   UIApplicationShortcutIconTypePlay,//播放图标

   UIApplicationShortcutIconTypePause,//暂停图标

   UIApplicationShortcutIconTypeAdd,//添加图标

   UIApplicationShortcutIconTypeLocation,//定位图标

   UIApplicationShortcutIconTypeSearch,//搜索图标

   UIApplicationShortcutIconTypeShare//分享图标

} NS_ENUM_AVAILABLE_IOS(9_0);

3、响应标签的行为


类似推送,当我们点击标签进入应用程序时,也可以进行一些操作,我们可以看到,在applocation中增加了这样一个方法:



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


当我们通过标签进入app时,就会在appdelegate中调用这样一个回调,我们可以获取shortcutItem的信息进行相关逻辑操作。


这里有一点需要注意:我们在app的入口函数:



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


也需要进行一下判断,在launchOptions中有UIApplicationLaunchOptionsShortcutItemKey这样一个键,通过它,我们可以区别是否是从标签进入的app,如果是则处理结束逻辑后,返回NO,防止处理逻辑被反复回调。


几点注意:


1、快捷标签最多可以创建四个,包括静态的和动态的。


2、每个标签的题目和icon最多两行,多出的会用...省略


六、结语


       关于3DTouch在UIView中的预览功能和UITouch中新增加的力度属性的应用,因为不好演示,这里就不再总结,大家可以通过头文件中相应的类和属性来了解他们,最后,如有疏漏和错误之处,欢迎指正。


 

目录
相关文章
|
开发工具 iOS开发 git
iOS9系列专题一——3D Touch(一)
iOS9系列专题一——3D Touch
150 0
iOS9系列专题一——3D Touch(一)
|
iOS开发
iOS开发--3D Touch的基本使用
1.桌面快捷菜单项 效果如图: 1.桌面快捷菜单项 效果如图: 1.桌面快捷菜单项 效果如图: 桌面快捷菜单 点击之后的效果如图: 点击桌面快捷菜单的效果 接下来看下具体实现:1).在-application:didFinishLaunchingWithOptions:方法中用-setShortcutItems:方法来添加快捷菜单项。
|
API 开发工具 iOS开发
|
2月前
|
API 数据安全/隐私保护 iOS开发
利用uni-app 开发的iOS app 发布到App Store全流程
利用uni-app 开发的iOS app 发布到App Store全流程
95 3
|
4月前
|
存储 iOS开发
iOS 开发,如何进行应用的本地化(Localization)?
iOS 开发,如何进行应用的本地化(Localization)?
122 2
|
4月前
|
存储 数据建模 数据库
IOS开发数据存储:什么是 UserDefaults?有哪些替代方案?
IOS开发数据存储:什么是 UserDefaults?有哪些替代方案?
42 0
|
2月前
|
API 开发工具 Android开发
iOS 和 Android 平台的开发有哪些主要区别?
iOS与Android开发区别:iOS用Objective-C/Swift,App Store唯一下载渠道;Android用Java/Kotlin,多商店发布(如Google Play、华为市场)。设计上,iOS简洁一致,Android灵活可定制。开发工具,iOS用Xcode,Android用Android Studio。硬件和系统多样性,iOS统一,Android复杂。权限管理、审核流程及API各有特点,开发者需依据目标平台特性进行选择。
32 3
|
2天前
|
前端开发 Android开发 iOS开发
【Flutter前端技术开发专栏】Flutter在Android与iOS上的性能对比
【4月更文挑战第30天】Flutter 框架实现跨平台移动应用,通过一致的 UI 渲染(Skia 引擎)、热重载功能和响应式框架提高开发效率和用户体验。然而,Android 和 iOS 的系统差异、渲染机制及编译过程影响性能。性能对比显示,iOS 可能因硬件优化提供更流畅体验,而 Android 更具灵活性和广泛硬件支持。开发者可采用代码、资源优化和特定平台优化策略,利用性能分析工具提升应用性能。
【Flutter前端技术开发专栏】Flutter在Android与iOS上的性能对比
|
2天前
|
存储 Swift iOS开发
使用Swift开发一个简单的iOS应用的详细步骤。
使用Swift开发iOS应用的步骤包括:创建Xcode项目,设计界面(Storyboard或代码),定义数据模型,实现业务逻辑,连接界面和逻辑,处理数据存储(如Core Data),添加网络请求(必要时),调试与测试,根据测试结果优化改进,最后提交至App Store或其它平台发布。
9 0