Articles taggés avec 'iPhone'


Adobe Flash Professional CS5 pour Apple iPhone

Adobe Flash Professiona 5 per Apple iPhone

En savoir plus ...

Comment faire pour définir XCode d'utiliser l'iPhone au lieu du simulateur

Screencast

En savoir plus ...

iPhone: Créer un moyen de répondre à des événements qui traversent la classe

Normalement, un événement, qui n'est rien d'autre qu'un message est fixe (fixé et mis en œuvre) dans la même classe ou le contexte, la fonction ou la procédure "d'appel". o in un UIViewController . Par exemple, si nous ajoutons un bouton UIButton via le code (programme), nous pouvons trouver notre classe dans un UIView ou un UIViewController . Dans les deux cas, la répartition des tâches et l'initialisation de la touche sera suivie par la fixation de target qui devraient recevoir un message quand il "clics" sur le bouton, tapez:

1
2
3
4
5
6
7
8
9
[ UIButton buttonWithType : UIButtonTypeRoundedRect ] ; UIButton * bouton = [UIButton buttonWithType: UIButtonTypeRoundedRect];
10 , 180 , 300 , 30 ) ; bottone.frame = CGRectMake (10, 180, 300, 30);
@ "Press me" forState : UIControlStateNormal ] ; [Bouton setTitle: @ "moi Appuyez sur" forState: UIControlStateNormal];
/ / Décidez qui devrait recevoir le message d'UIControlEventTouchUpInside
self action : @selector ( onButtonClicked ) forControlEvents : UIControlEventTouchUpInside ] ; [Bouton AddTarget: action d'auto: @ selector (onButtonClicked) forControlEvents: UIControlEventTouchUpInside];
/ / ...
void ) onButtonClicked { - (Void) {onButtonClicked
/ / ...
}

Ligne 5 du code ci-dessus qui décide qui (sous réserve) et ce (méthode) "appel" lorsque notre bouton est pressé. Dans l'exemple illustré ci-dessus est aussi à noter que le réglage du message de la pression est envoyé à la méthode onButtonClick mise en œuvre plus ci-dessous, puis faisant partie du même contexte (ou classe). potremmo inviare il nostro messaggio ad un qualsiasi altro oggetto, posto quindi al difuori del contesto in uso. La première considération est évident que nous pouvons faire, alors, est que, en modifiant les paramètres self et de action , nous pouvons envoyer notre message à tout autre objet, puis placez également en dehors du contexte d'utilisation. : Voici un exemple: une classe UIApplicationDelegate créer un UIViewController :

1
2
3
4
5
/ /
/ / MyAppDelegate.m
/ /
SplashScreenController alloc ] ; splashScreenController = [SplashScreenController alloc];
splashScreenController.view ] ; [Fenêtre addSubview: splashScreenController.view];

associata al UIViewController stesso: Le SplashScreenController expose une méthode qui vous permet d'animer le UIView associée à UIViewController même:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/ /
/ / SplashScreenController.m
/ /
void ) animateBackgroundDown { - (Void) {animateBackgroundDown
nil context : nil ] ; [BeginAnimations UIView: contexte nulle: nil];
0.75 ] ; [UIView setAnimationDuration: 0,75];
UIViewAnimationCurveEaseInOut ] ; [UIView setAnimationCurve: UIViewAnimationCurveEaseInOut];
self ] ; [UIView setAnimationDelegate: self];
@selector ( onAnimationFinished ) ] ; [UIView setAnimationDidStopSelector: @ selector (onAnimationFinished)];
CGRect ) { 0 , 480 , 320 , 480 } ; self.view.frame = (CGRect) {0, 480, 320, 480};
; [CommitAnimations UIView];
}
/ / ...
void ) onAnimationFinished { - (Void) {onAnimationFinished
"Animazione terminata" ) ; NSLog (@ "Animation fin");
}

. Le code ci-dessus montre une méthode définie à l'intérieur de la classe SplashScreenController de type UIViewController . ) onAnimationFinished definito più sotto, facente parte sempre della classe SplashScreenController . Il ne fait rien, mais d'animer le UIView qui l'anime vers le bas, et quand l'animation est terminée, composez le (envoyer un message à lui-même - d'où self ) onAnimationFinished défini ci-dessous, fait partie de la classe toujours SplashScreenController . , non saremo informati della fine dell'animazione: Il s'ensuit que, dans notre myAppDelegate , lorsque nous invoquons la méthode animateBackgroundDown , nous ne serons pas informés de la fin de l'animation:

1
2
3
4
/ /
/ / MyAppDelegate.m
/ /
; [SplashScreenController animateBackgroundDown];

Ce que nous voulons, au contraire, est de créer une nouvelle version de animateBackgroundDown comme pour lui dire envoyer l'animation de fin de message et la méthode à appeler. En pratique, nous voulons nous assurer que vous pouvez écrire dans notre classe myAppDelegate :

1
2
3
4
5
6
7
8
/ /
/ / MyAppDelegate.m
/ /
self selector : @selector ( onAnimationFinished ) ] ; [SplashScreenController animateBackgroundDown: sélecteur de soi: @ selector (onAnimationFinished)];
/ / ...
void ) onAnimationFinished { - (Void) {onAnimationFinished
"Animazione terminata" ) ; NSLog (@ "Animation fin");
}

, bensì in myAppDelegate . Cette fois, le Procédé onAnimationFinished n'est pas dans le UIViewController , mais dans myAppDelegate . nel modo seguente: Pour ce faire il suffit de changer la méthode animateBackgroundDown dans UIViewController comme suit:

1
2
3
4
5
6
7
8
9
10
11
12
/ /
/ / SplashScreenController.m
/ /
void ) animateBackgroundDown : ( id ) target selector : ( SEL ) selector { - (Void) animateBackgroundDown: (id) cible sélecteur: (SEL) de sélection {
nil context : nil ] ; [BeginAnimations UIView: contexte nulle: nil];
0.75 ] ; [UIView setAnimationDuration: 0,75];
UIViewAnimationCurveEaseInOut ] ; [UIView setAnimationCurve: UIViewAnimationCurveEaseInOut];
target ] ; [SetAnimationDelegate UIView: cible];
selector ] ; [UIView setAnimationDidStopSelector: sélecteur de];
CGRect ) { 0 , 480 , 320 , 480 } ; self.view.frame = (CGRect) {0, 480, 320, 480};
; [CommitAnimations UIView];
}

). Maintenant, nous avons une méthode qui accepte le "contexte" ( target ) et la méthode à appeler ( selector ). a qualsiasi altro “oggetto” / classe in grado di riceverlo. Maintenant, lorsque l'animation se termine, le message AnimationDidStop sera envoyé à myAppDelegate tout autre «objet» / classe qui peut le recevoir.

En savoir plus ...

Objective-C: une alternative à l'utilisation CGRectMake

CGRectMake() est une fonction (en fait une ligne # define) beaucoup utilisé en particulier lorsque des objets sont créés par le code ou d'une interface utilisateur graphique. o UIImageView . CGRectMake() restituisce una struct (struttura di tipo) CGRect : Son utilisation est donc souvent associé composants d'initialisation de UIKit , mais aussi à de simples UIView ou UIImageView . CGRectMake() retourne une struct (type de structure) CGRect :

1
2
3
4
5
struct {CGRect
Origine CGPoint;
CGSize taille;
};
typedef struct CGRect CGRect;

: Qui à son tour est composée de deux différente struct CGPoint et CGSize :

1
2
3
4
5
6
7
8
9
10
11
12
13
struct {CGPoint
X CGFloat;
CGFloat y;
};
typedef struct CGPoint CGPoint;

Tailles * /. * /

struct {CGSize
CGFloat largeur;
CGFloat hauteur;
};
typedef struct CGSize CGSize;

. Que, à leur tour encore, contiennent des types CGFloat , c.-à-types float . Si nous analysons le code de CGRectMake () sont les suivants:

1
2
3
4
5
6
7
8
CG_INLINE CGRect
CGRectMake (CGFloat x, y CGFloat, largeur CGFloat, hauteur CGFloat)
{
CGRect rect;
y; rect.origin.x = x; rect.origin.y = y;
height; rect.size.width = largeur; rect.size.height = hauteur;
retourner rect;
}

Il s'ensuit donc, que cette partie de code:

1
2
3
4
[ UIButton buttonWithType : UIButtonTypeRoundedRect ] ; UIButton * gbutton = [UIButton buttonWithType: UIButtonTypeRoundedRect];
12 , 409 , 100 , 40 ) ; gbutton.frame = CGRectMake (12, 409, 100, 40);
@ "Press" forState : UIControlStateNormal ] ; [Gbutton setTitle: @ "Presse" forState: UIControlStateNormal];
gbutton ] ; [MainWindow addSubview: gbutton];

Il pourrait à juste titre être écrite comme suit:

1
2
3
4
[ UIButton buttonWithType : UIButtonTypeRoundedRect ] ; UIButton * gbutton = [UIButton buttonWithType: UIButtonTypeRoundedRect];
CGRect ) { 12 , 409 , 100 , 40 } ; gbutton.frame = (CGRect) {12, 409, 100, 40};
@ "Press" forState : UIControlStateNormal ] ; [Gbutton setTitle: @ "Presse" forState: UIControlStateNormal];
gbutton ] ; [MainWindow addSubview: gbutton];

Juste pour accélérer les choses »le code est exécuté ... :)

En savoir plus ...

Raccourci Xcode

Xcode est un environnement de développement vraiment bon, agréable et pleine de détails qui rendent l'écriture de code efficace et agréable. Parmi ceux-ci est certainement la commodité d'auto-complétion lors de la frappe, surtout quand l'écriture d'applications pour l'iPhone d'Apple, où les cadres sont nombreux et n'oubliez pas la syntaxe et de la nomenclature a entrepris quelques-uns.

En savoir plus ...

XCode: Conseils sur Préférences de débogage

En utilisant les Préférences Xcode vous pouvez définir le comportement de l'atmosphère pendant la phase de débogage d'une application iPhone. Les paramètres par défaut, en fait, sont très mal à l'aise lorsque vous essayez et essayez à nouveau une demande, par exemple, après le lancement de notre application, vous devez ouvrir manuellement la fenêtre de la console pour voir la sortie de divers NSLog() . Xcode permet également aux sessions précédentes, nous avons dû nettoyer la fenêtre à la main. Heureusement, vous pouvez résoudre le problème en désactivant les Préférences:

xcode-preferences

Comme le montre la figure ci-dessus, il suffit de sélectionner un élément à partir du menu Démarrer dans la fenêtre de débogage de décider qui s'ouvrent automatiquement au démarrage de notre appicazione (j'ai mis la console et débogueur, mais vous pouvez choisir les costumes mieux que vous). Sur la droite, puis nous trouvons la console de débogage Auto Clear, si vous commencez toujours avec la console propre.

En savoir plus ...

iPhone: étendre une classe UIView

creato. Je veux montrer comment vous pouvez, dans un simple et rapide, étendre une classe UIView de telle manière qui répond à une nouvelle méthode d'initialisation contenant le code à la suite de personnaliser l'objet UIView créé. Comme certains d'entre vous le savez probablement, Objective-C ne supporte pas un seul fabricant que dans les langues autres objets orientés (comme Adobe ActionScript ou PHP5). E 'peut, en effet, créer une instance d'une classe manuellement en invoquant différents fabricants (virtuellement infini). . Normalement nous sommes habitués à créer des objets UIView avec le classique initWithFrame . Imaginez, toutefois, de vouloir créer une nouvelle classe d'objets visuels, à partir d'un UIView , avec quelques ajouts, par exemple une étiquette incorporée. . Fondamentalement, ce que nous voulons, c'est que l'instanciation de notre objet, il crée, ainsi que la UIView , un objet de type UILabel . Par exemple nous pourrions arriver à la fin:

1
[ [ ViewLabel alloc ] initWithLabelDefine : CGRectMake ( 0 , 0 , 320 , 80 ) label : @ "Ciao" ] ; ViewLabel * vl = [[ViewLabel alloc] initWithLabelDefine: CGRectMake (0, 0, 320, 80) label: @ "Bonjour"];

: Pour ce faire il suffit de créer une nouvelle classe de type UIView et appel ViewLabel :

1
2
3
4
5
6
7
8
9
10
11
12
13
/ /
/ / ViewLabel.h
/ /

# Import <UIKit/UIKit.h>

UIView { @ Interface ViewLabel: UIView {
UILabel * internalLabel;
}

id ) initWithLabelDefine : ( CGRect ) frame label : ( NSString * ) labelDefine; - (Id) initWithLabelDefine: étiquette d'image (CGRect): ( NSString *) labelDefine;

@ Fin
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
36
37
38
39
40
41
42
43
44
/ /
/ / ViewLabel.m
/ /

# Import "ViewLabel.h"

@ Mise en œuvre ViewLabel

id ) initWithFrame : ( CGRect ) frame { - (Id) initWithFrame: (CGRect) {trame

self = [ super initWithFrame : frame ] ) { if (self = [super initWithFrame: frame]) {
/ / Initialisation du code
}
retourner soi-même;
}

/ /
/ / Notre nouvelle initialisation
/ /
id ) initWithLabelDefine : ( CGRect ) frame label : ( NSString * ) labelDefine { - (Id) initWithLabelDefine: étiquette d'image (CGRect): ( NSString *) {labelDefine

self = [ super initWithFrame : frame ] ) { if (self = [super initWithFrame: frame]) {
/ / Ici, vous pouvez décider de la façon de se comporter, I pour
/ / J'ai eu le même cadre de sécurité dans le passé
/ / Entrée mais je réinitialiser le x et y
; frame.origin.x = 0;
; frame.origin.y = 0;
UILabel alloc ] initWithFrame : frame ] ; internalLabel = [[UILabel alloc] initWithFrame: frame];
internalLabel.text = labelDefine;
internalLabel ] ; [Self addSubview: internalLabel];
; [InternalLabel release];
}
retourner soi-même;
}

void ) drawRect : ( CGRect ) rect { - (Void) drawRect: (CGRect) rect {
Code / / Dessin
}

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

@ Fin

Au moment de la création de notre nouvelle classe, nous pourrions utiliser:

1
[ [ ViewLabel alloc ] initWithLabelDefine : CGRectMake ( 0 , 0 , 320 , 80 ) label : @ "Ciao" ] ; ViewLabel * vl = [[ViewLabel alloc] initWithLabelDefine: CGRectMake (0, 0, 320, 80) label: @ "Bonjour"];

En savoir plus ...

iPhone SecondApp: Devinez le nombre - Partie 2

Comme mentionné iPhone FirstApp: Devinez le nombre - Partie 1 , nous verrons comment faire une demande de l'iPhone d'Apple sans utiliser Interface Builder! En effet, nous allons éliminer les fichiers physiques créés par Interface Builder Xcode assistant. A la fin de ce post, alors, nous avons une demande identique à tous égards, à celles construites dans la première partie, avec la différence que nous allons atteindre tous nos composants visuels, y compris la fenêtre principale, pour le code complet.

L'application déjà fait, si vous voulez juste de télécharger, est disponible sur mon dépôt de Google Code:

Je tiens à souligner d'emblée comme le ZIP de cet exemple pèse moins que la dernière fois! :)

Nous créons le projet

Nous commençons par créer notre projet SecondApp (pour le distinguer de FirstApp), mais cette fois choisissez Fenêtre application basée sur:

newproject

Maintenant, nous allons supprimer tout ce qui touche à Interface Builder. : eliminatelo anche dal file system, quindi selezionate Also Move to Trash . Éliminer le fichier MainWindow.xib , situé dans le dossier Resources , le retirer du système de fichiers aussi, et puis sélectionnez Déplacer vers la Corbeille également. nella casella Main nib file base name : Sélectionnez ensuite le fichier SecondoApp-info.plist et supprimer la référence à la MainWindow fichier nib dans le nom de la boîte principale base:

deleteib

À ce stade, nous n'avons plus aucune fenêtre, au moins par Interface Builder. , e modifichiamo la funzione main() in questo modo: Donc, nous ouvrons le fichier main.m , situé dans Other Sources , et de modifier la fonction main() comme ceci:

1
2
3
4
5
6
7
8
9
10
11
int argc, char * argv [ ] ) { int main (int argc, char * argv []) {

pool = [ [ NSAutoreleasePool alloc ] init ] ; NSAutoreleasePool * pool = [[ NSAutoreleasePool alloc] init];

/ / En supprimant le fichier. XIB, nous avons perdu le suivi
/ / Le délégué app puis la passer à "la main"
UIApplicationMain ( argc, argv, nil , @ "SecondAppAppDelegate" ) ; int = retVal UIApplicationMain (argc, argv, nul, @ "SecondAppAppDelegate");

; [Communiqué de piscine];
retourner retVal;
}

Ouvrez SecondAppAppDelegate.me puis nous créons la fenêtre principale via le code:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void ) applicationDidFinishLaunching : ( UIApplication * ) application { - (Void) applicationDidFinishLaunching: (UIApplication *) application {

/ / Retourne la taille de l'écran (320, 480)
UIScreen mainScreen ] applicationFrame ] ; CGRect windowRect = [[mainScreen UIScreen] applicationFrame];
/ / Créer une fenêtre - comme nous l'avons fait bye bye à Interface Builder
[ [ UIWindow alloc ] initWithFrame : windowRect ] ; UIWindow mainWindow * = [[UIWindow alloc] initWithFrame: windowRect];
/ / Définit l'arrière-plan de la fenêtre au jaune, à la différence
/ / Le FirstApp demande antérieure
[ UIColor yellowColor ] ] ; [SetBackgroundColor MainWindow: [UIColor yellowColor]];

mainWindow ] ; [Self setWindow: mainWindow];
; [Fenêtre makeKeyAndVisible];

; [MainWindow release];
}

Vous pouvez déjà tester l'application, si une fenêtre apparaît en jaune vous avez tout fait correctement!

, necessario solo se si usa Interface Builder. Dans le fichier SecondAppAppDelegate.h nous pouvons éliminer IBOutlet , n'est nécessaire que si vous utilisez Interface Builder. En outre ajouter ici que nos variables globales, la dernière fois nous étions entrés dans le contrôleur. Ensuite, modifiez le fichier SecondAppAppDelegate.h :

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

NSObject <UIApplicationDelegate> { SecondAppAppDelegate Interface @: NSObject {<UIApplicationDelegate>
UIWindow * fenêtre;

UITextField * nombre;
UIButton * bouton;
int numeroACaso;
}

nonatomic, retain ) UIWindow * window; @ La propriété (nonatomic, conserver) UIWindow * fenêtre;

void ) controllaNumero; - (Void) getNumber;

@ Fin

, in quanto non stiamo usando Interface Builder. Dans ce cas également, nous avons préparé la définition de méthode controllaNumero , comme la dernière fois, mais nous avons éliminé l'indication IBAction , puisque nous ne sommes pas en utilisant Interface Builder.

Nous construisons le code de l'interface

Il est temps de créer un code en utilisant tous les composants de notre interface. ed inseriamo il seguente codice: Nous reviendrons dans le fichier SecondAppAppDelegate.m , posizioniamoci avant [mainWindow release] et insérez le code suivant:

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
/ / Créer la barre de titre
[ [ UINavigationBar alloc ] initWithFrame : CGRectMake ( 0.0 , 0.0 , 320.0 , 44.0 ) ] ; UINavigationBar myNavigationBar * = [[UINavigationBar alloc] initWithFrame: CGRectMake (0.0, 0.0, 320.0, 44.0)];
myNavigationBar.barStyle = UIBarStyleDefault;
[ [ UINavigationItem alloc ] initWithTitle : @ "Indovina un numero" ] ; UINavigationItem navigationItem * = [[UINavigationItem alloc] initWithTitle: @ "Devinez un certain nombre"];
navigationItem animated : NO ] ; [MyNavigationBar pushNavigationItem: navigationItem animé: NO];
myNavigationBar ] ; [Fenêtre addSubview: myNavigationBar];

/ / Création de l'étiquette
[ [ UILabel alloc ] initWithFrame : CGRectMake ( 10 , 50 , 300 , 80 ) ] ; UILabel * MyLabel = [[UILabel alloc] initWithFrame: CGRectMake (10, 50, 300, 80)];
UIColor clearColor ] ; myLabel.backgroundColor = [UIColor clearColor];
; myLabel.numberOfLines = 2;
"iPhone ha pensato un numero da 1 a 10, prova ad indovinarlo?" ; myLabel.text = @ "iPhone a conçu un certain nombre de 1 à 10, essayer de deviner?"
myLabel ] ; [Fenêtre addSubview: MyLabel];

/ / Créer la saisie de texte
UITextField alloc ] initWithFrame : CGRectMake ( 10 , 120 , 300 , 30 ) ] ; = nombre [[UITextField alloc] initWithFrame: CGRectMake (10, 120, 300, 30)];
numero.borderStyle = UITextBorderStyleRoundedRect;
numero.textAlignment = UITextAlignmentCenter;
numero.keyboardType = UIKeyboardTypeNumberPad;
"Inserisci il numero" ; numero.placeholder = @ "Entrez le numéro de";
numero ] ; [Fenêtre addSubview: nombre];

/ / Créer le bouton
UIButton buttonWithType : UIButtonTypeRoundedRect ] ; button = [UIButton buttonWithType: UIButtonTypeRoundedRect];
10 , 180 , 300 , 30 ) ; bottone.frame = CGRectMake (10, 180, 300, 30);
@ "Premi qui" forState : UIControlStateNormal ] ; [Bouton setTitle: @ "Cliquez ici" forState: UIControlStateNormal];
self action : @selector ( controllaNumero ) forControlEvents : UIControlEventTouchUpInside ] ; [Bouton AddTarget: action d'auto: @ selector (getNumber) forControlEvents: UIControlEventTouchUpInside];
bottone ] ; [Fenêtre addSubview: le bouton];

; [MyLabel release];
; [NavigationItem release];
; [MyNavigationBar release];

della scorsa volta, subito dopo il [mainWindow release]; inseriamo: Depuis la « applicationDidFinishLaunching correspond à viewDidLoad que la dernière fois, juste après le [mainWindow release]; insérer:

1
+ arc4random ( ) % 10 ; numeroACaso = 1 + arc4random ()% 10;

Maintenant, nous pouvons faire est de mettre en œuvre la méthode controllaNumero , qui sera identique (à l'exception du prototype) à celle utilisée la dernière fois:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
void ) controllaNumero { - (Void) {getNumber
"Premuto bottone di controlla numero" ) ; NSLog (@ "nombre Pressé de contrôle sur le bouton");
[ numero.text integerValue ] ; int numeroInserito = [numero.text integerValue];
message; NSString * message;
"Il numero inserito è %d" , numeroInserito ) ; NSLog (@ "Le numéro saisi est% d", numeroInserito);
numeroInserito <numeroACaso ) { si (numeroInserito <numeroACaso) {
"Troppo basso..." ; message = @ "trop ​​faible ...";
( numeroInserito> numeroACaso ) { } Else if (numeroInserito> numeroACaso) {
"Troppo alto..." ; message = @ "trop ​​élevé ...";
( numeroInserito == numeroACaso ) { } Else if (numeroInserito numeroACaso ==) {
"Bravo hai indovinato" ; message = @ "Bravo vous avez deviné";
+ arc4random ( ) % 10 ; numeroACaso = 1 + arc4random ()% 10;
"Numero pensato %d" , numeroACaso ) ; NSLog (@ "% Nombre d pensé," numeroACaso);
}
[ [ UIAlertView alloc ] UIAlertView alertMessaggio * = [[UIAlertView alloc]
"Responso" initWithTitle: @ "Réponse"
message: message
délégué: néant
"OK" cancelButtonTitle: @ "OK"
] ; otherButtonTitles: nil];
; [AlertMessaggio spectacle];
; [AlertMessaggio release];
"" ; numero.text @ = "";
}

Nous en avons terminé!

Conclusions et considérations

, proprio perchè volevo lasciarlo il più semplice e snello possibile e, anche, per dimostrare che non sono elementi sempre necessari. Cet exemple ne fait pas l'utilisation directe d'un UIView ou UIViewController , parce que je voulais le laisser aussi simple et rationnel que possible et, aussi, de montrer que les éléments ne sont pas toujours nécessaires. Cependant, l'insertion d'objets directement dans la fenêtre peut avoir un certain sens dans cet exemple et d'autres contextes sporadiques. portano comunque benefici in tantissimi altri casi, ein alcuni sono praticamente indispensabili; come avremo modo di vedere in futuro. L'utilisation de UIView et UIViewController encore apporter des avantages dans de nombreux autres cas, etdans certains sont presque indispensable, comme nous le verrons dans le futur.

En savoir plus ...

XCode: organiser votre code avec la marque # pragma

XCode est un très puissant et polyvalent et offre le programmeur avec de nombreuses fonctionnalités utiles et simples à utiliser. Lors de l'écriture de code complexe, ou du moins articulé, il devient important d'organiser votre code de sorte que vous ne perdez pas de temps à chercher les fonctions disséminées dans de longues lignes de code. Après avoir commenté, la première chose et la plus importante à faire, de l'environnement XCode fournit des lignes directrices (Nice) pour améliorer la convivialité et la legginilità dans le développement. L'un d'eux est la directive #pragma mark qui devient très utile dans l'organisation de groupes de ce code et les méthodes.

Dans l'image ci-dessous vous pouvez voir la partie de code de mon projet PragmaTest :

pragmamark-1

Le menu principal déroulant vous permet de lister toutes les méthodes de notre classe. Maintenant, si nous branchons notre méthode par rapport à la directive #pragma mark qui a une syntaxe:

1
Marque de Pragma # {label}

Nous obtenons:

pragmamark-2

La première #pragma mark avec un trait d'union (-) insère une ligne de séparation. Le second est un texte (étiquette) au goût. Vous pouvez ajouter la déclaration suivante où vous voulez, en organisant le code comme bon vous semble. En outre, vous pouvez également insérer plusieurs lignes pragma, tapez:

1
2
3
4
5
6
Marque de # pragma -
# Pragma mark / **
# * Marque de Pragma utilisant le pragma
# * Marque de Pragma sur plusieurs lignes de code
# Pragma marque * /
void ) mioMetodo { } - (Void) myMethod {}

En savoir plus ...

Apple iPhone: la première version 1.2

thefirst12claim

appstore-60

Disponible sur l'AppStore la mise à jour de la version 1.2 de la Première . Voici les notes de version:

  • Entièrement révisé tout au long de graphismes du jeu, qui est maintenant beaucoup plus à l'aise
  • Compatible avec Apple iPhone 3.0
  • Effets sonores ajoutés
  • Révisé et amélioré la navigabilité du jeu et des instructions

En savoir plus ...



Arrêtez SOPA