In unserem ersten Blogeintrag (http://bht.mobilecoders.de/2010/11/hello-iphone/) haben wir mal kurz beschrieben worauf man sich Einstellen muss wenn man nen App schreiben will. In diesem Blog wollen wir euch anhand eines Beispiels das howto etwas näher bringen.
Wir haben mal das Accelerometer ausgelesen und die Werte auf UILabel und UIProgressViews (das sind die blauen Balken die im Appicon erscheinen wenn man eine neue App aus dem Store lädt) ausgegeben, dazu haben wir noch ein Imageview hinzugefügt um den Achsenbeschreibungen x,y und z auch eine Richtung zu geben. Aber nun mal zu sache!
Als erstes öffnet man ein leeres iPhone Projekt in xCode (z.B. die View-Based Application) welche ist eigentlich egal, der Unterschied besteht eigentlich nur in dem Template welches geladen wird. Das View-Based Template ist sehr simpel und daher für unser Vorhaben gut geeignet! Wenn das Projekt angelegt ist sieht man in XCode links die 4 angelegten Projektdateien (ProjektnameAppDelegate h/m und ProjektnameViewController h/m) wobei die .h – Datei die Headerdatei und .m die Implementierung darstellt. Wir werden alles in die ProjektnameViewController h/m Dateien schreiben, denn die AppDelegateDdateien sollte man nur editieren wenn es für die Funktion notwendig ist (bei uns nicht der Fall).
Als erstes die Headerdatei “ProjektnameViewController.h” (viewController_h). Hier fürgen wir als erstes das Delegateprotokoll für den Beschleunigungsmesser ein, danach alle Elemente die wir im Interface Builder (IB) verwenden wollen, also 3 Labels und 3 ProgressViews und anschließend noch ein UIAccerometer aus welchem wir die Beschleunigungswerte erhalten. Für diese Objekte werden dann noch mit “@property….” die Accesormethoden deklariert.
In der Implementierungsdatei “ProjektnameViewController.m”(viewController_m) werden zwei Methoden verwendet. In der “-(void)viewDidLoad”-Methode (wird vom Template erzeugt) steht was beim laden der Klasse ausgeführt werden soll, in unserem Fall müssen 3Dinge beachtet werden:
- das Zuweisen der Singelton Klasse von UIAccererometer
- setzen der Delegateklasse
- und setzen des Aktualisierungsintervalls
Intern werden jetzt alle 0.1s die Accerometerdaten ausgelesen und den Klassen zur Verfügung gestellt in denen das Delegate Protokoll, ein Objekt “UIAccelerometer” UND die Delegate Methode “-(void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration” Implementiert ist. Diese Methode ist der Schlüssel zum Auslesen/Anzeigen oder Verarbeiten der Beschleunigungswerte! In dem parameter “accerelration” sind die gewünschten Werte enthalten, die können als property des Objects über Punktnotation erreicht werden (z.B. accerleration.x).
Das wars….fast, denn noch zeigt das App nichts an, denn die angelegten Felder müssen nun noch im IB angelegt werden. Im Projektbrowser gibt es einen Ordner “Nib Files” in welchem die bereits erzeugten IB- Dateien liegen, hier klickt man doppelt auf “ProjektnameViewController.xib” und es öffnet sich der IB (siehe IB). Hier geht man in folgender Reihenfolge vor:
- das gewünschte Objekt (also hier Label oder Progressview in der Library suchen und ber Drag n’ Drop in das “Windows view” ziehen, danach
- im Objekt Browser auf Filesowner klicken, dann
- im Inspektor auf den 2. reiter von links klicken (“connections”)
- und anschließend die Namen der Outlets mit den Elementen per drag n’ drop verbinden
- speichern und fertig 🙂
Das wars dann, das App ist fertig und kann getestet werden! An dieser Stelle sei noch gesagt das wir mit dem Simulator hier nur wenig Freude haben denn der Wertet keine Beschleunigungsdaten aus…. aber auf einem realen Endgerät funktioniert es wunderbar!