检查iOS9设备是否支持3D触摸并启用
我试图访问特征集合并检查“forceTouchCapability”,但“forceTouchCapability”仅检查设备是否为iOS 9.0或更高版本。检查iOS9设备是否支持3D触摸并启用
因此,这意味着在任何装有iOS 9的设备上,强制触摸是“可用的”。我需要一种方法来检查用户设备(iPhone 6s)是否实际支持3D touch,并且我需要确保在辅助功能设置中实际启用了3D Touch选项。
我不小心把forceTouchCapability
铸造成BOOL
(用它作为我设置的返回值的方法的返回值)。我需要检查forceTouchCapability
是否等于UIForceTouchCapabilityAvailable
。
相反的:
return [[MyView traitCollection] forceTouchCapability];
我需要:
return [[MyView traitCollection] forceTouchCapability] == UIForceTouchCapabilityAvailable;
如果要实现这UIViewController
,时序问题。 viewDidLoad
将在生命周期的后期返回Available
时返回Unknown
。
- (void)traitCollectionDidChange:(nullable UITraitCollection *)previousTraitCollection {
[self checkForForceTouch];
}
- (void)checkForForceTouch {
if ([self.traitCollection respondsToSelector:@selector(forceTouchCapability)] &&
self.traitCollection.forceTouchCapability == UIForceTouchCapabilityAvailable) {
NSLog(@"Force touch found");
}
}
有时候,我们只想有forceTouchCapability
值现在同步,并且不希望等待traitCollectionDidChange:
事件。在这种情况下,我们可以使用非常愚蠢的功能是这样的:
public func forceTouchCapability() -> UIForceTouchCapability {
return UIApplication.sharedApplication().keyWindow?.rootViewController?.traitCollection.forceTouchCapability ?? .Unknown
}
if ([MyView respondsToSelector:@selector(traitCollection)] &&
[MyView.traitCollection respondsToSelector:@selector(forceTouchCapability)] &&
MyView.traitCollection.forceTouchCapability == UIForceTouchCapabilityAvailable) {
return YES;
}
我的观点是,如果你是支持的iOS 7和的iOS 8还有,记得要检查这两个条件:[MyView respondsToSelector:@selector(traitCollection)]
和[MyView.traitCollection respondsToSelector:@selector(forceTouchCapability)]
。
如果保持第一张支票,应用程序适用于iOS 7罚款,但在iOS 8 崩溃基本上,苹果推出traitCollection
财产的iOS 8但从UITraitCollection仅在iOS版9
添加forceTouchCapability
财产.H:
@property (nonatomic, readonly) UITraitCollection *traitCollection NS_AVAILABLE_IOS(8_0);
@property (nonatomic, readonly) UIForceTouchCapability forceTouchCapability NS_AVAILABLE_IOS(9_0);
PS:学到了艰辛的道路,之后开始应用程序崩溃的应用程序商店。
这是个坏消息 - 你在9.1测试版上试过了吗? –
不,我们正在为将在几天内发布的应用程序添加3D触控功能,所以我们的目标是9.0。使用Xcode 7.0。 – Prodigga
也许我做错了什么。 – Prodigga