Non-ARC Files in einem ARC-Projekt zum Laufen bekommen

Die Tage hatte ich das Problem, dass ich von einem GitHub Projekt Files in mein Xcode Projekt einbinden wollte, es jedoch leider zunächst nicht so ganz klappen wollte, da mein iOS Projekt das Automatic Reference Counting (ARC) nutzt, das GitHub Projekt jedoch nicht.

Wie ihr ganz ohne Anpassen der non-ARC Files das Projekt zum laufen bekommt ist einfacher als gedacht.

Dazu fügt ihr ganz simpel unter Build Phases -> Compile Sources bei den betroffenen Files das Flag: -fno-objc-arc hinzu (siehe dazu das Bild).

NON-ARCING Files

Getestet unter Xcode 4.6

Core Animation: Einfaches Fading-Effekt Demo

In dieser Demo wollen wir einen recht einfachen Effekt mit Core Animation realisieren.

Wir wollen erreichen, dass ein einfacher Text nach dem Laden der View eingeblendet wird. Diese Einblendung soll in einem Zeitfenster von 5 Sekunden stattfinden und schön „weich“ vonstatten gehen.

Dann legen wir direkt einmal los. Zunächst erstellen wir eine Single Based Application. Anschließend wechseln wir direkt zu unserem Storyboard und fügen ein UILabel ein, in das wir einen beliebigen Text schreiben:

UILabel in der View

Anschließend bearbeiten wir unsere .h-Datei.
Wir deklarieren zum einen unser UILabel als IBOutlet und legen eine UIView an.
Zudem deklarieren wir die Methode, die später unsere Animation ausführen soll.

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController
{
    IBOutlet UILabel *label;
    UIView *myView;
}

@end

Direkt danach geht es an die .m-Datei.
Die schon implementierte Methode „– (void)viewWillAppear:(BOOL)animated“ wird automatisch aufgerufen sobald die betroffene View geladen wurde. Das scheint genau das zu sein was wir suchen, daher vervollständigen wir deren Implementierung bzw. passen diese auf unsere Bedürfnisse an:

- (void)viewWillAppear:(BOOL)animated
{
    // Labels alpha value is 0 (invisible)
    label.alpha = 0;
    [UIView beginAnimations:nil context:nil];

    // Labels alpha value will increase to 1 (duration = 5 seconds)
    [UIView setAnimationDuration:5];
    label.alpha = 1;
    [UIView commitAnimations];

    [super viewWillAppear:animated];
}

Anschließend sollte euer nach und nach Label schön geschmeidig erscheinen, wenn ihr eure App kompiliert.

Höhe / Height eines UIPickerView ändern

Wie ihr vielleicht festgestellt habt, könnt ihr die Höhe/Height eines UIPickerViews nicht über den (ehemaligen) InterfaceBuilder verändern. Die Höhe ist dort „ausgegraut“.

UIPickerView - Höhe kann hier nicht editiert werden
Um die Höhe doch zu ändern, öffnet das Storyboard-File oder eben eure xib/nib-Datei mit z.B. Dashcode, dann könnt ihr das XML editieren.
Sucht nun nach dem UIPickerView – ich habe einfach mal nach der ursprünglichen Höhe von 216 gesucht (da sowieso noch nicht mehr in der View war) und bin gleich fündig geworden. Anschließend habe ich die Höhe hier im Beispiel auf 150 geändert, die Datei abgespeichert und schon war die UIPickerView in meiner Storyboard View in der gewünschten Größe drin.
Ihr könnt auch alternativ nach der von mir markierten Zeile im nächsten Bild suchen um den Eintrag zu finden.

UIPickerView - XML abändern / xib-Datei editieren

Erstellt in folgender Umgebung:
Xcode 4.2 – iPhone 5.0 Simulator

### Übrigens: Kann mir vielleicht jemand sagen, ob der ehemalige Interface Bulder (der ja jetzt nicht mehr Interface Builder heißt) überhaupt noch einen Namen hat? ###

Xcode – Automatischen Schein / Glossy Effekt bei iPhone und iPad Icons entfernen

In XCode 3 konntet ihr den Glossy Effekt bzw. diesen automatischen Schein, der auf Icons angewandt wird entfernen, indem ihr UIPrerenderedIcon in eure info.plist eingefügt habt (so steht es auch Stand heute, 15.11.2011, noch in der Apple Doku).

In XCode 4 müsst ihr nach „Icon already includes gloss effect“ suchen und den Wert auf TRUE setzen. Bei mir war das schon in der info.plist enthalten, nur ein bisschen versteckt. Habe eine Single View Application erstellt und die Einstellung unter folgender Hierarchie gefunden:

Icon Glossy Effekt entfernen

Countdown Timer für das iPhone erstellen

iPhone Countdown Uhr/ Countdown Timer

An dieser Stelle wollen wir heute einen einfachen Countdown Timer erstellen, der jeweils im Sekundentakt von einer vorgegebenen Zeit herunter zählt.
Am besten Ihr erstellt eine Single-View Application, denn mehr benötigen wir eigentlich nicht.

Single View Application erstellen

Single View Application erstellen

Step 1:
Fangen wir einfach an und klicken uns zuerst das User Interface zusammen.
Eigentlich benötigen wir nur ein Label, dass uns den Timer anzeigt – dieses Label soll zudem permanent geupdatet werden aber dazu kommen wir später. Ich habe hier zwei Label verwendet, eines für den Timer und eines soll lediglich sobald der Timer auf Null steht „Timer finished!“ anzeigen.

Zwei UILabel auswählen

Zwei UILabel auswählen

Fertiges User Interface

Fertiges User Interface

Step 2:
Nun geht es an die Headerdatei. In diese kommt folgender Code:

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController {
    IBOutlet UILabel *informer;
    IBOutlet UILabel *timerLabel;
    NSTimer *timer;
    NSInteger countdown;
}

- (void)tick:(id)sender;
- (void)updateCountdown:(id)sender;

@property (nonatomic, retain)NSTimer *timer;
@property (nonatomic, retain)UILabel *timerLabel;
@property (nonatomic, retain)UILabel *informer;

@end

Wir müssen, wie ihr oben seht, zwei Outlets anlegen (unsere Label), eine Integer Variable und ein NSTimer Objekt.
Zudem brauchen wir zwei Methoden (tick und updateCountdown – könnt ihr aber natürlich bennen wie ihr wollt).
Weiter legen wir die properties an um von der bequemen Objective-C  Punktnotationssyntax (nenn ich jetzt einfach mal so) gebrauch zu machen.

Step 3:
Nun geht es an die Implementierung in der .m-Datei.

@implementation ViewController
@synthesize timer;
@synthesize timerLabel;
@synthesize informer;

Der Code, den ihr oben seht kommt direkt unter @implementation.
Anschließend sollten wir uns darum kümmern, was nach dem Laden der View passieren soll.
Dazu gibt es eine vorgefertigte Methode im Code, die hier schon von mir mit weiterem Code für unsere App gefüllt wurde:

- (void)viewDidLoad
{
    [super viewDidLoad];
    countdown = 10;

    timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(tick:) userInfo:nil repeats:YES];
}

Kurze Erläuterung:
Hier wird ein NSTimer Objekt erzeugt, dass im 1-Sekunden Takt zählt. Der Selector ist wie ihr vielleicht schon
gesehen habt unsere angelegte Funktion. Diese legt fest wie der Timer arbeiten soll und wird mit repeats:YES wiederholt aufgerufen.

Weiter geht es mit der eben erwähnten tick: – Funktion:

- (void)tick:(id)sender {
    countdown--;

    if (countdown == 3) {
        timerLabel.textColor = [UIColor redColor];
    }

    if (countdown == 0) {
        timerLabel.text = [NSString stringWithFormat:@"0"];
        informer.text = [NSString stringWithFormat:@"Timer finished!"];
        [timer invalidate];
    }

    [self updateCountdown:(id)sender];
}

Zu Beginn wird die Countdown Variable immer dekrementiert. Dann soll sich die Farbe des Timers, oder eigentlich des Labels, ändern, sobald man 3 Sekunden erreicht hat.
Wenn der Countdown 0 erreicht, dann wird der timerLabel Text geändert (auf Null) und hier kommt nun unser zweites Label ins Spiel – dieses soll wie schon einleitend gesagt „Timer finished!“ anzeigen.
Hinterher muss der Timer/Countdown annuliert werden. Dies geschieht mit  [timer invalidate].
Was jedes Mal geschehen muss ist, dass die updateCountdown-Methode aufgerufen wird. Diese sieht wie folgt aus und ändert jede Sekunde den Title des Labels:

– (void)updateCountdown:(id)sender {
timerLabel.text = [NSString stringWithFormat:@"%i", countdown];
}

Step 4:
Abschließend müsst ihr noch die beiden IBOutlets (eure beiden Label) mit dem Interface verbinden – dann habt ihr es geschafft und könnt die App starten!

Outlets mit Interface verbinden

Outlets mit Interface verbinden

Countdown zählt herunter

Countdown zählt herunter

Countdown bei Null

Countdown bei Null

Erstellt in folgender Umgebung:
Xcode 4.2 – iPhone 5.0 Simulator

iPhone Keyboard-Type / Tastatur-Typ ändern

Falls ihr dem User eurer iPhone App an gewissen Stellen nicht die Standard  QWERTZ-Tastatur zur Verfügung stellen wollt, sondern ein bestimmtes Tastaturlayout, wie beispielsweise nur den Nummernblock, dann könnt ihr das wiefolgt einstellen:

Step 1:

Anmerkung: Ich habe eine kleine App erstellt, die die Summe zweier eingegebener Zahlen berechnet.

Markiert (falls nötig) euer UITextField, das das Ausklappen der Tastatur bewirken soll.

Markiertes UITextField

Für weitere Textfelder geht ihr analog vor.

Step 2:

Schaut euch die Eigenschaften des Textfelds an. Hier seht ihr einen Punkt „Keyboard“ (in Xcode 3.1 hieß der Punkt noch Keyboard Type) und momentan ist dieser auf Default gesetzt.

Keyboard Default

Nun klickt ihr auf das Drop-Down Menü und wählt eure gewünschte Tastatur-Art aus. Ich nehme bei mir sinnvollerweise ein Number Pad, damit meine User keine Buchstaben addieren.

Number Pad iPhone

Wenn die App dann läuft, dann offenbart sich nach einem Klick in eines der Beiden Textfelder das Number Pad, das ich für meine Applikation wollte.

Number Pad in Aktion

(Blogpost basiert auf Xcode 4.1)