Kategorie 'iPhone'


10 nützliche Snippets für Apple iPhone

Führen Sie eine Methode, nach n Sekunden

Die ganze Familie performSelector ist wirklich interessant und kann in einer Vielzahl von Fällen nützlich. Die einfachste und häufigste Anwendung ist wie folgt:

1
2
3
4
5
@selector ( myMethod ) withObject : nil afterDelay : 3 ] ; [Self performSelector: @ selector (myMethod) withObject: nil afterDelay: 3];
/ /
void ) myMethod { - (Void) {myMethod
"Hello World!" ) ; NSLog (@ "Hallo Welt!");
}

Sind jedoch der Ansicht, dass der "Timer" ist nicht korrekt. Dieses Verfahren sollte daher verwendet werden, wenn es eine "erhebliche" zeitliche Präzision erforderlich ist.

Rufen Sie die Version des

1
2
version = [ [ [ NSBundle mainBundle ] infoDictionary ] objectForKey : @ "CFBundleVersion" ] ; NSString * version = [[[ NSBundle mainBundle] infoDictionary] objectForKey: @ "CFBundleVersion"];
"versione = %@" , version ) ; NSLog (@ "Version =% @", Version);

JA, wahr oder TRUE?

e TRUE sono in pratica la stessa edentica cosa: Going to Kamm durch die Kernel Apple iPhone können Sie erkennen, dass YES , true , und TRUE grundsätzlich dasselbe Edentia:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/ / Definition von JA
# Define YES (BOOL) 1
# Define NO (BOOL) 0

/ / Definition der wahren
# Define TRUE 1
# Define false 0

/ / Definition von TRUE
# If! Defined (TRUE)
# Define TRUE 1
# Endif

# If! Defined (FALSE)
# Define FALSE 0
# Endif

Zumindest für den Moment ...

Vibration

1
2
3
# Import <AudioToolbox/AudioToolbox.h>
/ /
; AudioServicesPlaySystemSound (kSystemSoundID_Vibrate);

CGImageRef Zeiger von einem UIImage

1
2
3
4
[ UIImage imageNamed : @ "LittleHeart.png" ] ; UIImage * heart = [UIImage imageNamed: @ "LittleHeart.png"];
heart CGImage ] ; CGImageRef image = [CGImage Herz];
/ / Das Bild kann nun "gerastert" werden auf einem CGContextRef
CGRect ) { 0 , 0 , 100 , 100 } , image ) ; CGContextDrawImage (c, (CGRect) {0, 0, 100, 100}, Bild);

Animationen

1
2
3
4
5
nil context : NULL ] ; [UIView beginAnimations: nil context: NULL];
1.5 ] ; [UIView setAnimationDuration: 1,5];
UIViewAnimationCurveEaseInOut ] ; [UIView setAnimationCurve: UIViewAnimationCurveEaseInOut];
/ / ...
; [UIView commitAnimations];

NSLog

1
2
3
"NSString object %@ " , myString ) ; NSLog (@ "NSString Objekt% @", myString);
"Float: %f " , myFloat ) ; NSLog (@ "float:% f", myFloat);
"Integer: %i " , myInt ) ; NSLog (@ "Integer:% i", myInt);

RGB-Wandler UIColor

1
# Define RGBA (r, g, b, a) [UIColor colorWithRed: r/255.0 grün: blau g/255.0: b/255.0 alpha: a]

Parameter an eine NSTimer

Unter Ausnutzung der Parameter userInfo können Sie einen Zeiger auf ein Objekt, um unsere Methode durch den Timer aufgerufen senden.

1
2
3
4
5
6
7
8
9
10
11
12
13
scheduledTimerWithTimeInterval : 1 target : self selector : @selector ( timerMethod ) userInfo : objectPointer repeats : YES ] ; [ NSTimer scheduledTimerWithTimeInterval: 1 Ziel: self selector: @ selector (timerMethod) userInfo: objectPointer wiederholt: YES];

/ / ...

void ) timerMethod : ( NSTimer * ) timer { - (Void) timerMethod: ( NSTimer *) Timer {
/ / Hole den Zeiger auf mein Objekt
timer userInfo ] ; objectPointer = [Timer userInfo];
/ / Oder
myMethod ] ; [[Timer userInfo] myMethod];
[ [ timer userInfo ] myProperty ] ; int a = [[Timer userInfo] myProperty];
/ / Welche ist die gleiche
[ objectPointer myProperty ] ; int a = [objectPointer myProperty];
}

Laufzeit

Hier ist eine einfache Möglichkeit, eine kurze Zeit benötigt, um die Geschwindigkeit der Ausführung des Codes zu überprüfen, berechnet:

1
2
3
4
; CFAbsoluteTime initialTime CFAbsoluteTimeGetCurrent = ();
/ / ... Frack
; CFAbsoluteTime finalTime CFAbsoluteTimeGetCurrent = ();
"Tempo trascorso %f" , finalTime - initialTime ) ; NSLog (@ "verstrichene Zeit% f", finalTime - initialTime);

Fortsetzung ...

Objective-C: machen Eigenschaften in einer Klasse

Ich möchte zeigen und diskutieren einige Beispiele, wie man hinzufügen und manipulieren Eigenschaften in Objective-C-Klasse. : Ein klassisches Beispiel, genau, ist die folgende, in der Definition unserer Interface-Klasse definiert zwei Eigenschaften nome und cognome :

1
2
3
4
5
6
7
8
9
10
11
/ / MyClass.h
# Import <Foundation/Foundation.h>

NSObject { @ Interface MyClass: NSObject {
nome; NSString * name;
cognome; NSString * name;
}

retain ) NSString * nome; @ Property (behalten) NSString * name;
retain ) NSString * cognome; @ Property (behalten) NSString * name;
@ End

e setter usati rispettivamente per leggere ed impostare le nostre due proprietà: In der Implementierung-Datei die Anweisung einfügen @synthesize , so dass Xcode für uns produzieren werden die Methoden getter -und setter bzw. zum Lesen und setzen unsere zwei Eigenschaften:

1
2
3
4
5
6
7
8
/ / MyClass.m
# Import "MyClass.h"

@ Implementation MyClass

@ Synthesize Name, Vorname;

@ End

, possiamo scrive: Wenn du gehst, um unsere Klasse MyClass , dass, wenn istanziaremo ist ein Objekt vom Typ MyClass , können wir schreiben:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/ / Jede andere Klasse, als AppDelegate
/ / In der Datei. H
# Import <UIKit/UIKit.h>
# Import "MyClass.h"

@ Class TestViewController;

NSObject <UIApplicationDelegate> { @ Interface TesAppDelegate: NSObject {<UIApplicationDelegate>
UIWindow * window;
* TestViewController viewController;

MyClass * myClass;
}

/ / In der Datei. M
MyClass alloc ] ; myClass = [MyClass alloc];
"Giovambattista" ; miaClasse.nome @ = "Giovambattista";
"miaClasse.nome = %@" , miaClasse.nome ) ; NSLog (@ "miaClasse.nome =% @", miaClasse.nome);

Oder ist das äquivalent zu:

1
2
3
/ / Immer in der Datei. M
@ "Undolog" ] ; [SetNome myClass: @ "Undolog"];
"miaClasse.nome = %@" , [ miaClasse nome ] ) ; NSLog (@ "miaClasse.nome =% @", [myClass name]);

So weit so gut. Allerdings könnte es eine Irreführung der Gleichwertigkeit der "variable" interne (ivar) mit dem Namen des Immobilien-Objekt selber. Um zu verstehen, der Unterschied, wieder schlagen die gleiche wie Verzicht, dieses Mal, die @synthesize . . Nun, deshalb sollten wir darauf achten, dass die Methoden zu schreiben getter und setter . Zur weiteren betonen die Unterschiede, werden die internen Variablen durch Einfügen eines vor dem Namen unterstreichen umzubenennen. Aber wir sehen den Code:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# Import <Foundation/Foundation.h>

NSObject { @ Interface MyClass: NSObject {
_nome; NSString * _Name;
_cognome; NSString * _cognome;
}

NSString * ) nome; // get - ( NSString *) name; / / get
NSString * ) cognome; // get - ( NSString *) name; / / get

void ) setNome : ( NSString * ) stringaIngresso; // set - (Void) setNome: ( NSString *) stringaIngresso; / / set
void ) setCognome : ( NSString * ) stringaIngresso; // set - (Void) setCognome: ( NSString *) stringaIngresso; / / set

@ End

. Im Gegensatz zum vorherigen Zeiger auf interne Variablen (incapsultate) geworden _nome und _cognome . . @property è scomparso, in quanto non serve più. Darüber hinaus gibt es vier Definitionen von Methoden, die unsere repräsentieren get und set . @property ist verschwunden, als nicht mehr benötigt.
Wir sehen die Umsetzung Datei MyClass.m :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# Import "MyClass.h"

@ Implementation MyClass

/ / Holen Sie sich einen "Namen"
NSString * ) nome { - ( NSString *) name {
_Name Return;
}
/ / Um "name" Set
void ) setNome : ( NSString * ) stringaIngresso { - (Void) setNome: ( NSString *) {stringaIngresso
_Name = StringaIngresso;
}

/ / Für "Nachname" Get
NSString * ) cognome { - ( NSString *) name {
_cognome return;
}
/ / Für "Nachname" Set
void ) setCognome : ( NSString * ) stringaIngresso { - (Void) setCognome: ( NSString *) {stringaIngresso
_cognome = stringaIngresso;
}

@ End

Geschrieben als eine Klasse genau wie die vorherigen genutzt werden können, nämlich:

1
2
3
4
5
6
7
8
MyClass alloc ] ; myClass = [MyClass alloc];
"Giovambattista" ; miaClasse.nome @ = "Giovambattista";
"miaClasse.nome = %@" , miaClasse.nome ) ; NSLog (@ "miaClasse.nome =% @", miaClasse.nome);

/ / Oder, was gleichbedeutend ist mit:

@ "Undolog" ] ; [SetNome myClass: @ "Undolog"];
"miaClasse.nome = %@" , [ miaClasse nome ] ) ; NSLog (@ "miaClasse.nome =% @", [myClass name]);

e set , evidenziando – anche con l'aggiunta dell'underscore – le differenze tra il nome della proprietà e la sua ivar interna _nome . Auf der Ebene der pädagogischen Vernachlässigung @synthesize zwang uns zu schreiben "ihre" Methoden get und set , Hervorhebung - auch mit dem Zusatz dell'underscore - die Unterschiede zwischen den Namen der Eigenschaft und ihre internen ivar _nome .
permette un reale controllo del dato prima della sua impostazione (o prima della sua lettura) e quindi un reale incapsulamento per proteggere la variabile interna. Auf der funktionalen Ebene der persönlichen Nutzung der Methoden get und set ermöglicht Echtzeit-Steuerung der Daten vor ihrer Einstellung (oder vor seiner Lesung) und dann eine echte Kapselung der internen Variablen zu schützen.
Zum Beispiel wäre es möglich, den Durchgang der leeren Saiten, um eine Immobilie zu verhindern nome :

1
2
3
4
void ) setNome : ( NSString * ) stringaIngresso { - (Void) setNome: ( NSString *) {stringaIngresso
stringaIngresso == @ "" ) stringaIngresso = @ "senza nome" ; if (@ stringaIngresso == "") @ stringaIngresso = "no name";
_Name = StringaIngresso;
}

Weitere Variation

Wenn Sie die internen Variablen mit dem verwenden möchten unterstreichen vor (wer rpoviene Adobe Actionscript könnte auch verwendet werden) ist nicht notwendig, die Verwendung der Richtlinie aufzugeben @synthesize . Xcode macht es möglich, "merge" den oben genannten Verfahren:

1
2
_nome; @ Synthesize name = _Name;
_cognome; @ Synthesize name = _cognome;

. Dabei haben wir den Zeiger auf die intern verwenden könnten _nome ", resümierte" - nach außen - als eine Eigenschaft nome . e setter , è vero anche che lo fa solo se non li trova, quindi se desiderate “implementare” un vostro metodo di getter e/o setter potete farlo anche se avete usato la direttiva @synthesize . Außerdem, es ist wahr, dass die Verwendung von @synthesize automatische Generierung Methoden (Nachrichten) von produziert getter -und setter ist es auch wahr, dass, wenn er sie nicht findet, so, wenn Sie "implementieren" eine Methode für Ihren gewünschten getter -und / oder setter können Sie dies tun, auch wenn Sie der Richtlinie verwendete @synthesize .

Speicherzuordnungen

In den obigen Beispielen habe ich einige wichtige Details für eine reale Umsetzung verzichtet. Zunächst einmal habe ich keine Methode gezeigt init() , nützlich für die Initialisierung des Objektes und Standardwerte. Darüber hinaus gibt es die Zugabe einer Methode dealloc() :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
/ / File MyClass.m
# Import "MyClass.h"

@ Implementation MyClass

id ) init { - (Id) init {
self = [ super init ] ) { if (self = [super init]) {
"Nome preimpostato" ; _Name @ = "Preset Name";
"Cognome preimpostato" ; _cognome @ = "Preset Name";
}
Rückkehr Selbst;
}

void ) dealloc { - (Void) {dealloc
; [_Name Release];
; [_cognome Release];
; [Super dealloc];
}

NSString * ) nome { - ( NSString *) name {
_Name Return;
}
void ) setNome : ( NSString * ) stringaIngresso { - (Void) setNome: ( NSString *) {stringaIngresso
stringaIngresso == @ "" ) stringaIngresso = @ "senza nome" ; if (@ stringaIngresso == "") @ stringaIngresso = "no name";
_Name = StringaIngresso;
}

NSString * ) cognome { - ( NSString *) name {
_cognome return;
}
void ) setCognome : ( NSString * ) stringaIngresso { - (Void) setCognome: ( NSString *) {stringaIngresso
_cognome = stringaIngresso;
}

@ End

, etc… In Zukunft werden wir dann sehen, die Details über die Eigenschaften readonly , retain , etc ... :)

Fortsetzung ...

Apple iPhone: Erstellen Sie eine benutzerdefinierte Schaltfläche mit Umschaltfunktion

non funzionano quando un UIButton è impostato in modalità UIButtonTypeCustom ! Die Zustände UIControlStateSelected oder UIControlStateHighlighted nicht funktionieren, wenn ein UIButton -Modus eingestellt ist UIButtonTypeCustom ! Oder besser gesagt, nicht funktionieren (weil für andere Arten von Button vorbehalten), zum Beispiel zu einer Zwei-Staaten-Schaltfläche zu erstellen: toggle beachten. Wenn wir zwei Bilder (und stato1.png stato2.png) für unsere Button erstellt haben, können wir wie folgt vorgehen:

1
2
3
/ / Die Header-Dateien, dass wir eine globale Variable für usaremo erstellen
/ / Check der Toggle wurden
ToggleFlag BOOL;

Nun erstellen wir unseren Button:

1
2
3
4
5
6
7
8
9
/ / Wir schaffen eine Taste und legen wir es zunächst in den Zustand "stato1.png"
/ / Edit initWithFrame: (CGRect) {} 100,100,50,50 mit dem Standort und
/ / Größe des Bildes hat
; toggleFlag = YES;
[ [ UIButton buttonWithType : UIButtonTypeCustom ] initWithFrame : ( CGRect ) { 100 , 100 , 50 , 50 } ] ; UIButton ToggleButton * = [[UIButton buttonWithType: UIButtonTypeCustom] initWithFrame: (CGRect) {100, 100, 50, 50}];
@ "" forState : UIControlStateNormal ] ; [ToggleButton setTitle: @ "," Forst: UIControlStateNormal];
[ UIImage imageNamed : @ "stato1.png" ] forState : UIControlStateNormal ] ; [ToggleButton SetBackgroundImage: [UIImage imageNamed: @ "stato1.png"] Forst: UIControlStateNormal];
self action : @selector ( onToggle : ) forControlEvents : UIControlEventTouchUpInside ] ; [ToggleButton addTarget: self Aktion: @ selector (onToggle:) forControlEvents: UIControlEventTouchUpInside];
toggleButton ] ; [Self.view addSubview: ToggleButton];

Wenn Sie auf den Button klicken, wird eine Nachricht zu verwaltenden senden onToggle :

1
2
3
4
5
6
7
void ) onToggle : ( id ) sender { - (Void) onToggle: (id) sender {
/ / Hole Zeiger auf UIButton
( UIButton * ) sender; UIButton ButtonClicked * = (UIButton *) sender;
/ / Ausführen Toogle
toggleFlag = toggleFlag!;
[ UIImage imageNamed : ( toggleFlag ) ? @ "stato1.png" : @ "stato2.png" ] forState : UIControlStateNormal ] ; [ButtonClicked SetBackgroundImage: [UIImage imageNamed: (toggleFlag) @ "Stato1.png" @ "stato2.png"] Forst:? UIControlStateNormal];
}

Fortsetzung ...

Sehr kurze Auszug: Streaming mp3-Dateien auf dem Apple iPhone

Eine Alternative sehr einfach zu laufen einen Stream einer MP3-Datei auf dem Apple iPhone können sein:

Fortsetzung ...

10 Nützliche Tricks und Snippets für Apple iPhone und Xcode

1. Strings über mehrere Zeilen

In Xcode, können Sie "Pause" ein String über mehrere Zeilen, indem Sie am Ende mit einem Backslash "\". Diese Funktion kann nützlich sein, wenn wir zum Beispiel den HTML-Text in einem Steuerelement einfügen möchten UIWebView :

Fortsetzung ...

Sehr kurze Auszug: ein Datenformat einer Kontrolle UIDatePicker

Die Steuerung UIDatePicker ist vielleicht das schönste Geschenk grafische Kontrolle über das Apple iPhone. Neben der Schönheit der ist es auch einfach zu bedienen, vielseitig einsetzbar und in vielen Situationen.

Fortsetzung ...

Objective-C: NSLog () von C struct

o CGPoint , ad esempio. Die Syntax NSLog(@"%@", ... ); funktioniert und wird verwendet, um Informationen über Objekte zu erhalten, aber nicht auf C-Datentypen wie struct Arbeit CGRect oder CGPoint , zum Beispiel. o NSStringFromCGPoint : Um die Vorteile zu nehmen NSLog(@"%@", ... ); auch auf C-Stil Strukturen können auf Konvertierungsfunktionen wie verlassen NSStringFromCGRect() oder NSStringFromCGPoint :

1
2
3
4
5
CGRect ) { 10 , 20 , 30 , 40 } ; CGRect mioRect = (CGRect) {10, 20, 30, 40};
CGPoint ) { 32 , 64 } ; CGPoint mioPoint = (CGPoint) {32, 64};
/ /
"Info rettangolo: %@" , NSStringFromCGRect ( mioRect ) ) ; NSLog (@ "Info Rechteck:% @", NSStringFromCGRect (mioRect));
"Info point: %@" , NSStringFromCGPoint ( mioPoint ) ) ; NSLog (@ "Info Point:% @", NSStringFromCGPoint (mioPoint));

Insbesondere ist es möglich, dieses Verfahren schreibt der kleine nützliche Makros wie zu verbessern:

1
# Define NSLogRect (rect) NSLog (@ "% s (% 0.0f,% 0.0f)% 0.0f% 0.0fx", # rect, rect.origin.x, rect.origin.y, rect.size.width , rect.size.height)

Oder:

1
2
3
4
# Define NSLogCGPoint (Punkt) NSLog (@ "% s (% 0.0f,% 0.0f)" # point.x Punkt Point.y)

CGPoint ) { 32 , 64 } ; CGPoint mioPoint = (CGPoint) {32, 64};
; NSLogCGPoint (mioPoint);

Das wird als Ausgabe zu geben:

1
32 , 64 ) mioPoint: (32, 64)

Fortsetzung ...

Sehr kurze Trick: 3 Tricks für Entwickler Apple iPhone

Anwendung Icon

57 × 57 Pixel-Symbol, das stellen unsere Anwendung "beeinträchtigt" durch das Apple iPhone automatisch: Sie fügen eine abgerundete Kante, eine helle und 3D-Effekte. Diese Einstellung kann durch Auswahl der Datei geändert werden [nome applicazione]-Info.plist und Hinzufügen der Eigenschaft "Icon umfasst Glanz-und Kegel-Effekte bereits":

Fortsetzung ...

XCode Objective-C: Nützliche Tastenkombinationen

XCode ist eine sehr leistungsfähige Entwicklungsumgebung und behält einige Überraschungen. Es ermöglicht eine ähnliche Funktion wie "Schnipsel" des berühmten Editor TextMate . In der Praxis ist es möglich, Code-Blöcke mit der Sequenz ESC + eine Kombination aus einer oder mehreren Sequenzen von Zeichen einzufügen. e otterrete: Zum Beispiel, wenn Sie einen Block einfügen möchten if versuchen Sie ESC+if und Sie erhalten:

Immagine 3

. Wie in der Abbildung gezeigt, wird ein Menü (das gleiche auto-completion), wo Sie zwischen einem einfachen Block wählen können if oder if/else . Mit einem Klick auf "Senden" erhalten Sie:

Immagine 4

Hier sind zwei Links für die vollständige Liste der Tastaturkürzel:

Fortsetzung ...

Sehr kurze Auszug: iPhone, Zufallszahlen

Wenn Sie Zufallszahlen in einer Anwendung zu generieren sollen, müssen beiseite Apple iPhone Objective-C, weil es nicht vorschlagen, eine Klasse zu bestellen. Die Lösung wird vorgeschlagen, dass die C: rand(), srand(), random(), srandom() e arc4random() .

Fortsetzung ...



Stoppen SOPA