Bevegelseshendelser Del 1: Orientering og rystebevegelsesdeteksjon i iOS

Fremskritt innen mobil maskinvareteknologi, så vel som tilpasning av mainstream-programvare for mobile enheter, har uskarpt linjene mellom bærbare datamaskiner og nettbrett. Mobile enheter inkluderer imidlertid funksjoner som aldri før var forestilt på stasjonære eller bærbare systemer - muligheten til å oppdage og reagere på bevegelse.

De siste iOS-enhetene er utstyrt med sensorer designet for å identifisere og rapportere bevegelse. For eksempel har alle fjerde generasjon iOS-enheter utstyrt med et enkelt gyroskop og en klynge på tre akselerometre for konstant å spore bevegelse. Bevegelsesinformasjonen blir gjort tilgjengelig for iOS-appen din ved bruk av bevegelseshendelser. Når en bruker beveger eller roterer en enhet, behandler Core Motion-rammeverket informasjonen og kommuniserer gjennom varsler.

En kort historie

Mobile enheter har blitt en del av hverdagen vår. Linjen mellom stasjonære og bærbare datamaskiner er lett å forstå. Gamle skolebrukere husker en tid da det ikke var mulig å kjøre prosessorintensive applikasjoner på noe annet enn et stasjonært system. Omvendt vil en stasjonær datamaskin aldri bli vurdert for en biltur. Den største fordelen med en bærbar datamaskin for en student eller forretningsreisende er enkel - den er mobil. Det ser ut til å være en sterk trend at brukere velger et nettbrett eller en smarttelefon som en heltids erstatning til sin bærbare datamaskin. Det er ganske enkelt en del av teknologiutviklingen.

Inntil nylig falt nettbrett og bærbare datamaskiner i to distinkte klassifiseringer av brukerfunksjonalitet. Det var like mye av et gap mellom bærbare datamaskiner og nettbrett som det var mellom stasjonære systemer og bærbare datamaskiner. Den viktigste forskjellen er at ytelsesmulighetene til en tidlig bærbar PC aldri kunne sammenligne med kraften og utvidbarheten til et stasjonært system. Dette er absolutt ikke tilfelle når vi sammenligner en bærbar datamaskin med et nettbrett, eller til og med et nettbrett med en smarttelefon. Noen av funksjonene som en gang var unike for en bestemt enhetsklasse, er nå tilgjengelige på alle enheter. Berøringsskjermteknologi, for eksempel, finnes både på stasjonære datamaskiner, bærbare datamaskiner, nettbrett og smarttelefoner.

Bevegelsessensjonsteknologi forblir imidlertid unik for mobile enheter.

Som en type innspill, lar bevegelsesfølende teknologi brukeren bli fullstendig fordypet i en spilleapp. I stedet for en joystick, eller annen innbunden inndataenhet, roterer, vipper og vender nettbrettet eller smarttelefonen for å kontrollere visse aspekter av et spill.

Andre bruksområder for bevegelsesdeteksjon inkluderer den mer ofte brukte gjeldende enhetsorienteringsegenskapen tilgjengelig i UIDevice-klassen. Utviklere har ofte i oppgave å opprettholde to orienteringsspesifikke grensesnittoppsett - en for portrett og en for liggende. I visse tilfeller, som med Apples iOS-kalkulator-app, endres også funksjonaliteten. Den innebygde kalkulatoren på iPhone skifter fra en standard kalkulator i portrettmodus til en vitenskapelig kalkulator i liggende modus (figur A) .

Figur A

Oppdager endringer i enhetens retning

Bevegelseshendelser kan enten skyves til appen ved bruk av varsler, eller etterspørres etter behov. I begge tilfeller må det opprettes et første responder-objekt for å håndtere oppgaven. Sporing av retningen til en iOS-enhet krever ikke bruk av rammeverket for bevegelse. UIDevice-klassen er tilstrekkelig for å spore og håndtere generelle retningsendringer, og den fungerer på alle enheter som kjører iOS 2.0 og nyere.

De syv mulige verdiene for orienteringsegenskapen beskrevet i UIDevice Class Reference er:

  • UIDeviceOrientationUnknown - Den nøyaktige retningen til enheten kan ikke oppdages.
  • UIDeviceOrientationPortrait - Enheten er i portrettmodus, med startknappen nederst under skjermen.
  • UIDeviceOrientationPortraitUpsideDown - Enheten er i portrettmodus, med Hjem-knappen over skjermen.
  • UIDeviceOrientationLandscapeLeft - Enheten er i liggende modus, med hjemmeknappen til høyre.
  • UIDeviceOrientationLandscapeRight - Enheten er i liggende modus, med startknappen til venstre.
  • UIDeviceOrientationFaceUp - Enheten holdes vinkelrett på bakken, med skjermen vendt oppover.
  • UIDeviceOrientationFaceDown - Enheten holdes vinkelrett på bakken, med skjermen vendt ned.
Du forbereder iOS-appen din til å håndtere endringer i enhetens retning ved (1) å initialisere akselerometeret og (2) sette opp varslingshendelser ( oppføring 1.1 ). Dette gjøres vanligvis innenfor UIViewDidLoad-metoden for appen din.

Oppføring 1.1

 - (void) viewDidLoad () { 
 UIDevice currentDevice beginGeneratingDeviceOrientationNotifications; 
 NSNotificationCenter defaultCenter 
 addObserver bolig: 
 Velger: @selector (orientationDidChange :) 
 nevne: UIDeviceOrientationDidChangeNotification 
 objekt: nil; 
Når den er initialisert, utløser hver endring i enhetens retning en varsling. Informasjon sendes til metoden som er identifisert i velgeregenskapen (i dette tilfellet: retningDi bytte). Informasjon angående varsel vil bli gitt til den tilpassede metoden ( oppføring 1.2 ). Varslingen indikerer ganske enkelt at det skjedde en endring i enhetens retning. Du kan hente gjeldende retning ved å henvise til orienteringsegenskapen: UIDevice currentDevice orientering.

Oppføring 1.2

 - (ugyldig) orienteringDidChange: (NSNotification *) varsel { 
 // Få gjeldende retning 
 UIDeviceOrientationorientering = UIDevice currentDevice orientering; 
 // Håndter eventuelle endringer i enhetsretningen 
 { 
Seks av de syv mulige verdiene som returneres når du avstemmer gjeldende retning (listet over) representerer en mulighet for appen din til å svare. Det kan være lurt å svare bare på endringer i liggende eller portrettmodus. Med andre ord kan du legge til kode for å ignorere alle retninger bortsett fra portrett og liggende ( oppføring 1.3 ).

Oppføring 1.3

 // Hvis noen av de uønskede orienteringsverdiene returneres, avslutter du funksjonen 
 if (orientering == UIDeviceOrientationUnbekjent 
 || retning == UIDeviceOrientationFaceUp 
 || retning == UIDeviceOrientationFaceDown) { 
 komme tilbake; 
 } 

Oppdage ristebevegelser

En annen tilnærming til å oppdage og svare på bevegelseshendelser innebærer bruk av UIEvent-klassen. Detektering av riste-bevegelseshendelser krever ikke Core Motion-rammene. Faktisk, enhver iOS-app som bare trenger å kjenne statusen som følger av en bevegelseshendelse (dvs. orientering), Core Motion-rammen er unødvendig overhead. En shake-motion-hendelse har blitt brukt for å utløse alt fra "å slette skjermen" til "å rulle terningene." Når en bruker rister en iOS-enhet, blir informasjon om akselerometer evaluert for å avgjøre om det har oppstått en legitim ristegjenstand. For å håndtere bevegelseshendelser, må du implementere minst en av de to bevegelseshåndteringsmetodene: motionBegan: withEvent eller motionEnded: withEvent. Vanligvis brukes motionEnded: withEvent-metoden for å motta varsler ved avslutningen av en bevegelseshendelse. For å identifisere hendelsen som en bevegelsesrysshendelse, sjekk verdien av UIEventSubtype ( liste 1.4 ).

Oppføring 1.4

 - (void) motionEnded (UIEventSubtype) motion withEventUIEvent *) event { 
 if (bevegelse == UIEventSubtypeMotionShake) { 
 // Vi har nettopp oppdaget en bevegelses-risting 
 } 
 } 

Siste tanker

Bevegelsesporing er en kraftig funksjon i iOS. Core Motion-rammen gjør det enkelt å motta varsler om en bevegelsesrelatert hendelse. Det er opp til appen din å bestemme type hendelse, og hvordan du skal svare. Core Motion-rammeverket gir også tilgang til informasjon om det rå akselerometeret og gyroskopet . Dette er spesielt nyttig for apper som krever sanntidsinformasjon. For de fleste bruksområder gir imidlertid UIDevice- og UIEvent-klassene nok informasjon til å håndtere enhetsorientering og riste bevegelseshendelser.

Les også:

  • Bedre kode: Legg til e-postfunksjonalitet til Apple iOS-appene dine
  • Velg riktig tastatur på skjermen for iOS-appen din
  • Graner opp iOS-appene dine med enkle animasjoner: Del 1

© Copyright 2021 | pepebotifarra.com