Catégorie 'iPhone'


10 extrait utiles pour Apple iPhone

Exécuter une méthode après n secondes

Toute la famille performSelector est vraiment intéressant et peut être utile dans une multitude de cas. Son application la plus simple et la plus courante est la suivante:

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

Cependant, considérer que le "timer" n'est pas exacte. Cette procédure devrait donc être utilisée lorsqu'il n'est pas nécessaire de précision «considérable» du temps.

Récupérer la version de la

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

Oui, c'est vrai ou vrai?

e TRUE sono in pratica la stessa edentica cosa: Aller à passer au peigne fin l'iPhone d'Apple noyau, vous pouvez comprendre que YES , true et TRUE sont pratiquement la même chose edentica:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/ / Définition de la SEJ
# Définir OUI (BOOL) 1
# Définir NO 0 (BOOL)

/ / Définition d'une véritable
# Définir une véritable
# Définir 0 false

/ / Définition de VRAI
# Si! Défini (TRUE)
# Définir 1 VRAI
# Endif

# Si! Défini (FAUX)
# Définir 0 FAUX
# Endif

Au moins pour le moment ...

Vibration

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

Pointeur CGImageRef à partir d'un UIImage

1
2
3
4
[ UIImage imageNamed : @ "LittleHeart.png" ] ; UIImage * cœur = [UIImage imageNamed: @ "LittleHeart.png"];
heart CGImage ] ; CGImageRef image = [coeur CGImage];
/ / L'image peut maintenant être «pixellisés» sur une CGContextRef
CGRect ) { 0 , 0 , 100 , 100 } , image ) ; CGContextDrawImage (c, (CGRect) {0, 0, 100, 100}, image);

Animations

1
2
3
4
5
nil context : NULL ] ; [BeginAnimations UIView: contexte nulle: NULL];
1.5 ] ; [UIView setAnimationDuration: 1,5];
UIViewAnimationCurveEaseInOut ] ; [UIView setAnimationCurve: UIViewAnimationCurveEaseInOut];
/ / ...
; [CommitAnimations UIView];

NSLog

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

Convertisseur de RGB à UIColor

1
# Définir RGBA (r, g, b, a) [UIColor colorWithRed: r/255.0 vert: bleu g/255.0: b/255.0 alpha: a]

Passer des paramètres à une NSTimer

Exploiter le paramètre userInfo vous pouvez envoyer un pointeur vers notre objet à la méthode invoquée par minuterie.

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 cible: sélecteur de soi: @ selector (timerMethod) userInfo: répétitions objectPointer: OUI];

/ / ...

void ) timerMethod : ( NSTimer * ) timer { - (Void) timerMethod: ( NSTimer *) {timer
/ / Récupérer le pointeur à mon objet
timer userInfo ] ; objectPointer = [minuterie userInfo];
/ / Ou
myMethod ] ; [[Minuterie userInfo] myMethod];
[ [ timer userInfo ] myProperty ] ; int a = [[minuterie userInfo] myProperty];
/ / Quel est le même
[ objectPointer myProperty ] ; int a = [objectPointer myProperty];
}

Durée

Voici une façon simple de calculer le temps court nécessaires pour vérifier la vitesse d'exécution de code:

1
2
3
4
; CFAbsoluteTime initialTime CFAbsoluteTimeGetCurrent = ();
/ / ... code
; CFAbsoluteTime finalTime CFAbsoluteTimeGetCurrent = ();
"Tempo trascorso %f" , finalTime - initialTime ) ; NSLog (@ "f écoulé% du temps", finalTime - initialTime);

En savoir plus ...

Objective-C: exposer des propriétés dans une classe

Je voudrais montrer et de discuter quelques exemples sur la façon d'ajouter et de manipuler les propriétés en Objective-C de classe. : Un exemple classique, précisément, est la suivante: dans la définition de notre interface de classe, nous définissons deux propriétés nome et cognome :

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

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

retain ) NSString * nome; @ La propriété (conserver) NSString * name;
retain ) NSString * cognome; @ La propriété (conserver) NSString * name;
@ Fin

e setter usati rispettivamente per leggere ed impostare le nostre due proprietà: Dans le fichier d'implémentation, nous insérons la déclaration @synthesize afin que Xcode va produire pour nous des méthodes getter et setter , respectivement, utilisé pour lire et définir nos deux propriétés:

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

@ Mise en œuvre MyClass

Résumer le nom @, le nom de famille;

@ Fin

, possiamo scrive: Lorsque vous allez utiliser notre classe MyClass , c'est à ce moment istanziaremo un objet de type MyClass , on peut écrire:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/ / Tout autre classe, comme appDelegate
/ / Dans le fichier. H
# Import <UIKit/UIKit.h>
# Import "MyClass.h"

@ Classe TestViewController;

NSObject <UIApplicationDelegate> { TesAppDelegate Interface @: NSObject {<UIApplicationDelegate>
UIWindow * fenêtre;
* TestViewController viewController;

MyClass * myClass;
}

/ / Dans le fichier. M
MyClass alloc ] ; myClass = [MaClasse alloc];
"Giovambattista" ; miaClasse.nome @ = "Giovambattista";
"miaClasse.nome = %@" , miaClasse.nome ) ; NSLog (@ "% @ = miaClasse.nome" miaClasse.nome);

Ou, ce qui équivaut à:

1
2
3
/ / Toujours dans le fichier. M
@ "Undolog" ] ; [SetNome myClass: @ "Undolog"];
"miaClasse.nome = %@" , [ miaClasse nome ] ) ; NSLog (@ "miaClasse.nome =% @", [myClass nom]);

Jusqu'ici tout va bien. Toutefois, il pourrait induire en erreur l'équivalence des "variabli" interne (Ivar) comme des biens immobiliers. Pour comprendre la différence, proposer à nouveau la même chose que faire sans, cette fois, le @synthesize . . Maintenant, donc, nous devrions traiter avec nous pour écrire les méthodes getter et setter . Afin de mieux souligner les différences, les variables internes rinominerò insérant un trait de soulignement devant le nom. Mais nous voyons le code:

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

NSObject { @ Interface MaClasse: NSObject {
_nome; NSString * _Nom;
_cognome; NSString * _cognome;
}

NSString * ) nome; // get - ( NSString *) nom; / / récupère
NSString * ) cognome; // get - ( NSString *) nom; / / récupère

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

@ Fin

. Contrairement à l'exemple précédent, les pointeurs vers les variables internes (incapsultate) sont devenus _nome et _cognome . . @property è scomparso, in quanto non serve più. En outre, il existe quatre définitions de méthodes qui représentent notre get et set . @property a disparu, ne sont plus nécessaires.
Nous voyons le fichier d'implémentation 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"

@ Mise en œuvre MyClass

/ / Obtenir un "nom"
NSString * ) nome { - ( NSString *) nom {
_Nom Retour;
}
/ / Set pour "nom"
void ) setNome : ( NSString * ) stringaIngresso { - (Void) setNome: ( NSString *) {stringaIngresso
_Nom = StringaIngresso;
}

/ / Obtenir de "nom"
NSString * ) cognome { - ( NSString *) nom {
_cognome revenir;
}
/ / Set pour "Last Name"
void ) setCognome : ( NSString * ) stringaIngresso { - (Void) setCognome: ( NSString *) {stringaIngresso
_cognome = stringaIngresso;
}

@ Fin

Une classe de sorte écrite peut être utilisé exactement comme le précédent, à savoir:

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

/ / Ou, ce qui équivaut à:

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

e set , evidenziando – anche con l'aggiunta dell'underscore – le differenze tra il nome della proprietà e la sua ivar interna _nome . Au niveau de la négligence éducative @synthesize nous a forcés à écrire "leurs propres" méthodes get et set , en soulignant - même avec l'ajout dell'underscore - les différences entre le nom de la propriété et son Ivar interne _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. À un niveau fonctionnel à l'usage personnel des méthodes get et set permet un contrôle réel des données avant sa mise (ou avant sa lecture), puis une encapsulation réelle afin de protéger la variable interne.
Par exemple, il serait possible d'empêcher le passage des chaînes vides à la propriété nome :

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

Autre variante

Si vous souhaitez utiliser les variables internes avec le trait de soulignement en face (qui rpoviene Adobe ActionScript pourrait être utilisé aussi bien) n'est pas nécessaire d'abandonner l'utilisation de la directive @synthesize . Xcode permet de "fusionner" les méthodes ci-dessus:

1
2
_nome; @ Name = Synthétiser _Nom;
_cognome; @ Name = Synthétiser _cognome;

. Ce faisant, nous pourrions utiliser en interne pointeur _nome ", résume" - à l'extérieur - comme une propriété 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 . En outre, bien que l'utilisation de @synthesize produit méthodes de génération automatique (messages) de getter et setter , est également vrai que ce n'est que si elle les trouve, donc si vous voulez "mettre en œuvre" une méthode pour votre getter et / ou setter peut le faire même si vous avez utilisé la directive @synthesize .

Les allocations de mémoire

Dans les exemples qui précèdent, j'ai omis certains détails importants pour une mise en œuvre réelle. Tout d'abord, je n'ai pas montré toute méthode init() , utile pour l'initialisation d'objet et les valeurs par défaut. De plus, il manque l'addition d'un procédé 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
/ / Fichier MyClass.m
# Import "MyClass.h"

@ Mise en œuvre MyClass

id ) init { - (Id) {init
self = [ super init ] ) { if (self = [super init]) {
"Nome preimpostato" ; _Nom @ = "Nom du paramètre prédéfini";
"Cognome preimpostato" ; _cognome @ = "Nom du paramètre prédéfini";
}
retourner soi-même;
}

void ) dealloc { - (Void) dealloc {
; [_Nom De presse];
; [_cognome De presse];
; [Super dealloc];
}

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

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

@ Fin

, etc… Dans l'avenir, nous verrons ensuite les détails sur les propriétés readonly , retain , etc ... :)

En savoir plus ...

Apple iPhone: Créer un bouton personnalisé à bascule

non funzionano quando un UIButton è impostato in modalità UIButtonTypeCustom ! Les Etats UIControlStateSelected ou UIControlStateHighlighted ne fonctionne pas quand un UIButton mode est réglé UIButtonTypeCustom ! Ou plutôt, ne fonctionnent pas (parce que réservés pour d'autres types de bouton), par exemple pour créer un bouton à deux états: la note bascule. Si nous avons créé deux images (stato1.png et stato2.png) pour notre bouton, nous pouvons procéder comme suit:

1
2
3
/ / Le fichier en-tête que nous créons une variable globale pour usaremo
/ / Bascule le chèque était
ToggleFlag BOOL;

Maintenant nous allons créer notre bouton:

1
2
3
4
5
6
7
8
9
/ / Nous créons un bouton et nous le plaçons d'abord dans l'état "stato1.png"
/ / Modifier initWithFrame: (CGRect)} {100,100,50,50 avec la position et
/ / Taille de l'image a
; toggleFlag = OUI;
[ [ UIButton buttonWithType : UIButtonTypeCustom ] initWithFrame : ( CGRect ) { 100 , 100 , 50 , 50 } ] ; UIButton ToggleButton * = [[UIButton buttonWithType: UIButtonTypeCustom] initWithFrame: (CGRect) {100, 100, 50, 50}];
@ "" forState : UIControlStateNormal ] ; [ToggleButton setTitle: @ "" forState: UIControlStateNormal];
[ UIImage imageNamed : @ "stato1.png" ] forState : UIControlStateNormal ] ; [ToggleButton setBackgroundImage: [UIImage imageNamed: @ "stato1.png"] forState: UIControlStateNormal];
self action : @selector ( onToggle : ) forControlEvents : UIControlEventTouchUpInside ] ; [AddTarget ToggleButton: action d'auto: @ selector (onToggle :) forControlEvents: UIControlEventTouchUpInside];
toggleButton ] ; [Self.view addSubview: ToggleButton];

Lorsque vous cliquez sur le bouton envoyer un message à être gérés onToggle :

1
2
3
4
5
6
7
void ) onToggle : ( id ) sender { - (Void) onToggle: (id) sender {
/ / Récupération de pointeur vers UIButton
( UIButton * ) sender; UIButton ButtonClicked * = (UIButton *) l'expéditeur;
/ / Exécution de la bascule,
toggleFlag = toggleFlag!;
[ UIImage imageNamed : ( toggleFlag ) ? @ "stato1.png" : @ "stato2.png" ] forState : UIControlStateNormal ] ; [ButtonClicked setBackgroundImage: [UIImage imageNamed: (toggleFlag) @ "Stato1.png" @ "stato2.png"] forState:? UIControlStateNormal];
}

En savoir plus ...

Très court extrait: le streaming des fichiers mp3 à l'iPhone d'Apple

Une alternative très facile à exécuter un flux d'un fichier mp3 sur l'iPhone d'Apple pourrait être:

En savoir plus ...

10 conseils utiles et des extraits pour Apple iPhone et Xcode

1. Cordes sur plusieurs lignes

Dans Xcode, vous pouvez "casser" une chaîne sur plusieurs lignes en insérant à la fin avec une barre oblique inverse "\". Cette fonctionnalité peut être utile lorsque, par exemple, nous voulons insérer le texte HTML dans un contrôle UIWebView :

En savoir plus ...

Très court extrait: un format de données d'un contrôle UIDatePicker

Le contrôle UIDatePicker est peut-être la plus belle contrôleur présente des graphiques sur l'iPhone d'Apple. Outre la beauté est aussi simple à utiliser, extrêmement polyvalent et utilisé dans de nombreuses situations.

En savoir plus ...

Objective-C: NSLog () du C struct

o CGPoint , ad esempio. La syntaxe NSLog(@"%@", ... ); qui fonctionne et est utilisé pour obtenir des informations sur les objets, mais ne fonctionne pas sur les types de données tels que C struct CGRect ou CGPoint , par exemple. o NSStringFromCGPoint : Pour profiter de NSLog(@"%@", ... ); également de style C structs nous pouvons nous appuyer sur les fonctions de conversion telles que NSStringFromCGRect() ou 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 (@ "rectangle Info:% @", NSStringFromCGRect (mioRect));
"Info point: %@" , NSStringFromCGPoint ( mioPoint ) ) ; NSLog (@ "point info:% @", NSStringFromCGPoint (mioPoint));

Plus précisément, il est possible d'affiner les procédures correspondantes de petites macros utiles comme:

1
# Définir 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)

Ou:

1
2
3
4
# Définir NSLogCGPoint (point) NSLog (@ "% s (% 0.0f, 0.0f%)", # Point.X point, Point.y)

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

Cela vous donnera en sortie:

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

En savoir plus ...

Truc très court: 3 astuces pour les développeurs iPhone d'Apple

Application Icon

Le 57 × 57 pixels icône qui représentera notre application est "compromise" automatiquement par l'iPhone d'Apple: ajoute un bord arrondi, une éclaircie et 3D. Ce réglage peut être modifié en sélectionnant le fichier [nome applicazione]-Info.plist et en ajoutant la propriété "Icône comprend déjà des effets de brillance et de biseau":

En savoir plus ...

XCode Objective-C: raccourcis clavier utiles

XCode est un environnement de développement très puissant et se réserve quelques surprises. Il permet à une fonction similaire à la "snippet" de la célèbre éditeur TextMate . En pratique, il est possible d'insérer des blocs de code en utilisant la séquence ESC + une combinaison d'un ou de plusieurs séquences de caractères. e otterrete: Par exemple, si vous souhaitez insérer un bloc if essayez d'appuyer sur ESC+if et vous obtiendrez:

Immagine 3

. Comme le montre la figure, un menu apparaît (le même auto-complétion) où vous pouvez choisir entre un simple bloc if ou if/else . En cliquant sur "envoyer", vous obtenez:

Immagine 4

Voici deux liens pour la liste complète des raccourcis clavier:

En savoir plus ...

Très court extrait: iPhone, nombres aléatoires

Si vous avez besoin pour générer des nombres aléatoires dans une application doivent mettre de côté l'iPhone d'Apple Objective-C, car il ne propose pas de l'ordre des classes. La solution est proposé que le dossier C: rand(), srand(), random(), srandom() e arc4random() .

En savoir plus ...



Arrêtez SOPA