2017-01-03 18 views
7

Tôi tự hỏi làm cách nào để kiểm tra xem API iOSmới có khả dụng trên thiết bị hiện tại hay không. Có một số điều chúng ta càng cần phải kiểm tra: Cách kiểm tra xem Haptic Engine (UIFeedbackGenerator) có được hỗ trợ

  1. Thiết bị

    cần chạy iOS 10.0 trở lên
  2. Thiết bị này cần phải được một chiếc iPhone 7 hay muộn
  3. Các Haptic Engine cần phải được bật trong Cài đặt

hai kiểm tra đầu tiên có thể đạt được bằng #available(iOS 10, *) tuyên bố và một (hacky) thiết bị phát hiện, nhưng một trong những thứ hai dường như không được checkable.

Có ai đó biết giải pháp cho việc này không? Hoặc có lẽ chúng ta cần phải nộp một Apple Radar cho cái này. Cảm ơn!

Trả lời

4

Dựa trên Apple's UIFeedbackGenerator documentation, có vẻ như iOS thực hiện điều đó cho bạn.

Lưu ý rằng việc gọi các phương pháp này không trực tiếp phát trực tiếp. Thay vào đó, nó thông báo cho hệ thống của sự kiện. Hệ thống sau đó xác định có phát các phép rửa dựa trên thiết bị, trạng thái của ứng dụng , lượng pin còn lại và các yếu tố khác hay không.

Ví dụ, thông tin phản hồi haptic hiện đang chơi chỉ:

Trên một thiết bị với một hỗ trợ Taptic Engine (iPhone 7 và iPhone 7 Plus).

Khi ứng dụng đang chạy ở nền trước.

Khi cài đặt System Haptics được bật.

Thậm chí nếu bạn không cần phải lo lắng về việc kiểm tra xem thiết bị có thể làm thông tin phản hồi xúc giác, bạn vẫn cần phải đảm bảo nó được gọi là chỉ với iOS 10 hoặc cao hơn, do đó bạn có thể thực hiện điều đó với điều này:

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

Dưới đây là a quick summary of the various haptic feedback options sẵn trong iOS 10

+3

gì nếu bạn muốn quay lại sử dụng các AudioServicesPlaySystemSound cũ nếu động cơ taptic là không có sẵn? –

+0

@DanielLarsson Điều này có thể hữu ích. Bạn muốn kiểm tra iOS trước phiên bản 10. http://nshipster.com/swift-system-version-checking/ – Adrian

+0

@Adrian vừa được thử nghiệm với iOS 9, Dường như nó không làm bất cứ điều gì (không làm hỏng ứng dụng). – Idan

5

Có một số "điều tin" không có giấy tờ:

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

returns 2 cho các thiết bị với thông tin phản hồi xúc giác - iPhone 7/7 +, do đó bạn có thể dễ dàng sử dụng để tạo ra Phản hồi xúc giác:

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

lợi nhuận 1 cho iPhone 6S, đây là một dự phòng để tạo 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) 

trả về 0 cho iPhone 6 hoặc thiết bị cũ. Vì nó là loại điều không có giấy tờ, nó có thể chặn bạn trong giai đoạn xem xét, mặc dù tôi đã có thể vượt qua đánh giá và gửi ứng dụng với kiểm tra như vậy.

Thông tin chi tiết: http://www.mikitamanko.com/blog/2017/01/29/haptic-feedback-with-uifeedbackgenerator/

Các vấn đề liên quan