Artikel Tagged 'iPhone'
In dieser letzten Periode war ich auf drei Anwendungen für Apple iPhone, nahezu gleichzeitig. Zwei wurden bereits von Apple zugelassen und sind auf dem App Store entfernt: ihrerstes und iMakeLove .
In beiden Anwendungen haben die Verwendung eines Gegenstandes angenommen UIWebView den Anweisungen anzuzeigen.
Das Objekt UIWebView ilevato war wirklich komfortabel in diesem Fall. Es erlaubte mir, um schnell und eine schöne Texte, Bilder, und begleitet, wenn nichts anderes auf einer Webseite (Flash auf dem iPhone nicht im Lieferumfang enthalten) angezeigt wird.

Das Objekt UIWebView ist wirklich vielseitig und braucht nur sehr wenige Einstellungen verwendet werden. Der einzige Mangel ist die Anwesenheit von einem geheimnisvollen Schatten, wenn Sie eine Schriftrolle aus dem Bereich der Kontrolle ist an der Unterseite als an der Spitze zu machen scheint:

Nach einigen Recherchen wurde mir klar, dass dieses Verhalten auf die SDK, vor allem die neuesten Updates ab. Und Apple hat noch keine offizielle Erklärung dazu, wie um es zu entfernen entlassen, im Gegenteil, wies er als Code ist nicht eine Reihe von Hacks, die Verwendung von sensiblen Funktionen zu machen, oder die Dokumentation erlaubt. Schließlich gab ich auf, sowohl in Bezug auf Zeit, und weil die Lösungen schienen alle aus der Box Apple.
Zum Glück habe ich die Lösung habe, hoffe ich, ziemlich regelmäßig, die das Problem (Dank zu lösen scheint, Adolfo ):
1 2 3 4 5 6
| / / WebView ist die Kontrolle UIWebView [ webView.subviews objectAtIndex : 0 ] ; id = scroller [webView.subviews objectAtIndex: 0];
UIView * subView in [ scroller subviews ] ) for (UIView * Subview in [scroller Unteransichten]) subView class ] description ] isEqualToString : @ "UIImageView" ] ) if ([[[Subview Klasse] description] isEqualToString: @ "UIImageView"]) ; subView.hidden = YES; |
Wie durch spitze Adolfo , aber das ist ein Hack, der nicht mehr funktionieren mit zukünftigen Versionen des SDK kann.
Fortsetzung ...
Nach der Erläuterung , wie wir unsere Saiten in Xcode zu finden , ist es einfach, jetzt, wie zu sehen - durch die Anwendung der gleichen Technik - zu lokalisieren und Betrachtung von Bildern / interfaces mit Interface Builder erstellt.
Suchen Sie Graphik-Ressourcen
Der Prozess, wie erwähnt, ist die gleiche, wenn wir ein Bild bereits in unsere Ressourcen enthalten sind, oder sie setzen einen neuen ein, und wir wollen "locate" - das heißt, auf zwei oder mehr Bilder auf Basis der unterstützten Sprachen zu verwalten - klicken Sie einfach auf den Button Bild rechts ( Adium.png in diesem Beispiel), und wählen Sie Get Info:

Make File Localizable wir in der unteren linken Seite klicken.

Wir klicken Sie auf Hinzufügen und fügen Localization 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 auf dem Dateisystem wird reflektiert) unter virtuellen Ordnern English.lproj und Italian.lproj genau 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 ist in Interface Builder, wo wir sehen, manipuliert.
An diesem Punkt einfach überschreiben einer (oder beide Dateien Adium.png ) zu einem Ort der Bilder "flash" erhalten.
Suchen Sie die Dateien XIB
Auch die Schnittstellen mit Interface Builder gebaut werden können in ihrer Gesamtheit entfernt werden, wenn es für notwendig erachtet wird. ) con interfaccia XIB , lo selezioniamo, scegliamo Get Info dal menu contestuale, rendiamo il file localizzabile, aggiungiamo la localizzazione in italiano: Das Verfahren ist identisch mit dem grafischen Fähigkeiten durchgeführt: Fügen Sie ein ViewController (zB infoViewController ) XIB-Schnittstelle, wählen wir sie, wählen Sie Get Info aus dem Kontextmenü, geben Sie der Datei lokalisierbar, fügen Sie die italienische Lokalisierung:

Klicken Italiano oder Italienisch öffnet Interface Builder! ) all'interno della classica cartella Classes . Dieses Mal das Dateisystem, werden Sie feststellen, dass Sie zwei Verzeichnisse (erstellt English.lproj und Italian.lproj ) innerhalb der klassischen Klassen-Ordner. Beide haben ihre Dateien infoViewController.xib . Der Komfort in diesem, deutlich in den Code behoben, und wann wir unsere Controller-Code instanziieren wir eine "saubere" wie diese haben:
1 2
| [ InfoViewController alloc ] ; InfoViewController * info = [InfoViewController alloc]; info.view ] ; [Self.view addSubview: info.view]; |
Wie Sie sehen können gibt es keine Spur von Aussage über die Lage, völlig vom System verwaltet. Die beiden Schnittstellen, natürlich, können ganz unterschiedlich sein, wie wirksam sind als zwei separate XIB-Datei.
Fortsetzung ...
Führen Sie eine Methode, nach n Sekunden
Die ganze Familie performSelector ist wirklich interessant und kann in einer Vielzahl von Fällen nützlich. Die einfachste und häufigste Anwendung ist wie folgt:
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 der "Timer" ist nicht korrekt. Dieses Verfahren sollte daher verwendet werden, wenn es eine "erhebliche" zeitliche Präzision erforderlich ist.
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, wahr oder TRUE?
e TRUE sono in pratica la stessa edentica cosa: Going to Kamm durch die Kernel Apple iPhone können Sie erkennen, dass YES , true , und TRUE grundsätzlich dasselbe Edentia:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| / / Definition von JA # Define YES (BOOL) 1 # Define NO (BOOL) 0
/ / Definition der wahren # Define TRUE 1 # Define false 0
/ / Definition von TRUE # If! Defined (TRUE) # Define TRUE 1 # Endif
# If! Defined (FALSE) # Define FALSE 0 # Endif |
Zumindest für den Moment ...
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:% i", myInt); |
RGB-Wandler UIColor
1
| # Define RGBA (r, g, b, a) [UIColor colorWithRed: r/255.0 grün: blau g/255.0: b/255.0 alpha: a] |
Parameter an eine NSTimer
Unter Ausnutzung der Parameter userInfo können Sie einen Zeiger auf ein Objekt, um unsere Methode durch den Timer aufgerufen senden.
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: self selector: @ selector (timerMethod) userInfo: objectPointer wiederholt: 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 eine einfache Möglichkeit, eine kurze Zeit benötigt, um die Geschwindigkeit der Ausführung des Codes zu überprüfen, berechnet:
1 2 3 4
| ; CFAbsoluteTime initialTime CFAbsoluteTimeGetCurrent = (); / / ... Frack ; CFAbsoluteTime finalTime CFAbsoluteTimeGetCurrent = (); "Tempo trascorso %f" , finalTime - initialTime ) ; NSLog (@ "verstrichene Zeit% f", finalTime - initialTime); |
Fortsetzung ...
non funzionano quando un UIButton è impostato in modalità UIButtonTypeCustom ! Die Zustände UIControlStateSelected oder UIControlStateHighlighted nicht funktionieren, wenn ein UIButton -Modus eingestellt ist UIButtonTypeCustom ! Oder besser gesagt, nicht funktionieren (weil für andere Arten von Button vorbehalten), zum Beispiel zu einer Zwei-Staaten-Schaltfläche zu erstellen: toggle beachten. Wenn wir zwei Bilder (und stato1.png stato2.png) für unsere Button erstellt haben, können wir wie folgt vorgehen:
1 2 3
| / / Die Header-Dateien, dass wir eine globale Variable für usaremo erstellen / / Check der Toggle wurden ToggleFlag BOOL; |
Nun erstellen wir unseren Button:
1 2 3 4 5 6 7 8 9
| / / Wir schaffen eine Taste und legen wir es zunächst in den Zustand "stato1.png" / / Edit initWithFrame: (CGRect) {} 100,100,50,50 mit dem Standort 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: @ "," Forst: UIControlStateNormal]; [ UIImage imageNamed : @ "stato1.png" ] forState : UIControlStateNormal ] ; [ToggleButton SetBackgroundImage: [UIImage imageNamed: @ "stato1.png"] Forst: UIControlStateNormal]; self action : @selector ( onToggle : ) forControlEvents : UIControlEventTouchUpInside ] ; [ToggleButton addTarget: self Aktion: @ selector (onToggle:) forControlEvents: UIControlEventTouchUpInside]; toggleButton ] ; [Self.view addSubview: ToggleButton]; |
Wenn Sie auf den Button klicken, wird eine Nachricht zu verwaltenden senden 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 Toogle toggleFlag = toggleFlag!; [ UIImage imageNamed : ( toggleFlag ) ? @ "stato1.png" : @ "stato2.png" ] forState : UIControlStateNormal ] ; [ButtonClicked SetBackgroundImage: [UIImage imageNamed: (toggleFlag) @ "Stato1.png" @ "stato2.png"] Forst:? UIControlStateNormal]; } |
Fortsetzung ...
Eine Alternative sehr einfach zu laufen einen Stream einer MP3-Datei auf dem Apple iPhone können sein:
Fortsetzung ...
1. Strings über mehrere Zeilen
In Xcode, können Sie "Pause" ein String über mehrere Zeilen, indem Sie am Ende mit einem Backslash "\". Diese Funktion kann nützlich sein, wenn wir zum Beispiel den HTML-Text in einem Steuerelement einfügen möchten UIWebView :
Fortsetzung ...
Die Steuerung UIDatePicker ist vielleicht das schönste Geschenk grafische Kontrolle über das Apple iPhone. Neben der Schönheit der ist es auch einfach zu bedienen, vielseitig einsetzbar und in vielen Situationen.
Fortsetzung ...
o CGPoint , ad esempio. Die Syntax NSLog(@"%@", ... ); funktioniert und wird verwendet, um Informationen über Objekte zu erhalten, aber nicht auf C-Datentypen wie struct Arbeit CGRect oder CGPoint , zum Beispiel. o NSStringFromCGPoint : Um die Vorteile zu nehmen NSLog(@"%@", ... ); auch auf C-Stil Strukturen können auf Konvertierungsfunktionen wie verlassen 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, dieses Verfahren schreibt der kleine nützliche Makros wie zu verbessern:
1
| # Define 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) |
Oder:
1 2 3 4
| # Define 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) |
Fortsetzung ...
Anwendung Icon
57 × 57 Pixel-Symbol, das stellen unsere Anwendung "beeinträchtigt" durch das Apple iPhone automatisch: Sie fügen eine abgerundete Kante, eine helle und 3D-Effekte. Diese Einstellung kann durch Auswahl der Datei geändert werden [nome applicazione]-Info.plist und Hinzufügen der Eigenschaft "Icon umfasst Glanz-und Kegel-Effekte bereits":
Fortsetzung ...
Wenn Sie Zufallszahlen in einer Anwendung zu generieren sollen, müssen beiseite Apple iPhone Objective-C, weil es nicht vorschlagen, eine Klasse zu bestellen. Die Lösung wird vorgeschlagen, dass die C: rand(), srand(), random(), srandom() e arc4random() .
Fortsetzung ...
Neueste Kommentare
Mark : @ Mark: Danke für die Antwort. Zum Beispiel, wenn Sie einen Code zum Speichern / haben Sie die Ordner ...
Mark : Danke für die Antwort. Zum Beispiel, wenn Sie einen Code zum Speichern / haben Sie die Ordner ...
Giovambattista Fazioli : @ Mark: Im Prinzip, absolut, hängt viel ab, wie und was zum Download bereit. La ..
Mark : Hallo, guter Führer! Ich wollte fragen, können Sie den gleichen Code, um eine SQL-Datenbank laufen? Statt ...
Joseph : Hallo Ich wollte Sie fragen, wie können Sie in der Post finde ich hochgeladen einer Galerie von 50 Bildern, zum Beispiel ...