2017-01-03 133 views
7

我在想如何檢查新的iOS 10 API UIFeebackGenerator在當前設備上是否可用。有一些更多的東西,我們需要檢查:如何檢查是否支持觸覺引擎(UIFeedbackGenerator)

  1. 該設備需要運行iOS的10.0或更高版本
  2. 的設備需要一個iPhone 7或更高版本
  3. 觸覺引擎需要開啓在設置中

前兩個檢查可以使用#available(iOS 10, *)語句和(hacky)設備檢測來實現,但後者似乎不可檢查。

有人知道這個解決方案嗎?或者,也許我們需要爲這個文件提交Apple Radar。謝謝!

回答

4

基於Apple's UIFeedbackGenerator documentation,聽起來像iOS爲你做。

請注意,調用這些方法不會直接播放觸覺。相反,它通知系統該事件。 然後系統 根據設備, 應用程序狀態,剩餘電池電量以及其他因素來確定是否播放觸覺。

例如,觸覺反饋目前僅播放:

在一個設備與支持Taptic引擎(iPhone 7和iPhone 7 加)。

當應用程序在前臺運行時。

當系統觸覺設置啓用。

即使你不需要擔心檢查設備是否可以做的觸覺反饋,你仍然需要確保它被稱爲只與iOS 10或更高,這樣您就可以完成與此:

if #available(iOS 10,*) { 
     // your haptic feedback method 
    } 

這裏的a quick summary of the various haptic feedback options提供iOS的10

+3

如果你想退回到使用舊AudioServicesPlaySystemSound如果taptic引擎不可用? –

+0

@DanielLarsson這可能會對您有所幫助。你想在版本10之前檢查iOS。http://nshipster.com/swift-system-version-checking/ – Adrian

+0

@Adrian剛剛測試過iOS 9,看起來它只是不做任何事情(不崩潰的應用程序)。 – Idan

5

有一些無證 「私人的事情」:

UIDevice.currentDevice().valueForKey("_feedbackSupportLevel"); 

回報2與觸覺反饋設備 - iPhone 6/6 +讓您可以輕鬆地使用它來產生觸覺反饋:

let generator = UIImpactFeedbackGenerator(style: .heavy) 
generator.prepare() 
generator.impactOccurred() 

返回1爲iPhone 6S,這裏是產生taptic回退:

import AudioToolbox 

AudioServicesPlaySystemSound(1519) // Actuate `Peek` feedback (weak boom) 
AudioServicesPlaySystemSound(1520) // Actuate `Pop` feedback (strong boom) 
AudioServicesPlaySystemSound(1521) // Actuate `Nope` feedback (series of three weak booms) 

返回0爲iPhone 6或舊設備。由於它是一種無證件的東西,它可能會阻止你在審查階段,雖然我能夠通過審查和提交應用程序與這樣的檢查。

更多細節: http://www.mikitamanko.com/blog/2017/01/29/haptic-feedback-with-uifeedbackgenerator/