14

特性コレクションにアクセスして「forceTouchCapability」をチェックしようとしましたが、「forceTouchCapability」はデバイスが iOS 9.0 以上であるかどうかをチェックするだけです。

したがって、これは、iOS 9 を搭載したすべてのデバイスで、強制タッチが「利用可能」であることを意味します。ユーザーのデバイス (iPhone 6s) で 3D タッチが実際にサポートされているかどうかを確認する方法が必要であり、アクセシビリティ設定で 3D タッチ オプションが実際に有効になっていることを確認する必要があります。

4

6 に答える 6

24

誤って a にキャストforceTouchCapabilityしていましたBOOL(ブール値を返すように設定されたメソッドへの戻り値として使用)。forceTouchCapabilityが と等しいかどうかを確認する必要がありましたUIForceTouchCapabilityAvailable

それ以外の:

return [[MyView traitCollection] forceTouchCapability];

私は欲しい:

return [[MyView traitCollection] forceTouchCapability] == UIForceTouchCapabilityAvailable;
于 2015-09-28T02:10:13.597 に答える
3
if ([MyView respondsToSelector:@selector(traitCollection)] &&
    [MyView.traitCollection respondsToSelector:@selector(forceTouchCapability)] &&
    MyView.traitCollection.forceTouchCapability == UIForceTouchCapabilityAvailable) {
        return YES;
    }

要点は、iOS 7iOS 8もサポートしている場合は、両方の条件を確認することを忘れないでください:[MyView respondsToSelector:@selector(traitCollection)][MyView.traitCollection respondsToSelector:@selector(forceTouchCapability)].

最初のチェックを維持すると、アプリは iOS 7 では正常に動作しますが、iOS 8 ではクラッシュします。基本的に、Apple は iOS 8 でプロパティを導入しましたが、iOS 9 でのみプロパティをtraitCollection追加しました。forceTouchCapability

UITraitCollection.hから:

@property (nonatomic, readonly) UITraitCollection *traitCollection NS_AVAILABLE_IOS(8_0);

@property (nonatomic, readonly) UIForceTouchCapability forceTouchCapability NS_AVAILABLE_IOS(9_0);

PS: アプリが App Store でクラッシュし始めた後、苦労して学びました。

于 2017-01-22T18:36:18.283 に答える