Artikel Tagged 'Undolibrary'


iPhone SecondApp: Guess the Zahl - Teil 2

Wie bereits erwähnt FirstApp iPhone: Guess the Zahl - Teil 1 sehen wir, wie Sie eine Anwendung für das Apple iPhone ohne Interface Builder zu machen! In der Tat werden wir beseitigen physischen Dateien von Interface Builder Wizard erstellt Xcode. Am Ende von diesem Post, dann haben wir eine Anwendung in jeder Hinsicht identisch, die denen im ersten Teil gebaut, mit dem Unterschied, dass wir alle unsere visuelle Komponenten, einschließlich der im Hauptfenster für vollständige Code zu erreichen.

Die Anwendung bereits gemacht, wenn Sie gerade herunterladen möchten, finden Sie auf meiner Google-Code-Repository:

Ich möchte darauf hinweisen, das sofort als ZIP dieses Beispiels wiegt weniger als das letzte Mal! :)

Wir schaffen das Projekt

Wir beginnen mit der Erstellung unseres Projektes SecondApp (um es von FirstApp unterscheiden), obwohl diese Zeitfenster-basierte Applikation Bitte wählen Sie:

newproject

Nun wollen wir löschen alles, was mit Interface Builder. : eliminatelo anche dal file system, quindi selezionate Also Move to Trash . Beseitigen Sie die Datei MainWindow.xib , sich im Ordner Resources , entfernen Sie sie aus dem Dateisystem auch, und wählen Sie dann auch den Papierkorb verschieben. nella casella Main nib file base name : Wählen Sie dann die Datei SecondoApp-info.plist und löschen Sie den Verweis auf die MainWindow nib-Datei in der Main-box basierte Name:

deleteib

An dieser Stelle haben wir nicht mehr alle Fenster, zumindest über Interface Builder. , e modifichiamo la funzione main() in questo modo: Also öffnen wir die Datei main.m , in gelegen Other Sources , und ändern Sie die Funktion main() etwa so:

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];

/ / Durch das Entfernen der Datei. XIB wir verloren Tracking
/ / Die App Delegierter und dann weiterzugeben, um "Hand"
UIApplicationMain ( argc, argv, nil , @ "SecondAppAppDelegate" ) ; int retVal = UIApplicationMain (argc, argv, nil, @ "SecondAppAppDelegate");

; [Pool release];
zurück retVal;
}

Öffnen Sie SecondAppAppDelegate.me dann schaffen wir das Hauptfenster über den Code:

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

/ / Holen Sie sich die Bildschirmgröße (320, 480)
UIScreen mainScreen ] applicationFrame ] ; CGRect windowRect = [[UIScreen mainScreen] applicationFrame];
/ / Erzeugt ein Fenster - so wie wir bye bye zu Interface Builder tat
[ [ UIWindow alloc ] initWithFrame : windowRect ] ; UIWindow MainWindow * = [[UIWindow alloc] initWithFrame: windowRect];
/ / Stellen Sie den Hintergrund des Fensters, um gelbe, zu differenzieren
/ / Die ältere Anmeldung FirstApp
[ UIColor yellowColor ] ] ; [MainWindow setBackgroundColor: [UIColor yellowColor]];

mainWindow ] ; [Self setWindow: MainWindow];
; [Window makeKeyAndVisible];

; [MainWindow release];
}

Sie können bereits testen Sie die Anwendung, wenn ein Fenster erscheint gelb Sie haben alles richtig gemacht!

, necessario solo se si usa Interface Builder. In der Datei SecondAppAppDelegate.h können wir beseitigen IBOutlet , nur benötigt, wenn Sie Interface Builder verwenden. Auch hier hinzufügen, dass unsere globale Variablen, das letzte Mal, dass wir in der Steuerung eingegeben hatte. Dann ändern Sie die Datei SecondAppAppDelegate.h :

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

NSObject <UIApplicationDelegate> { @ Interface SecondAppAppDelegate: NSObject {<UIApplicationDelegate>
UIWindow * Fenster;

UITextField * Zahl;
UIButton *-Taste;
int numeroACaso;
}

nonatomic, retain ) UIWindow * window; @ Property (atomare, behalten) UIWindow * Fenster;

void ) controllaNumero; - (Void) getNumber;

@ End

, in quanto non stiamo usando Interface Builder. Auch in diesem Fall haben wir die Definition der Methode vorbereitet controllaNumero , wie beim letzten Mal, aber wir haben den Hinweis beseitigt IBAction , da wir nicht mit Interface Builder.

Wir bilden die Schnittstelle Code

Es ist Zeit, um Code mit allen Komponenten unserer Schnittstelle zu schaffen. ed inseriamo il seguente codice: Wir kehren in der Datei SecondAppAppDelegate.m , posizioniamoci vor [mainWindow release] und setzen Sie den folgenden Code ein:

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
/ / Erstellen Sie auf die Titelleiste
[ [ 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: @ "Guess eine Reihe"];
navigationItem animated : NO ] ; [MyNavigationBar pushNavigationItem: navigationItem animiert: NO];
myNavigationBar ] ; [Window addSubview: myNavigationBar];

/ / Erstellen Sie das Etikett
[ [ 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 = @ "Das iPhone hat eine Zahl von 1 bis 10 ausgebildet, versuchen zu erraten?"
myLabel ] ; [Window addSubview: myLabel];

/ / Erstellen der Texteingabe
UITextField alloc ] initWithFrame : CGRectMake ( 10 , 120 , 300 , 30 ) ] ; Zahl = [[UITextField alloc] initWithFrame: CGRectMake (10, 120, 300, 30)];
numero.borderStyle = UITextBorderStyleRoundedRect;
numero.textAlignment = UITextAlignmentCenter;
numero.keyboardType = UIKeyboardTypeNumberPad;
"Inserisci il numero" ; numero.placeholder = @ "Nummer eingeben";
numero ] ; [Window addSubview: Anzahl];

/ / Erstellen der Taste
UIButton buttonWithType : UIButtonTypeRoundedRect ] ; Taste = [UIButton buttonWithType: UIButtonTypeRoundedRect];
10 , 180 , 300 , 30 ) ; bottone.frame = CGRectMake (10, 180, 300, 30);
@ "Premi qui" forState : UIControlStateNormal ] ; [Button setTitle: @ "Hier klicken" forState: UIControlStateNormal];
self action : @selector ( controllaNumero ) forControlEvents : UIControlEventTouchUpInside ] ; [AddTarget Button: Selbst Aktion: @ selector (getNumber) forControlEvents: UIControlEventTouchUpInside];
bottone ] ; [Window addSubview: Taste];

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

della scorsa volta, subito dopo il [mainWindow release]; inseriamo: Da das ' applicationDidFinishLaunching entspricht viewDidLoad wie beim letzten Mal, direkt nach dem [mainWindow release]; Einsatz:

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

Jetzt können wir tun, ist die Methode umzusetzen controllaNumero , die gleich wird (abgesehen von dem Prototyp) zum letzten Mal benutzt ein:

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 (@ "gedrückten Taste Steuerung Zahl");
[ numero.text integerValue ] ; int numeroInserito = [numero.text integerWert];
message; NSString * message;
"Il numero inserito è %d" , numeroInserito ) ; NSLog (@ "Die eingegebene Zahl ist% d", numeroInserito);
numeroInserito <numeroACaso ) { if (numeroInserito <numeroACaso) {
"Troppo basso..." ; message = @ "zu niedrig ...";
( numeroInserito> numeroACaso ) { } Else if (numeroInserito> numeroACaso) {
"Troppo alto..." ; @ message = "Too high ...";
( numeroInserito == numeroACaso ) { } Else if (numeroInserito numeroACaso ==) {
"Bravo hai indovinato" ; @ message = "Bravo Sie haben es erraten";
+ arc4random ( ) % 10 ; numeroACaso = 1 + arc4random ()% 10;
"Numero pensato %d" , numeroACaso ) ; NSLog (@ "% d dachte:" numeroACaso);
}
[ [ UIAlertView alloc ] UIAlertView alertMessaggio * = [[UIAlertView alloc]
"Responso" initWithTitle: @ "Response"
Nachricht: Nachrichten
Delegierter: nil
"OK" cancelButtonTitle: @ "OK"
] ; otherButtonTitles: nil];
; [AlertMessaggio Show];
; [AlertMessaggio release];
"" ; numero.text @ = "";
}

Wir sind fertig!

Schlussfolgerungen und Überlegungen

, proprio perchè volevo lasciarlo il più semplice e snello possibile e, anche, per dimostrare che non sono elementi sempre necessari. Dieses Beispiel macht nicht den direkten Einsatz eines UIView oder UIViewController , weil ich es so einfach und einheitlich wie möglich verlassen wollten und auch, um zu zeigen, dass die Elemente nicht immer notwendig sind. Allerdings kann das Einfügen von Objekten direkt im Fenster haben einen Sinn in diesem Beispiel und andere sporadische Kontexten. portano comunque benefici in tantissimi altri casi, ein alcuni sono praticamente indispensabili; come avremo modo di vedere in futuro. Die Verwendung von UIView und UIViewController noch Vorteile bringen in vielen anderen Fällen, undbei einige sind fast unverzichtbar, wie wir in Zukunft sehen werden.

Mehr ...

iPhone FirstApp: Guess the Zahl - Teil 1

Die erste Quelle, die ich in seine Hände gingen in Basic geschrieben wurde und bestand aus ein paar Zeilen Code, für mich aufschlussreich. Es war ein einfaches Spiel, das eine zufällige Zahl von 1 bis 10 erzeugt und durch Tastatureingabe, bewiesen, dass die eingegebene Zahl Maggione, weniger als oder gleich auf die Zufallszahl war. Trotz seiner rauen Einfachheit bleibt für mich eines der besten Beispiele - einfach, Spaß und praktisch - bis auf diejenigen, die nicht wissen, etwas über die Programmierung, was tatsächlich für "Computerprogramm" gemeint zu erklären. Also habe ich es für Apple iPhone vorschlagen entschieden, wird vielleicht jemand helfen ...

Mehr ...

Sehr kurze Auszug: shuffle () in JavaScript und ActionScript

In PHP gibt es eine praktische Funktion namens shuffle() , die für das Mischen eines Arrays (siehe erlaubt Sehr kurze Trick: Nehmen Sie zufällige Elemente aus einem Array in PHP ). Eine ausgezeichnete Version des Javascript fand ich hier . Unter dem Code etwas überarbeitet:

Mehr ...

jQuery 1.1.0 einfachen Schieberegler

l'attributo rel in questo modo: Inspiriert von dem Vorschlag, dass Santino Bivacqua fügte ich jQuery einfachen Schieberegler für jede einzelne Folie ein gesetzt werden timeOut verschiedene Tags, indem Sie in li das Attribut rel auf diese Weise:

Mehr ...

jQuery einfachen Schieberegler

jQuery einfachen Schieberegler können Sie schnell eine Diashow-Funktion aus einer einfachen Liste UL/LI :

Mehr ...

jQuery Plugin footer Bildunterschrift: Beschriftungen hinzufügen, um Bilder

jquery.footercaption.js ist ein Plugin für jQuery , die dynamisch hinzugefügt werden können Beschriftungen, Bilder und andere Elemente auf der Seite ( klicken Sie hier für eine Demo).

Mehr ...

Undolibrary MatrixArray: eine Erweiterung der Array-Klasse

di Actionscript 3.0, con lo scopo di semplificare la manipolazione di Array lineari usati come matrice n x m . MatrixArray ist eine Erweiterung der Klasse Array von Actionscript 3.0, mit dem Ziel, um die Manipulation zu vereinfachen Array linearen als Matrix n x m verwendet. Diese Klasse ist ein Teil der Bibliothek Undolibrary (im Paket undolibrary.utils.MatrixArray ) kostenlos herunter geladen werden können Funktion von jedem Client aus über Google Code SVN (Subversion) zu:
svn checkout http://undolibrary.googlecode.com/svn/trunk/
Alternativ können Sie die einzelne Datei MatrixArray.as . Ein Beispiel für den Einsatz von Linear-Arrays findet sich in Actionscript 3.0 für Anfänger: Lektion # 2 , wo wir eine seiner einfacher in der Umsetzung des klassischen Spiels Tic Tac Toe sah. ), proprio come una scacchiera. Ein Array von diesem Typ ist vergleichbar mit einer rechteckigen Fläche ( w x h ), wie bei einem Schachbrett. Mit dieser Klasse ist möglich, ein Array dieses Typs genau wie ein Gitter mit seiner Koordinaten x und y zu behandeln. Die MatrixArray Ich habe es benutzt, zum Beispiel bei der Entwicklung von all der Logik der Herausgeber der Emotion Icons für Skype: Skypemote .

Mehr ...

Erstellen einer generischen preloader in Actionscript 3.0

Es kann ein berechenbarer und bereits erschöpft scheinen, aber mit Flash CS3 und der neuen Verwaltung von Dokumenten-Klassen (Paket) in Actionscript 3.0 zulässig ist, nicht ganz sofort eine preloader funktioniert. Die neueste Version von Flash in der Tat, verwaltet das Laden der Film so ganz anders als frühere Versionen. Im Netz finden Sie verschiedene Vorschläge und Lösungen, um einen Preloader "alten Schule" zu schaffen. Allerdings hat mehrere Beispiele fand ich mich nicht zufrieden, da sie voll, um den Film zu verändern, so dass es wie ein klassisches preloader funktioniert erfordern. In der Praxis müssen, wenn Sie entwickeln immer daran denken: "Diese Sache muss ich tun, damit die Vorspannung sonst nicht funktioniert!" Und für Filme, die ausgefüllt werden, dann?

Ladeprogramm

Die Lösung, die ich angenommen habe zumindest bis jetzt, war es, einen Outdoor-Film zu erstellen (mein Lader - siehe Beispiel ) in der Lage, jeden Film außerhalb, darunter ein Bild hochzuladen! Diese Lösung, obwohl es im Grunde zwei Filme (der Loader und das filamato true) erfordert, wird es wirtschaftlich nur, wenn Sie einen Loader, der immer und immer wieder werden, die in der Lage, jeden Film laden ist, jeden zu schaffen Auflösung und eine Frame-Rate.

Mehr ...

Reflex und ReflexMe: von Klasse zu Klasse Basis

Post in Flash CS3: Erstellen Sie eine Reflexwirkung auf jeden MovieClip wir gesehen, was es kann eine MovieClip erweiternde Klasse zu schreiben, um es zu Entwurfszeit eine Verbindung zu einem MovieClip in der Bibliothek hatte. Ich entdeckte aber, dass unter Umständen nützlicher und wirtschaftlichen gehen durch die Rückseite. Ich habe eine Klasse Reflex ( Reflex.as ), die beabsichtigen, sie nur auf Code zu verwenden. Ich habe diese Klasse bedenkt Bewegen des Mauszeigers im Konstruktor zu einem MovieClip. , ma leggermente modificato in modo da poter funzionare espressamente da codice: Die neue Klasse Reflex enthält im Wesentlichen den gleichen Code in das erste eingefügt ReflexMe , aber leicht modifiziert, um speziell mit Code:

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

Mehr ...

Papervision3D: Effekte mit perlinNoise ()

Das Ausnutzen der Effekt erzeugt durch perlinNoise() können Sie Wellen-Effekte und Wellen mit Papervision3D .

Download des Quellcodes

Mehr ...



Stop SOPA