MonoTouch: Anzeige der Benutzerposition auf einer MapView

Die Anzeige der Benutzerposition, ermittelt per GPS Chip, auf einer MapView ist einfach und besteht im wesentlichen aus zwei Schritten:

1. Ermittlung der Benutzerposition
2. Zentrierung der Karte zur Position

Für das Beispiel habe ich eine einfache View erstellt, die das MapView-Control enthält. Innerhalb der Methode DidViewLoad() frage ich den Event DidUpdateUserLocation ab, lasse die Benutzerposition per UIAlertView ausgeben und zentriere im Anschluss die Karte. Die gesamte Methode sieht wie folgt aus:

public override void ViewDidLoad ()
{
base.ViewDidLoad ();

this.mapView.ShowsUserLocation = true;

this.mapView.DidUpdateUserLocation += delegate(object sender, MonoTouch.MapKit.MKUserLocationEventArgs e)
{
this.mapView.SetCenterCoordinate(new CLLocationCoordinate2D(e.UserLocation.Coordinate.Latitude, e.UserLocation.Coordinate.Longitude), true);

UIAlertView alert = new UIAlertView();
alert.Title = "Position";
alert.Message = "Latitude: " + e.UserLocation.Coordinate.Latitude + ", Longitude: " + e.UserLocation.Coordinate.Longitude;
alert.AddButton("OK");

alert.Show();
};
}

Innerhalb des Simulators wird der Firmensitz von Apple zurückgegeben, auf einem Gerät natürlich die Position des Geräts.

Das Beispielprojekt kann hier runtergeladen werden.

MonoTouch: Festlegen der Start-View

Erstellt man ein neues MonoTouch Projekt, muss zunächst eine Start-View hinzugefügt werden. Dies ist empfehlenswert, damit die Standardoberfläche unangetastet bleibt und man als Entwickler alle Möglichkeiten der Oberfläche nutzen kann.

Folgende Schritte beschreiben wie man eine neue View hinzufügt, diese View als UITableViewController deklariert und als Start-View festlegt.

Hinzufügen einer neuen View inkl. Controller:

Mit Hilfe des Interface Designers wird nun festgelegt, dass diese View sofort gestartet werden soll. Weiterhin leite ich meine neue View nicht von der Klasse UIViewControler sondern von UITableViewController ab.

Hinzufügen eines TableView:

Änderung der Class-Identity:

Hinzufügen des NIB-Names:

Änderung der Hauptklasse:

Festlegen des Root-Controllers:

Zugegeben, diese Schritt per Screenshot zu erklären ist nicht einfach. Aus diesem Grund gibt es auch ein Video:

Das Beispielprojekt gibt es hier.

MonoTouch: Prüfen ob die Kamera verfügbar ist

Bevor die Kamera in einer Anwendung benutzt werden kann, muss zwingend geprüft werden ob sie überhaupt verfügbar ist. Folgender Code erledigt das:

public override void ViewDidLoad ()
{
base.ViewDidLoad ();

CameraButton.TouchDown += delegate(object sender, EventArgs e)
{
if(!UIImagePickerController.IsSourceTypeAvailable(UIImagePickerControllerSourceType.Camera))
{
UIAlertView alert = new UIAlertView();
alert.Title = "Camera";
alert.Message = "Camera is not available";
alert.AddButton("OK");
alert.Show();
}
};
}

Das Beispielprojekt gibt es hier.

Hinweis: This document contains issues marked for review before saving

Nach dem Anlegen einer neuen Solution und dem erstmaligen Bearbeiten der Oberfläche wird folgende Meldung ausgegeben.

Diese Meldung besagt lediglich, dass die momentane Version der Oberflächen-Datei nicht korrekt ist und aktualisiert werden solle. Nach dem Klick auf Review Issues erscheint folgendes Fenster.

In diesem muss nun die korrekte Version wie folgt ausgewählt werden.

Im Anschluss gehört die Fehlermeldung der Vergangenheit an.

 

MessageBox mit MonoTouch

Entwickelt man unter MonoTouch und innerhalb von iOS Umgebungen,  stellt man sich sehr schnell die Frage wie man eigentlich eine einfache MessageBox ausgibt, ganz so wie man es innerhalb des .NET Frameworks gewohnt ist. Der grundsätzliche Unterschied ist jedoch, dass es unter iOS keine Möglichkeit gibt eine modale MessageBox auszugeben, also eine MessageBox, die die aktuelle Verarbeitung unterbricht. Aus diesem Grund verwendet die folgende Lösung einen Event, der gefeuert wird sobald der Benutzer das gewünschte Button gedrückt hat. Die restliche Funktionalität ist recht eindeutig und einfach.

Benutzt wird die Klasse nahezu ähnlich wie im .NET Framework:

MessageBox box = new MessageBox();
box.OnMessageBoxClickedHandler += delegate(object sender, MessageBoxEventArgs e)
{
Console.WriteLine(e.Result.ToString());
};
box.Show("Test", "Test Message", MessageBoxButtons.YesNo);

Folgend die Klasse

using System;
using MonoTouch.UIKit;
using MonoTouch.Foundation;

namespace MyMessageBox
{
public enum MessageBoxButtons
{
Ok,
OkCancel,
YesNo,
YesNoAbort,
};

public enum MessageBoxResult
{
Ok,
Cancel,
Yes,
No,
Abort
}

public class MessageBoxEventArgs : EventArgs
{
public MessageBoxEventArgs (MessageBoxResult result)
{
this.Result = result;
}

public MessageBoxResult Result {
get;
set;
}
}

public class MessageBox
{
public delegate void NewMessageBoxEventHandler(object sender, MessageBoxEventArgs e);
public event NewMessageBoxEventHandler OnMessageBoxClickedHandler;

public void Show(string title, string message, MessageBoxButtons buttons)
{
using(UIAlertView alert = new UIAlertView())
{
alert.Title = title;
alert.Message = message;

switch(buttons)
{
case MessageBoxButtons.Ok:
alert.AddButton("Ok");
break;
case MessageBoxButtons.OkCancel:
alert.AddButton("Ok");
alert.AddButton("Cancel");
break;
case MessageBoxButtons.YesNo:
alert.AddButton("Yes");
alert.AddButton("No");
break;
case MessageBoxButtons.YesNoAbort:
alert.AddButton("Yes");
alert.AddButton("No");
alert.AddButton("Cancel");
break;
}

alert.Clicked += delegate(object sender, UIButtonEventArgs e)
{
switch(buttons)
{
case MessageBoxButtons.Ok:
ThrowEvent(MessageBoxResult.Ok);
break;
case MessageBoxButtons.OkCancel:
if(e.ButtonIndex == 0)
ThrowEvent(MessageBoxResult.Ok);
if(e.ButtonIndex == 1)
ThrowEvent(MessageBoxResult.Cancel);
break;
case MessageBoxButtons.YesNo:
if(e.ButtonIndex == 0)
ThrowEvent(MessageBoxResult.Yes);
if(e.ButtonIndex == 1)
ThrowEvent(MessageBoxResult.No);
break;
case MessageBoxButtons.YesNoAbort:
if(e.ButtonIndex == 0)
ThrowEvent(MessageBoxResult.Yes);
if(e.ButtonIndex == 1)
ThrowEvent(MessageBoxResult.No);
if(e.ButtonIndex == 2)
ThrowEvent(MessageBoxResult.Abort);
break;
}
};

alert.Show();
}
}

private void ThrowEvent(MessageBoxResult result)
{
MessageBoxEventArgs eventArgs = new MessageBoxEventArgs(result);

if(OnMessageBoxClickedHandler != null)
OnMessageBoxClickedHandler(this, eventArgs);
}
}
}

Das komplette Beispielprojekt kann hier runtergeladen werden.

Installation von MonoTouch

Mit MonoTouch ist es möglich mit Hilfe von C# iOS Anwendungen zu entwickeln. Die Installation aller erforderlichen Software-Pakete ist denkbar einfach, dennoch folgend die nötigen Schritte um im Anschluss schnell und unkompliziert entwickeln zu können.

Voraussetzungen
- Apple iPhone SDK (Demnach auch ein Apple Rechner)
- Mindestens Mac OS 10.5
- Neuste Mono Version
- Neuste MonoTouch Version
- Neuste MonoTouch – MonoDevelop Version

Installation Mono
Die Installation von Mono kann durch einen einfach Doppelklick gestartet werden – Alles weitere ist denkbar einfach und muss eigentlich nicht weiter erklärt werden.

Installation MonoTouch
Nach dem Download des Installationsarchiv kann die Installation durch einen Doppelklick gestartet werden.

Installation MonoDevelop
Die MonoDevelop Entwicklungsumgebung ermöglich das Schreiben von Anwendungen. Die Installation erfolgt ebenfalls durch einfaches Ziehen des Awendungsicon in das Anwendungsverzeichnis – Wie bei Apple eben üblich.

Nach erfolgreicher Installation kann die Entwicklungsumgebung und er iOS Simulator des iPhone SDK zum entwickeln der ersten Anwendung benutzt werden.

Nur noch wenige Tage: Multi-Touch Netbook und andere coole Preise gewinnen mit Windows Azure

Aufgabe beim Azure Now Gewinnspiel ist es, eine eigene Windows Azure Demo-Domäne einzurichten und dort eine Cloud Computing-Anwendung online zu stellen – nicht mehr. Das kann eine eigene Web-Anwendung sein oder ein Test-Projekt, das man bei Microsoft herunterladen kann. Dafür braucht man nicht länger als 15 Minuten und sichert sich hoffentlich noch ein schönes Weihnachtsgeschenk.

Alle Details, weiterführende Tutorials und Informationen zum Gewinnspiel findet Ihr hier: AzureNow Gewinnspiel – Jetzt teilnehmen!

Launch Event: Windows Azure Launch Day am 26.11.2009 in Stuttgart auf der Cloud Conf

Auf dem Windows Azure Platform Launch Day stellt Microsoft erstmalig die produktive Version von Windows Azure in Deutschland vor. Entwickler, IT-Dienstleister, Software-Hersteller und Unternehmen lernen hier, wie man die Microsoft Online Services (Sharepoint, Exchange, Office Web Applications) und die Windows Azure Platform einsetzen kann und wie man für Windows Azure Platform Anwendungen entwickelt. Auf diesem exklusiven Premiereevent erfahrt Ihr alles Wichtige über die Cloud Angebote von Microsoft und wie Unternehmen davon profitieren können. Jeder Teilnehmer erhält auch das Microsoft-Press Buch “Cloud Computing mit der Windows Azure Platform”.

Anmeldung und weitere Infos findet Ihr unter: http://go.microsoft.com/?linkid=9695893

Visual Studio Einstellungen zurücksetzen

Visual Studio bietet eine ganze Menge Kommandozeilen Parameter, um bestimmte Funktionen zu beinflussen oder abzustellen. Folgende ein paar wichtige Parameter, die ich benötigt habe ich ein Fehler beim Start einzugrenzen und letztendlich zu beheben:

/log – Protokolliert den Start von Visual Studio
/ResetSettings – Setzt alle Einstellungen zurück

Damit alle Parameter eingesehen werden können, muss die devenv.exe mit dem Kommando /? gestartet werden.