Jak iPhone może raz ustawić wibrację?
Na przykład, gdy gracz traci życie lub gra się kończy, iPhone powinien wibrować.
ios
cocoa-touch
avfoundation
vibration
system
źródło
źródło
Odpowiedzi:
Z „ Samouczka iPhone'a: lepszy sposób na sprawdzenie możliwości urządzeń iOS ”:
Istnieją dwie pozornie podobne funkcje, które przyjmują parametr
kSystemSoundID_Vibrate
:Najpierw dodaj strukturę AudioToolbox
AudioToolbox.framework
do celu w Fazach kompilacji.Następnie zaimportuj ten plik nagłówka:
źródło
AudioServicesPlayAlertSound(UInt32(kSystemSoundID_Vibrate))
(przynajmniej od wersji beta 2)Swift 2.0+
AudioToolbox przedstawia teraz
kSystemSoundID_Vibrate
jakoSystemSoundID
typ, więc kod jest następujący:Zamiast przechodzić przez dodatkowy etap rzucania
(Rekwizyty do @Dov)
Oryginalna odpowiedź (Swift 1.x)
Oto, jak to robisz na Swift (na wypadek, gdybyś miał takie same kłopoty jak ja)
Połącz z
AudioToolbox.framework
(Przejdź do projektu, wybierz cel, buduj fazy, Połącz pliki binarne z bibliotekami, dodaj tam bibliotekę)Po zakończeniu:
Tandetne jest to, że
SystemSoundID
jest to po prostutypealias
(fantazyjne szybkietypedef
) dlaUInt32
, ikSystemSoundID_Vibrate
jest regularneInt
. Kompilator daje błąd dla próby z obsadąInt
doUInt32
, ale błąd brzmi „nie można przekonwertować do SystemSoundID”, co jest mylące. Dlaczego jabłko po prostu nie sprawiło, że szybki enum jest poza mną.@ aponomarenko zajmuje się szczegółami, moja odpowiedź dotyczy tylko Swifterów.
źródło
AudioServicesPlaySystemSound(kSystemSoundID_Vibrate)
i skompilowałem się dobrzeProstym sposobem jest skorzystanie z usług audio:
źródło
Miałem z tym duży problem w przypadku urządzeń, które w jakiś sposób wyłączały wibracje, ale potrzebowaliśmy, aby działała niezależnie, ponieważ ma to kluczowe znaczenie dla funkcjonowania naszej aplikacji, a ponieważ jest to tylko liczba całkowita w udokumentowanym wywołaniu metody, przejdzie uprawomocnienie. Więc wypróbowałem kilka dźwięków, które były poza dobrze udokumentowanymi tutaj: TUNER88 / iOSSystemSoundsLibrary
Natknąłem się na 1352, który działa niezależnie od cichego przełącznika lub ustawień urządzenia
(Settings->vibrate on ring, vibrate on silent)
.źródło
zawiera następującą notatkę:
lub
źródło
W przypadku telefonu iPhone 7/7 Plus lub nowszego użyj tych trzech interfejsów API interfejsu Haptic Feedback.
Dostępne interfejsy API
W przypadku powiadomień:
Dostępne style
.error
,.success
i.warning
. Każdy ma swój charakterystyczny charakter.Z dokumentów :
Dla prostych wibracji:
Dostępne style
.heavy
,.medium
i.light
. Są to proste wibracje o różnym stopniu „twardości”.Z dokumentów :
Gdy użytkownik wybrał element
Jest to najmniej zauważalny ze wszystkich haptików, dlatego jest najbardziej odpowiedni, gdy haptics nie powinien przejmować funkcji aplikacji.
Z dokumentów :
Notatki
Podczas korzystania z tych interfejsów API warto pamiętać o kilku sprawach.
Nie herbata
W rzeczywistości nie tworzysz dotyku. Państwo zażądać system wygenerować dotykowych. System podejmie decyzję w oparciu o poniższe:
Dlatego system po cichu zignoruje twoją prośbę o dotyk, jeśli nie jest to możliwe. Jeśli wynika to z nieobsługiwanego urządzenia, możesz spróbować:
Zastąp komentarze w instrukcjach
switch
-case
, a ten haptyczny kod generowania będzie przenośny na inne urządzenia z systemem iOS. Wygeneruje najwyższy możliwy poziom dotyku.Uwaga B
prepare()
metodę ustawiania go w stan gotowości. Korzystanie z gry Przykład: Możesz wiedzieć, że gra wkrótce się zakończy, ponieważ użytkownik ma bardzo niski poziom zdrowia lub znajduje się w pobliżu niebezpieczny potwór.W takim przypadku przygotowanie silnika Taptic Engine zapewniłoby lepszą jakość i czułość.
Załóżmy na przykład, że Twoja aplikacja używa rozpoznawania gestów panoramy w celu zmiany widocznej części świata. Chcesz, aby haptik generował się, gdy użytkownik „patrzy” na 360 stopni. Oto jak możesz użyć
prepare()
:źródło
import UIKit
!haptic
tej metody. Nie dzwoniszimpactOccured
w tej samej instancji, do której dzwoniszprepare
.A jeśli używasz frameworka Xamarin (monotouch), po prostu zadzwoń
źródło
Podczas moich podróży odkryłem, że jeśli spróbujesz wykonać jedną z poniższych czynności podczas nagrywania dźwięku, urządzenie nie będzie wibrować, nawet jeśli jest włączone.
Moja metoda została wywołana w określonym czasie przy pomiarze ruchów urządzeń. Musiałem zatrzymać nagrywanie, a następnie uruchomić je ponownie po wystąpieniu wibracji.
Tak to wyglądało.
recorder
jest instancją AVRecorder.Mam nadzieję, że pomoże to innym, którzy mieli wcześniej ten sam problem.
źródło
W iOS 10 i nowszych iPhone'ach możesz także używać haptic API. Ta dotykowa informacja zwrotna jest bardziej miękka niż API AudioToolbox.
W przypadku scenariusza GAME OVER odpowiednie informacje zwrotne dotyczące interfejsu użytkownika powinny być odpowiednie.
UIImpactFeedbackGenerator(style: .heavy).impactOccurred()
Możesz użyć innych stylów dotykowych .
źródło
W Swift:
źródło
W moim przypadku korzystałem z AVCaptureSession. AudioToolbox był w fazie kompilacji projektu i został zaimportowany, ale nadal nie działał. Aby to zadziałało, zatrzymałem sesję przed wibracjami i kontynuowałem po niej.
źródło
Możesz użyć
1) AudioServicesPlayAlertSound (kSystemSoundID_Vibrate);
na iPhone'a i kilka nowszych iPodów.
2) AudioServicesPlaySystemSound (kSystemSoundID_Vibrate);
na iPady.
źródło