Articles taggés avec 'Undolibrary'


iPhone SecondApp: Devinez le nombre - Partie 2

Comme mentionné iPhone FirstApp: Devinez le nombre - Partie 1 , nous voyons comment faire une application pour 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, à celle obtenue dans la première partie, avec la différence que nous allons atteindre tous nos composants visuels, y compris la fenêtre principale, complètement à code.

L'application déjà fait, si vous voulez juste à télécharger, est disponible sur mon référentiel Google Code:

Je tiens à signaler immédiatement que la ZIP de cet exemple un poids inférieur à la dernière fois! :)

Nous créons le projet

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

newproject

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

deleteib

A ce stade, nous n'avons plus de n'importe quel ordinateur Windows, au moins par Interface Builder. , e modifichiamo la funzione main() in questo modo: Nous avons donc ouvrir 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 manqué le point
/ / Délégué à l'APP, puis le passer à «la main»
UIApplicationMain ( argc, argv, nil , @ "SecondAppAppDelegate" ) ; int RETVAL = UIApplicationMain (argc, argv, nul, @ "SecondAppAppDelegate");

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

Ouvrez SecondAppAppDelegate.me puis créer la fenêtre principale dans le code suivant:

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 = [[Ecran UIScreen] applicationFrame];
/ / Création d'une fenêtre - comme nous l'avons fait dans Interface Builder bye bye
[ [ UIWindow alloc ] initWithFrame : windowRect ] ; MainWindow UIWindow * = [[UIWindow alloc] initWithFrame: windowRect];
/ / Définir le fond de la fenêtre au jaune, à différencier
/ / La 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 vous obtenez une fenêtre jaune vous avez tout fait correctement!

, necessario solo se si usa Interface Builder. Dans le fichier SecondAppAppDelegate.h nous pouvons éliminer IBOutlet , uniquement nécessaire si vous utilisez Interface Builder. Également ajouter ici que nos variables globales, la dernière fois que nous étions entrés dans le contrôleur. Puis modifier 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;
numeroACaso int;
}

nonatomic, retain ) UIWindow * window; @ Property (nonatomic, retenir) UIWindow * fenêtre;

void ) controllaNumero; - (Void) getNumber;

@ Fin

, in quanto non stiamo usando Interface Builder. Encore une fois, nous avons préparé la définition de méthode controllaNumero , comme la dernière fois, mais nous avons éliminé l'indication IBAction , parce que vous n'utilisez pas d'Interface Builder.

Nous construisons l'interface à partir du code

C'est le temps de créer du code en utilisant tous les composants de notre interface. ed inseriamo il seguente codice: Revenons au 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
25e
26
27
28
29
30
31
32
/ / Création de 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 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 numéro de 1 à 10, essayez de deviner?"
myLabel ] ; [Fenêtre addSubview: MyLabel];

/ / Création de 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";
numero ] ; [Fenêtre addSubview: nombre];

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

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

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

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

Maintenant, nous pouvons faire est de mettre en œuvre la méthode controllaNumero , qui sera identique (à part le prototype) à ce moment-là utilisé en dernier:

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é contrôle bouton");
[ numero.text integerValue ] ; numeroInserito = int [numero.text integerValue];
message; NSString * message;
"Il numero inserito è %d" , numeroInserito ) ; NSLog (@ "Le numéro saisi est% d", numeroInserito);
numeroInserito <numeroACaso ) { if (numeroInserito <numeroACaso) {
"Troppo basso..." ; message = @ "Trop peu ...";
( numeroInserito> numeroACaso ) { Sinon, si} (numeroInserito> numeroACaso) {
"Troppo alto..." ; message = @ "Trop haut ...";
( numeroInserito == numeroACaso ) { } Else if (numeroInserito numeroACaso ==) {
"Bravo hai indovinato" ; message = @ "Bravo, vous avez deviné»;
+ arc4random ( ) % 10 ; numeroACaso arc4random = 1 + () 10%;
"Numero pensato %d" , numeroACaso ) ; NSLog (@ "% d Nombre pensé," numeroACaso);
}
[ [ UIAlertView alloc ] UIAlertView alertMessaggio * = [[UIAlertView alloc]
"Responso" initWithTitle: @ "Réponse"
message: message
déléguée: 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 une utilisation directe d'un UIView ou UIViewController , juste parce que je voulais quitter ce aussi simple et rationnel que possible et, aussi, de montrer que les éléments ne sont pas toujours nécessaires. Toutefois insérer des 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 apporter des avantages dans de nombreux autres cas, cependant, certaines sont pratiquement indispensables ein, comme nous le verrons dans le futur.

Suite ...

iPhone FirstApp: Devinez le nombre - Partie 1

La première source que je me levai dans mes mains a été écrit en Basic et se composait de quelques lignes de code, de m'avoir éclairé. C'était un jeu simple qui génère un nombre aléatoire de 1 à 10 et, par saisie au clavier, vérifiez que le numéro saisi est Maggioni, inférieur ou égal au nombre aléatoire. En dépit de sa rude simplicité reste, pour moi, l'un des meilleurs exemples - simple, amusant et pratique - pour expliquer à ceux qui ne savent rien sur la programmation ce que signifie réellement pour «programme informatique». J'ai donc décidé de le proposer pour l'iPhone d'Apple, peut-être va aider quelqu'un ...

Suite ...

Très court extrait: shuffle () en Javascript et Actionscript

En PHP il ya une fonction bien pratique appelé shuffle() qui vous permet de mélanger un tableau (voir astuce très courte: prendre des éléments aléatoires à partir d'un tableau en PHP ). Une excellente version du javascript j'ai trouvé ici . Légèrement révisé le code ci-dessous:

Suite ...

jQuery 1.1.0 simple curseur

l'attributo rel in questo modo: Inspiré par la suggestion que Santino Bivacqua j'ai ajouté jQuery simple curseur peut être défini pour chaque diapositive unique une timeOut différentes étiquettes en insérant dans li l'attribut rel de cette manière:

Suite ...

jQuery simple curseur

jQuery simple curseur vous permet de créer rapidement une fonctionnalité de diaporama à partir d'une simple liste UL/LI :

Suite ...

jQuery Plugin footer légende: ajouter des légendes aux images

jquery.footercaption.js est un plugin pour jQuery qui peut dynamiquement ajouter des légendes aux images et autres éléments sur la page ( cliquez ici pour une démonstration).

Suite ...

Undolibrary MatrixArray: une extension de la classe Array

di Actionscript 3.0, con lo scopo di semplificare la manipolazione di Array lineari usati come matrice n x m . MatrixArray est une extension de la classe Array d'ActionScript 3.0, avec pour objectif de simplifier la manipulation des Array utilisés comme linéaire n matrice x m. Cette classe est une partie de la bibliothèque Undolibrary (dans le paquet undolibrary.utils.MatrixArray ) que vous pouvez télécharger gratuitement la fonction via n'importe quel client de Google code SVN (Subversion) à:
svn checkout http://undolibrary.googlecode.com/svn/trunk/
Sinon, vous pouvez télécharger le fichier unique MatrixArray.as . Un exemple de l'utilisation de la matrice linéaire a été donné en Actionscript 3.0 pour les débutants: leçon n ° 2 où nous avons vu une de ses simple utilisation dans la production du jeu classique de Tic Tac Toe. ), proprio come una scacchiera. Un tableau de ce type est comparable à une zone rectangulaire ( w x h ), tout comme un échiquier. Avec cette classe, vous pouvez traiter un tableau de ce type comme une grille avec ses coordonnées x et y. Le MatrixArray J'ai utilisé, par exemple, dans le développement de toutes les icônes émotions éditeur logique pour Skype: Skypemote .

Suite ...

Créer un preloader en Actionscript 3.0 Generic

Il peut sembler un prévisible et déjà épuisé, mais avec Flash CS3 et la nouvelle gestion de classes de documents (package) autorisé dans ActionScript 3.0, n'est pas pleinement fonctionnel immédiatement créer un preloader. La dernière version de Flash, en fait, parvient à charger le film d'une manière différente des versions précédentes. Sur le net vous pouvez trouver des propositions et des solutions différentes pour créer un preloader "old school". Cependant, plusieurs exemples que j'ai trouvé ne me satisfaisait pas totalement car ils nécessitent de modifier le film pour qu'il fonctionne comme un preloaders classique. En pratique, lorsque vous développez doit toujours se rappeler "cette chose que j'ai à faire sinon la précharge ne fonctionne pas"! Et pour les films déjà rempli, alors?

Loader

La solution que j'ai adoptée, du moins pour l'instant, était de faire un film à l'extérieur (mon chargeur - voir l'exemple ) capable de charger n'importe quel film en dehors, y compris une photo! Cette solution, bien qu'elle nécessite essentiellement deux films (le chargeur et le vrai FILAME), il devient rentable que si vous pouvez créer un chargeur qui peut être utilisé encore et encore, qui est capable de télécharger n'importe quel film, toute résolution et une fréquence d'images.

Suite ...

Reflex et ReflexMe: de classe de base pour la classe

Dans l'après Flash CS3: Créez un effet réflexe sur tout MovieClip nous avons vu comment vous pouvez écrire une classe qui étend MovieClip, de le connecter à DesignTime à tout MovieClip dans la bibliothèque. J'ai découvert, cependant, que peut être chemin plus utile et économique à l'effet contraire. J'ai créé une classe Reflex ( Reflex.as ), avec l'intention de l'utiliser uniquement par le code. J'ai créé cette pensée de classe de déplacer le pointeur dans le constructeur d'un MovieClip. , ma leggermente modificato in modo da poter funzionare espressamente da codice: La nouvelle classe de Reflex contient essentiellement le même code inséré dans le premier ReflexMe , mais légèrement modifiée de manière à travailler spécifiquement par le code suivant:

1
2
3
4
/ /
sfx .*; les importations undolibrary * SFX..;
/ /
Reflex = new Reflex ( movieClipInstance ) ; var rx: = new Reflex Reflex (movieClipInstance);

Suite ...

Papervision3D: perlinNoise effets avec ()

Exploiter l'effet généré par perlinNoise() , vous pouvez créer des effets d'ondulation et de vagues avec Papervision3D .

Télécharger la source

Suite ...



Arrêtez SOPA