检查iOS9设备是否支持3D触摸并启用

问题描述:

我试图访问特征集合并检查“forceTouchCapability”,但“forceTouchCapability”仅检查设备是否为iOS 9.0或更高版本。检查iOS9设备是否支持3D触摸并启用

因此,这意味着在任何装有iOS 9的设备上,强制触摸是“可用的”。我需要一种方法来检查用户设备(iPhone 6s)是否实际支持3D touch,并且我需要确保在辅助功能设置中实际启用了3D Touch选项。

+0

这是个坏消息 - 你在9.1测试版上试过了吗? –

+0

不,我们正在为将在几天内发布的应用程序添加3D触控功能,所以我们的目标是9.0。使用Xcode 7.0。 – Prodigga

+0

也许我做错了什么。 – Prodigga

我不小心把forceTouchCapability铸造成BOOL(用它作为我设置的返回值的方法的返回值)。我需要检查forceTouchCapability是否等于UIForceTouchCapabilityAvailable

相反的:

return [[MyView traitCollection] forceTouchCapability]; 

我需要:

return [[MyView traitCollection] forceTouchCapability] == UIForceTouchCapabilityAvailable; 
+0

请记住,如果您的应用程序支持iOS 8.x或更早版本以及iOS 9,则需要妥善保护此代码。 – rmaddy

+0

是的!谢谢,已经完成了:)进入那个已经适当已经是嘿。 – Prodigga

+0

swift version http://*.com/questions/33686640/swift-check-if-3d-touch-is-possible?lq=1 –

如果要实现这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"); 
    } 
} 
+0

谢谢 - 这是我的问题! – JimmyB

+0

它的三维触摸从设置禁用,如何检查这 – Shohrab

+0

@Shhrab此方法将自动检测到这一点。 –

有时候,我们只想有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:学到了艰辛的道路,之后开始应用程序崩溃的应用程序商店。