iPhone programozás alapjai IV. Gyakorlat
A mai előadás témái • I. Térképek és pozíció • MKMapView • GPS pozíció lekérése • II. Kamera kép kezelése • III. Gyorsulás érzékelő • IV. Push Notification
I. Térképek és Pozíció
MKMapView •
A térkép kezelést a MapKit framework tartalmazza
•
IB-ben találjuk az MKMapView osztályt, amely egy google maps megvalósítás
•
Kezeli magától a mozgatást, érintést be lehet állítani, hogy mutassa a pozíciót
•
Hívások a mozgatásra:
[mapView setCenterCoordinate:coord animated:YES] [mapView setRegion:region animated:YES]
Annotációk •
Térképre elhelyezett pontok, vonalak, tűk
•
Automatikusan mozog a térképpel
•
Alapvetően MKAnnotation megvalósítással és MKAnnotationView származtatott osztályokkal dolgozunk. Opcionálisan elhelyezhetünk calloutokat.
•
Legegyszerűbb megvalósítás CLLocationCoordinate2D coord; coord.latitude=47.5; coord.longitude=19.05; MKPointAnnotation* annotation=[[MKPointAnnotation alloc] init]; annotation.coordinate=coord; [mapView addAnnotation:annotation];
•További térkép infók: http://mithin.in/2009/06/22/using-iphone-sdkmapkit-framework-a-tutorial
GPS kezelése •
CoreLocation Framework szükséges hozzá
•
Használata nagyon egyszerű, inicializálás után delegate hívás, amint rendelkezésre áll adat, új adat esetén automatikusan hív
•
Érzékenysége beállítható, irányt is visszaad
. . locationManager = [[[CLLocationManager alloc] init] autorelease]; locationManager.delegate = self; // send loc updates to myself . . - (void)locationManager:(CLLocationManager *)manager didUpdateToLocation: (CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation . .
•További GPS infók: http://mobileorchard.com/hello-there-acorelocation-tutorial/
II. Kamera kép
Kamera elérése •
Kép készítése és feldolgozása UIImagePickerController
UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init]; imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera; imagePicker.delegate = self; imagePicker.allowsImageEditing = NO; [self presentModalViewController:imagePicker animated:YES]; . . - (void) imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { .
•További kamera infók: http://iphone.zcentric.com/2008/08/28/ using-a-uiimagepickercontroller/
Folyamatos képrögzítés •
Alapból így egyszerre csak 1 kép
•
Szerencsére a képrögzítés kívülről vezérelhető
•
showCameraControls property-t NO-ra kell állítani
•
Ezután takePicture hívásra készül el a kép és hívja a delegatet
•
Egyszerre csak 1 futhat
•További kamera infók: http://developer.apple.com/library/ios/
#documentation/UIKit/Reference/UIImagePickerController_Class/ UIImagePickerController/UIImagePickerController.html
Kép kinyerése •
Ahhoz, hogy a képet feldolgozzuk szükség van a pontokra.
•
Ehhez a képet át kell alakítanunk megfelelő formára
•
Kicsit összetett, de a következő linken van hozzá forráskód:
•
https://gist.github.com/739132
•
Ha OpenCV-t akarunk használni, akkor a következő linken van fordítás és kép átalakítás is:
•
http://niw.at/articles/2009/03/14/using-opencv-on-iphone/en
III. Gyorsulás érzékelő
Accelerometer kezelése •
Hasonló elven működik mint a GPS
•
Beállítható frissítési intervallummal rendelkezik
. . UIAccelerometer *accelerometer = [UIAccelerometer sharedAccelerometer]; accelerometer.delegate = self; . . -(void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration{ . .
•További infók: http://www.edumobile.org/iphone/iphoneprogramming-tutorials/how-to-use-accelerometer-in-iphone/
III. Notifications
PUSH NOTIFICATION
Push Notification •
Megoldás a felhasználó elérésére, amikor nem fut az alkalmazás
•
Központi szolgáltatás, Apple szerver: APNS
•
Perzisztens TCP csatorna alapú kommunikáció, minimalizált akku fogyasztás
•
Nem indíthatja el az alkalmazást csak figyelmeztetés után
•
Összetett architektúra, mindenképpen speciális szerver kell hozzá.
•
Megoldás: Local Notification, adott időpontban jön fel
•További infók: http://developer.apple.com/library/ios/ #DOCUMENTATION/NetworkingInternet/Conceptual/ RemoteNotificationsPG/Introduction/Introduction.html
Köszönöm a figyelmet!
Sallai Péter
[email protected]