Kategorie 'Mobile'
Auf Apple iPhone und iPod wurden verwendet, um eine einzelne Image-Datei zu verwalten, um die Anwendung, die Datei zu laden Default.png . Auf Apple iPad erfordert jedoch die verschiedenen Management-dell'orientamente die Annahme mehrere Bilddateien, um sicherzustellen, sehen Sie den Startbildschirm all'orientamente für das Gerät korrigiert. Während der Start der Anwendung, da es für das iPhone hat, ist es nicht möglich, den Code für "Wunder" wie das Gerät orientierten nehmen. Zum Glück wurde es in das automatische Laden von speziellen Dateien von der Orientierung eingeführt:

Die Dateien werden unterstützt, zusätzlich zu den klassischen Default.png , dass Sie niemals verwenden, da es skaliert und Orientierung nach Anspruch verformt, sind:
- Standard-Portrait.png
- Standard-PortraitUpsideDown.png
- Standard-Landscape.png
- Standard-LandscapeLeft.png
- Standard-LandscapeRight.png
e LandscapeRight possono essere utilizzate per determinare orietamento e verso di quest'ultimo. Die Versionen PortraitUpsideDown , LandscapeLeft und LandscapeRight kann zur orietamento bestimmen und in Richtung der letzteren werden.
Für Anwendung gestartet wird, dann, wie von Apple empfohlen, ist es gut, "neu zu gestalten" - wo nötig - unsere Ansichten Handeln in application:didFinishLaunchingWithOptions .
Mehr ...
In den meisten Fällen, oder weil wir gewohnt sind oder weil wir in Tutorien und in manchen Texten gesehen haben, verwenden wir die setAnimationDidStopSelector auf diese Weise:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| nil context : NULL ] ; [UIView beginAnimations: nil context: NULL]; 1.5 ] ; [UIView setAnimationDuration: 1,5]; UIViewAnimationCurveEaseInOut ] ; [UIView setAnimationCurve: UIViewAnimationCurveEaseInOut]; self ] ; [UIView setAnimationDelegate: self]; @selector ( removeView ) ] ; [UIView setAnimationDidStopSelector: @ selector (removeView)];
; myView.alpha = 0;
; [UIView commitAnimations];
/ /
void ) removeView { - (Void) {removeView ; [MyView removeFromSuperview]; } |
come delegato e tramite la setAnimationDidStopSelector gli invia un messaggio removeView quando l'animazione è terminata. In dem obigen Code der setAnimationDelegate gesetzt self als Delegierter und durch setAnimationDidStopSelector sendet eine Nachricht removeView , wenn die Animation beendet ist. Der Code selbst korrekt ist, jedoch zur Verwendung einer Nachricht Wortes ( removeView ) aufweist, weggelassen werden könnte. Nun, hier ist der gleiche Code, mit dem gleichen Effekt, ohne die Nachricht removeView :
1 2 3 4 5 6 7 8 9
| nil context : NULL ] ; [UIView beginAnimations: nil context: NULL]; 1.5 ] ; [UIView setAnimationDuration: 1,5]; UIViewAnimationCurveEaseInOut ] ; [UIView setAnimationCurve: UIViewAnimationCurveEaseInOut]; myView ] ; [UIView setAnimationDelegate: myView]; @selector ( removeFromSuperview ) ] ; [UIView setAnimationDidStopSelector: @ selector (removeFromSuperview)];
; myView.alpha = 0;
; [UIView commitAnimations]; |
! Das Interessante an diesem Ansatz ist, dass myView könnte sein, eine Unterklasse von UIView ! Es kann daher eine benutzerdefinierte Klasse mit eigenen Botschaften zu sein und in der Weise dargelegt, durch leise genannt setAnimationDidStopSelector . Darüber hinaus sind die setAnimationDidStopSelector zustimmen Selektoren mit Parametern:
1 2 3 4 5 6 7 8 9
| nil context : NULL ] ; [UIView beginAnimations: nil context: NULL]; 1.5 ] ; [UIView setAnimationDuration: 1,5]; UIViewAnimationCurveEaseInOut ] ; [UIView setAnimationCurve: UIViewAnimationCurveEaseInOut]; myView ] ; [UIView setAnimationDelegate: myView]; @selector ( myMessage : param1 : ) ] ; [UIView setAnimationDidStopSelector: @ selector (myMessage: param1 :)];
; myView.alpha = 0;
; [UIView commitAnimations]; |
Dieses Beispiel auf alle Fälle hier, wo wir einen Delegierten erweitert werden kann, ist nicht atro ein Zeiger auf eine Instanz eines Objekts.
Mehr ...
Nach der Erläuterung , wie wir unsere Saiten in Xcode zu finden , wie wir jetzt sehen, ist einfach - die Anwendung der gleichen Technik - zum Auffinden und Anzeigen von Bildern / interfaces mit Interface Builder erstellt.
Suchen Sie Grafik-Ressourcen
Der Prozess, wie erwähnt, ist die gleiche, wenn wir ein Bild bereits in unserer Ressourcen enthalten haben, oder sie setzen einen neuen ein, und wir wollen "lokalisieren" - das heißt, die Verwaltung von zwei oder mehr Bilder auf den unterstützten Sprachen basieren - klicken Sie einfach auf die Taste Bild rechts ( Adium.png in diesem Beispiel), und wählen Sie Get Info:

Wir klicken Sie auf Datei Localizable in der linken unteren Stellen.

Klicken Sie auf Hinzufügen und fügen Lokalisierung Italian :

Um zu erhalten:

esattamente come accadeva con il testo: Unser Bild bewegt wird (physisch, eines der seltenen Male, wenn das passiert nell'alberatura Xcode wird auf dem Dateisystem reflektiert) unter virtuellen Ordnern English.lproj und Italian.lproj genau so, wie mit dem Text passiert:

contiene una stessa versione dell'immagine. An dieser Stelle jeden der Ordner English.lproj und Italian.lproj enthält die gleiche Version des Bildes. Standardmäßig - - die englische Version Dieses Bild wird innerhalb Interface Builder, wo wir sehen, manipuliert.
An diesem Punkt einfach überschreiben eines (oder beide Dateien Adium.png ), um eine Lokalisierung der Bilder "flash" erhalten.
Suchen Sie die Dateien XIB
Auch die Schnittstellen mit Interface Builder gebaut werden können in ihrer Gesamtheit lokalisiert werden, wenn es als notwendig erachtet wird. ) con interfaccia XIB , lo selezioniamo, scegliamo Get Info dal menu contestuale, rendiamo il file localizzabile, aggiungiamo la localizzazione in italiano: Die Vorgehensweise ist identisch mit dem mit den grafischen Fähigkeiten durchgeführt: Zum Hinzufügen eines ViewController (zB infoViewController ) XIB-Schnittstelle, wir ihn ausgewählt haben, wählen Sie Informationen aus dem Kontextmenü wählen, geben Sie die Datei lokalisierbaren, fügen Lokalisation in italienischer Sprache:

Klicken Sie auf Englisch oder Italienisch wird Interface Builder zu öffnen! ) all'interno della classica cartella Classes . Dieses Mal, das Dateisystem, werden wir bemerken, dass Sie zwei Verzeichnisse (erstellt English.lproj und Italian.lproj ) innerhalb der klassischen Klassen-Ordner. Beide werden ihre Dateien infoViewController.xib . Der Komfort in diesem, deutlich im Code behoben, wenn wir unsere Controller-Code instanziieren gehen werden wir eine "saubere" wie folgt aus:
1 2
| [ InfoViewController alloc ] ; InfoViewController * info = [InfoViewController alloc]; info.view ] ; [Self.view addSubview: info.view]; |
Wie Sie sehen können gibt es keine Spur einer Aussage über die Lage, völlig vom System verwaltet. Die beiden Schnittstellen, kann natürlich ganz anders sein, daß sie in jeder Hinsicht als zwei separate Dateien XIB sind.
Mehr ...
Vielleicht sollte ich schreiben "Sehr, sehr sehr kurze Schnipsel", jedoch ist eine ausgezeichnete und komfortable "Trick", dass werde ich zeigen. Die Ausführung der "zwei" Zeilen Code unten gezeigt, können Sie die Ausgabe von beliebigen URL und manipulieren.
Mehr ...
Ausführen eines Verfahrens nach n Sekunden
Die ganze Familie performSelector ist wirklich interessant und kann in einer Vielzahl von Fällen nützlich. Seine Anwendung einfachste und häufigste ist die folgende:
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 die "Timer" nicht korrekt ist. Dieses Verfahren sollte daher nicht verwendet werden, wenn "erhebliche" Zeit Präzision erforderlich.
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, true oder True?
e TRUE sono in pratica la stessa edentica cosa: Going to durchkämmen den Kernel Apple iPhone können Sie erkennen, dass YES , true und TRUE praktisch dasselbe edentica sind:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| / / Definition von JA # JA (BOOL) 1 definieren # Definieren NO (BOOL) 0
/ / Definition der wahren # Define TRUE 1 # Define FALSE 0
/ / Definition der TRUE # If! Definiert (true) # Define TRUE 1 # Endif
# If! Defined (FALSCH) # Define FALSE 0 # Endif |
Zumindest für jetzt ...
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 = [Herz CGImage]; / / 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:% s", myInt); |
Converter von RGB nach UIColor
1
| # Definieren RGBA (r, g, b, a) [UIColor colorWithRed: r/255.0 grün: blau g/255.0: b/255.0 alpha: a] |
Übergabe von Parametern an einer NSTimer
Ausnutzung der Parameter userInfo können Sie einen Zeiger auf unser Objekt zu senden an die Methode von Timer aufgerufen.
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: Selbst selector: @ selector (timerMethod) userInfo: objectPointer Wiederholungen: 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 ein einfacher Weg, um kurze Zeit benötigt, um die Geschwindigkeit der Ausführung von Code zu überprüfen, berechnet:
1 2 3 4
| ; CFAbsoluteTime initialTime CFAbsoluteTimeGetCurrent = (); / / ... Code ; CFAbsoluteTime finalTime CFAbsoluteTimeGetCurrent = (); "Tempo trascorso %f" , finalTime - initialTime ) ; NSLog (@ "verstrichene Zeit% f", finalTime - initialTime); |
Mehr ...
Ich möchte zeigen, und zeigt einige Beispiele, wie man hinzufügen und manipulieren Eigenschaften in Objective-C-Klasse. : Ein klassisches Beispiel, genau, ist wie folgt: bei der Definition der Schnittstelle unserer Klasse definieren wir zwei Eigenschaften nome und cognome :
e setter usati rispettivamente per leggere ed impostare le nostre due proprietà: In der Implementierung-Datei fügen wir die Anweisung @synthesize so dass Xcode für uns produzieren wird den Methoden getter -und setter bzw. verwendet werden, um 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 Sie gehen zu unserer Klasse verwenden, MyClass , dh wenn istanziaremo 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" @ Klasse TestViewController; NSObject <UIApplicationDelegate> { @ Interface TesAppDelegate: NSObject {<UIApplicationDelegate> UIWindow * Fenster; * 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, was ä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 Irreführung der Gleichwertigkeit der "variabli" interne (ivar) als Immobilien. Um den Unterschied zu verstehen, noch einmal vorschlagen, das gleiche wie der Verzicht, diese Zeit der @synthesize . . Nun, deshalb sollten wir mit uns zu tun, um die Methoden zu schreiben getter und setter . Zur weiteren betonen die Unterschiede, die internen Variablen rinominerò Einfügen einen Unterstrich vor dem Namen. 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 Beispiel die Zeiger auf die internen Variablen (incapsultate) geworden _nome und _cognome . . @property è scomparso, in quanto non serve più. Darüber hinaus gibt es vier Verfahren, die unseren Definitionen 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 Rückkehr; } / / Um "name" Set void ) setNome : ( NSString * ) stringaIngresso { - (Void) setNome: ( NSString *) {stringaIngresso _Name = StringaIngresso; } / / Für "Nachname" Get NSString * ) cognome { - ( NSString *) name { _cognome zurückkehren; } / / Auf "Nachname" Set void ) setCognome : ( NSString * ) stringaIngresso { - (Void) setCognome: ( NSString *) {stringaIngresso _cognome = stringaIngresso; } @ End |
Eine Klasse kann genau so geschrieben wie der vorherige verwendet werden, und zwar:
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 äquivalent zu:
@ "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 eigenen" Methoden get und set , Hervorhebung - auch mit dem Zusatz dell'underscore - die Unterschiede zwischen dem 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 funktionaler Ebene der persönliche Einsatz der Methoden get und set ermöglicht Echtzeit-Steuerung der Daten vor ihrer Einstellung (oder vor seiner Lesung) und dann eine echte Kapselung, um die interne Variable zu schützen.
Zum Beispiel wäre es möglich, den Durchgang von leeren Zeichenketten dem Eigentum 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 Variante
Wenn Sie die internen Variablen mit einem Unterstrich vor (wer rpoviene Adobe ActionScript könnte auch verwendet werden) nutzen wollen ist nicht notwendig, die Verwendung der Richtlinie aufzugeben @synthesize . Xcode macht es möglich, "verschmelzen" die oben genannten Methoden:
1 2
| _nome; @ Name = _Name synthetisieren; _cognome; @ Name = _cognome synthetisieren; |
. Dabei haben wir intern verwenden könnten Zeiger _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 . Auch wenn die Verwendung von @synthesize produziert automatische Generierung Methoden (Nachrichten) von getter und setter , ist auch wahr, dass sie das tut nur wenn er sie findet, wenn Sie so wollen, um "implementieren" eine Methode für Ihre getter und / oder setter können dies tun, auch wenn Sie die Richtlinie verwendet @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. Außerdem ist es nicht die Zugabe eines Verfahrens 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 @ = "Name der Voreinstellung"; "Cognome preimpostato" ; _cognome @ = "Name der Voreinstellung"; } Selbst zurückkehren; } void ) dealloc { - (Void) {dealloc ; [_Name Release]; ; [_cognome Release]; ; [Super dealloc]; } NSString * ) nome { - ( NSString *) name { _Name Rückkehr; } void ) setNome : ( NSString * ) stringaIngresso { - (Void) setNome: ( NSString *) {stringaIngresso stringaIngresso == @ "" ) stringaIngresso = @ "senza nome" ; if (@ stringaIngresso == "") stringaIngresso @ = "no name"; _Name = StringaIngresso; } NSString * ) cognome { - ( NSString *) name { _cognome zurückkehren; } void ) setCognome : ( NSString * ) stringaIngresso { - (Void) setCognome: ( NSString *) {stringaIngresso _cognome = stringaIngresso; } @ End |
, etc… In Zukunft werden wir dann sehen, die Details zu den Eigenschaften readonly , retain , etc ... 
Mehr ...
Unsere Website wird nicht mehr nur aus Computer-Terminals angezeigt. Mit der Verbreitung von mobilen, dank Apple iPhone, Zugriff auf die Website oder ein Blog wird zunehmend von einer Vielzahl von mobilen Geräten durchgeführt. Werden Sie Web Developer so viele Notwendigkeit, der Lage sein, abzufangen und zu identifizieren, die verschiedenen "Agenten", also das Mittel, mit denen ein Benutzer betrachten (Browsing) ist auf unseren Seiten.
Mehr ...
non funzionano quando un UIButton è impostato in modalità UIButtonTypeCustom ! Die Staaten UIControlStateSelected oder UIControlStateHighlighted funktionieren nicht, wenn ein UIButton Modus eingestellt ist UIButtonTypeCustom ! Oder besser gesagt, funktionieren nicht (weil für andere Arten von Button vorbehalten), zum Beispiel um eine Schaltfläche mit zwei Zuständen zu erstellen: Toggle-Note. Wenn wir zwei Bilder (stato1.png und stato2.png) für unsere Button erstellt haben, können wir wie folgt vorgehen:
1 2 3
| / / Die Header-Datei, dass wir eine globale Variable für usaremo erstellen / / Um die Überprüfung war BOOL toggleFlag; |
Nun erstellen wir unseren Button:
1 2 3 4 5 6 7 8 9
| / / Wir schaffen einen Knopf, und wir stellen Sie es zunächst in den Zustand "stato1.png" / / Edit initWithFrame: (CGRect)} {100,100,50,50 mit der Position 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: @ "" forState: UIControlStateNormal]; [ UIImage imageNamed : @ "stato1.png" ] forState : UIControlStateNormal ] ; [ToggleButton SetBackgroundImage: [UIImage imageNamed: @ "stato1.png"] forState: UIControlStateNormal]; self action : @selector ( onToggle : ) forControlEvents : UIControlEventTouchUpInside ] ; [ToggleButton AddTarget: Selbst Aktion: @ selector (onToggle :) forControlEvents: UIControlEventTouchUpInside]; toggleButton ] ; [Self.view addSubview: ToggleButton]; |
Wenn Sie auf den Button wird eine Nachricht zu hinterlassen verwaltet werden 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 der Toogle toggleFlag = toggleFlag!; [ UIImage imageNamed : ( toggleFlag ) ? @ "stato1.png" : @ "stato2.png" ] forState : UIControlStateNormal ] ; [ButtonClicked SetBackgroundImage: [UIImage imageNamed: (toggleFlag) @ "Stato1.png" @ "stato2.png"] forState:? UIControlStateNormal]; } |
Mehr ...
Eine Alternative wirklich einfach zu führen ein Bach eine mp3-Datei auf dem Apple iPhone können sein:
Mehr ...
o CGPoint , ad esempio. Die Syntax NSLog(@"%@", ... ); funktioniert und wird verwendet, um Informationen über Objekte zu erhalten, aber nicht auf C-Datentypen wie struct arbeiten CGRect oder CGPoint , zum Beispiel. o NSStringFromCGPoint : Um die Vorteile zu nehmen NSLog(@"%@", ... ); auch C-Stil-Strukturen können wir auf Umwandlung Funktionen wie Lean 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, die Verfahren entsprechende kleine nützliche Makros wie zu verfeinern:
1
| # Definieren NSLogRect (rect) NSLog (@ "% s (% 0.0f,% 0.0f)% 0.0fx% 0.0f", # rect, rect.origin.x, rect.origin.y, rect.size.width , rect.size.height) |
Oder:
1 2 3 4
| # Definieren 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) |
Mehr ...
Neueste Kommentare
Gabriel : Hallo, interessanter Artikel. Ich bräuchte etwas ähnliches, aber mit einigen Änderungen. In einem ...
Sebastian : Great Aktien - vielen Dank!
Betreff : sehr hilfreich! Ich versuchte es und es ist genau das, was ich brauchte. Jetzt frage ich mich wie bekomme ich ...
Vik : Mit strategischer Hilfe!
Pfeffer : Hallo zusammen, ich weiß nicht, ob Sie einer der Schöpfer des WP-Plugin Bannerize sind. Ich habe ein gesichtet ...