可能很多人都是通过下面的代码判断手机是否支持3D Touch功能的吧!
if (self.traitCollection.forceTouchCapability == UIForceTouchCapabilityAvailable)
{
//进行一系列3D Touch的逻辑处理
[self registerForPreviewingWithDelegate:self sourceView:viewHeader];
NSLog(@"3D Touch 可用!");
}
else
{
NSLog(@”3D Touch 无效”);
}
在iOS9及以上是没有问题, 但是,如果是iOS9 下面的系统呢(其实用iOS8系统的用户还是蛮多的)?会直接崩溃。
forceTouchCapability 属性是在iOS9才有的,很多人的开发环境都是最新的SDK,这个属性都有,很容易忽略掉。
注册3D Touch的功能 很多都是在程序初始化的时候启动,想想APP刚启动就崩溃是一种什么体验?
因此,我们如果要使用这个功能一定要做好兼容不同的系统,具体判断:
if ([self.traitCollection respondsToSelector:@selector(forceTouchCapability)])
{
//iOS 9 会崩溃
if (self.traitCollection.forceTouchCapability == UIForceTouchCapabilityAvailable){
[self registerForPreviewingWithDelegate:self sourceView:viewHeader];
NSLog(@"3D Touch 可用!");
}
else{
NSLog(@"3D Touch 无效");
}
}
现在苹果审核这么慢,热更新还不让用,希望能减少这种看似无关紧要却严重影响使用的bug吧