Archiv für die Kategorie „coding“

UiTableview mit einer großen Menge an Zellen

Mittwoch, 25. August 2010

Eine UiTableView ist ja generell für die Haltung von einer großen Anzahl an Elementen und deren Darstellung gedacht. Wer jedoch versucht eine wirklich große Zahl (1000+) in eine TableView zu setzen, wird unter Umständen feststellen, das dies enorm langsam passiert.

Die Lösung ist die Methode heightForRowAtIndexPath. Diese wird für jede Zelle neu aufgerufen, in diesem Fall also über 1000 mal, was eine enorme Ladezeit nach sich zieht.

Als Lösung, sofern alle Zellen gleich hoch sein sollen, kann die rowHeight auch bei Initialisierung der TableView gesetzt werden.

GPS Distanz von Nutzer zu Punkt bestimmen

Dienstag, 6. Juli 2010

Um Die Distanz eines iPhone Users zu einem bestimmten Punkt zu bekommen, kann man die CLLLocation Methode getDistanceFrom wunderbar nutzen.
Vorraussetzung ist die Position des Gerätes. In der Methode

- (void)locationManager:(CLLocationManager *)manager
didUpdateToLocation:(CLLocation *)newLocation
fromLocation:(CLLocation *)oldLocation

kann dann folgender Codeschnipsel genutzt werden:

// hier die gewünschten GPS Koordinaten eingeben, die Beispieldaten sind von der Infinity Loop
CLLocation *DestinationLocation = [[CLLocation alloc]initWithLatitude:37.3307060 longitude:-122.0414486];

//Distanz in m berechnen
double dist = [newLocation  distanceFromLocation:festplatzlocation];

Um zu erkennen, ob der Nutzer innerhalb eines bestimmten Radiusses um einen Punkt ist, kann man eine maxdist definieren und danach darauf prüfen.

double maxdist = 3500;

if(dist<maxdist){

NSLog(@”kleiner”);
NSString *Distanzstring = [[NSStringalloc]initWithFormat:@”Distanz: %g (m)”,dist];
UIAlertView *alert = [[UIAlertViewalloc] initWithTitle:nilmessage:Distanzstring delegate:selfcancelButtonTitle:@”OK”otherButtonTitles:nil]; [alert show];
[alert release];
}else {
NSLog(@”grösser”);
}

Deprecated ist die folgende Methode / Bestimmung der Distanz

//double dist = [newLocation getDistanceFrom:festplatzlocation] / 1000;

Fertig ist eine schöne und einfache Möglichkeit, die position des Nutzer zu verwenden.

(Corelocation.Framework muss natürlich in das Projekt eingebunden sein)

Xcode Custom Back Button Action

Donnerstag, 17. Juni 2010

Wer in seiner iPhone / iPad App eine Navigation-Bar nutzt, wird vllt. irgendwann an den Punkt gelangen, an dem er, aus welchen Gründen auch immer, eigene Aktionen bei Betätigung des BackButtons durchführen möchte.

Sei es, dass Speicher sofort freigegeben werden soll, eine Audio-File sofort gestoppt oder Meldungen an den Nutzer ausgegeben werden sollen. Hierzu ist eine mögliche Lösung, den vorhandenen BackButton durch einen einen eigenen zu ersetzen.

Dieser Button führt bei Touch dann eine Methode aus, in der die eigenen Anweisungen stehen, abgeschlossen durch die Anweisung, das aktuelle Element aus dem NavigationStack zu entfernen (pop).

Einziges “Problem” ist das Layout des Buttons, diesen wie einen Back Button erscheinen zu lassen, ermöglicht das Framwork three20. Folgender Codeausschnitt veranschaulicht die Vorgehensweise:

-(void) goBack
{
//Write your custommethods
NSlog(“hello custom Back Button”);
//Go back
[self.navigationControllerpopViewControllerAnimated:YES];
}

-(id) initWithName: (NSString*)name initwithBackround:(NSString*)backround {

// … Stuff

//Create the custom back button

TTButton *backButtonView = [TTButtonbuttonWithStyle:@"toolbarBackButton:"title:@"Back"];

[backButtonView addTarget:selfaction:@selector(goBack) forControlEvents:UIControlEventTouchUpInside];

[backButtonView sizeToFit];

UIBarButtonItem *backButton = [[UIBarButtonItemalloc] initWithCustomView:backButtonView];

self.navigationItem.leftBarButtonItem = backButton;

[backButton release];

// Stuff

}

XCode Projekt umbennen

Donnerstag, 6. Mai 2010

Wer mal ein XCode Projekt umbenennen wollte/musste war bis dato ziemlich aufgeschmissen. Das Umbenennen war ein einziger Krampf. Mit der neuen XCode Version hat Apple hier aber nachgelegt und ein Feature eingbaut, was man eigentlich in jeder Entwicklungsumgebung erwartet: Project Rename

Um ein XCode iPhone / iPad Projekt neu zu benennen einfach folgende Schritte durchlaufen:

1. Project -> Rename

2. Neuen Namen eingeben

3. Xcode überprüfen lassen, auf was sich die Änderung auswirkt

4. Snapshot erstellen lassen

5. fertig

Schlemmen iPhone App

Mittwoch, 14. April 2010

Schlemmen iPhone App Logo

Heute mal ein klein wenig Werbung in eigener Sache:mit “Schlemmen” ist gestern die iPhone Applikation zum Schlemmerblock veröffentlicht worden.

Technisch basiert die App auf einem XML Parser der Daten einer Schnittstelle auswertet und verarbeitet. Positon auf einer Karte, verschiedene Kartendarstellung, Umkreissuche, Restaurant Spezialitäten und Kontaktmöglichkeiten sind einige Kernfunktionaitäten der Anwendung und werden sukzessive ausgebaut.

Positive Bewertungen und Verbesserungsvorschläge werden gerne angenommen. Die nächsten Versionen sind schon in der Mache.

Enstanden ist die Anwendung unter Regie von AYCS.

UISegmentedControl Farbe ändern

Donnerstag, 18. März 2010

Die meisten iPhone Interface Objekte sind farblich anpassbar an den gewünschten Look. Ein UISegmentedControl jedoch lässt sich zumindest über den Interface Builder nicht so schön “stylen”. Wie kann eine farbliche Anpassung geschehen, ohne die komplette Funktionalität mit UIButtons nachbauen zu müssen?

Die Lösung steckt in UISegmentedControlStyleBar und einem händischen Eingreifen in das Design dessen!

CGRect frame = CGRectMake( 0,0,100,40);
mySegmentedControl.segmentedControlStyle = UISegmentedControlStyleBar;
mySegmentedControl.frame = frame;
mySegmentedControl.segmentedControlStyle = UISegmentedControlStylePlain;
mySegmentedControl.selectedSegmentIndex = selectedAttributeIndex;
mySegmentedControl.backgroundColor=[UIColor redColor];
[mySegmentedControl setTintColor:UIColor blueColor];

Alternativ kann die UIColor natürlich auch folgendermaßen gesetzt werden:

[UIColor colorWithRed:.5 green:.1 blue:.2 alpha:1]

An dieser Stelle sei auf die ClassReference von Apple verwiesen: UIColor zusätzlich passend zu der Thematik: UINavigationBar Color ändern und ein UIColor Cheatsheet

struct NSString expected struct NSMutableString

Dienstag, 9. März 2010

Bei einer solchen Ausgangssituation:

NSMutableString *currentElementValue;

if(currentElementValue==nil){
NSlog(@”nil Value”);
currentElementValue=@”";
}

Wirft XCode folgenden Fehler:

warning: incompatible Objective-C types assigning ’struct NSString *’, expected ’struct NSMutableString *’

Lösung:

currentElementValue=[[[NSMutableString alloc] initWithString:@”"]autorelease];

uiimage uiimageview drehen rotieren

Mittwoch, 3. März 2010

Wer ein UIImage drehen möchte, wird merken, dass es nicht funktioniert, was auch sinnvoll ist. Im Grunde möchte man ja die umschließende UIImageView drehen.

Dies funktioniert mit dem folgenden Snippet:

CGAffineTransform rotate = CGAffineTransformMakeRotation(M_PI_2);
[konkreteImageView setTransform:rotate];

Wobei der gewünschte Winkel durch eine Multiplikation von PI zustande kommt.

NSInvalidUnarchiveOperationException

Dienstag, 2. März 2010

Stürzt neuerdings die iPhone Anwendung mit dem Fehler “NSInvalidUnarchiveOperationException” ab?

Lösung:

  • neueste iPhone SDk nutzen
  • Build -> “Clean all targets”
  • Build
  • Run

Läuft!

NSString vs NSMutableString

Freitag, 12. Februar 2010

Wer mit Strings im iPhone / iPad Umfeld hantiert, wird früher oder später vor das Problem gestellt, wie hänge ich korrekt einen String an einen anderen.

Dabei ergeben sich zwei Möglichkeiten, entweder mit NSMutableString zu arbeiten, oder bei dem herkömmlichen NSString einen appendString vorzunehmen.

Lösung NSMutableString:

NSMutableString string1 = [[NSMutableString alloc] initWithString:@”hallo”];
[string1 appendString:@"welt"];

Lösung NSString:

NSString string2 = [[NSString alloc] initWithString:@"hallo2"];
string2 = [[[string2 autorelease] stringByAppendingString:@"welt2"] retain];

Wichtig bei der NSString Lösung, auf das autorelease und retain zu achten, da sonst Speicher nicht freigegeben wird!