Artikel Tagged 'Apple iPhone'


10 nützliche Snippets Objective-C

Bewegen Sie den Doppel-Tap auf dem Simulator

Der Simulator iPhones / iPad Xcode können Sie die Doppel-tippen Sie auf die Alt-Taste gedrückt zu simulieren. Dies ist nützlich, um die Funktion von Pinch, dass zu vergrößern oder zu blättern fernhalten Inhalt in die Ansicht mit Objekten oder simulieren UIWebView . Nun, einige von euch bemerkt, dass die Simulation der "zwei Finger" geht in symmetrischer Weise immer von der Mitte des Bildschirms. So verschieben Sie diese "Mitte" ist auch nur bei gedrückter SHIFT-Taste.

Fortsetzung ...

Sehr kurze Auszug: erkennen iPad auf dem Gerät und im Web

Nicht nur Browser portatitli Desktop-oder Browser die Seiten von uns entwickelte, nun die Ära der mobilen - die mobile Browser - ist weit verbreitet, dank Geräten wie dem Apple iPhone, Android, etc ... Außerdem, auch für Entwickler für das Apple iPhone ist obligatorisch, um welches Gerät die Anwendung läuft verstehen.

Im Web ist die Situation ähnlich wie in angezeigt Browser oder Mobile Browser? , mit der Variante:

Fortsetzung ...

Private APIs in der Entfernung des Scroll in einem UIWebView Objekt

In sehr kurzer Ausschnitt: Entfernen von einem UIWebView Objekt blättern wir sahen, wie es möglich war, das Buch von einem Objekt zu entfernen UIWebView :

Fortsetzung ...

Objective-C: Informationen von Breiten-und Längengrad

Ich antworte auf Mirko fragen mich, wie der umgekehrte Fall in vorgeschlagenen machen, um Erste Breiten-und Längengrad in Objective-C .
Ausgehend von den Werten der Breiten-und Längengrad Sie die Klasse verwenden können MKReverseGeocoder um eine Reihe von Informationen, wie z. B. erhalten: Stadt, Bundesland, vollständige Anschrift, Junge!

Fortsetzung ...

Sehr kurze Auszug: Entfernen von einem Objekt navigieren Sie zum UIWebView

Dokumentiert oder undokumentiert, ein Feature, manchmal ist man gezwungen, mit Gewalt umzusetzen! Nützlich in manchen Situationen ist das navigieren Sie zu einem Objekt aus zu entfernen UIWebView . : Interessanterweise im Allgemeinen finden Sie, wie Sie die Komponenten "internen" Zugriff Teil des Objekts in Frage: In diesem Beispiel ruft das Objekt Zeiger UIScrollView in das Thema UIWebView :

Fortsetzung ...

Wie bekomme ich Längen-und Breitengrad in Objective-C

Das Framework stellt MapKit viele nützliche Funktionen, mit Ausnahme der Rückgabe von Längen-und Breitengrad von einer Adresse. In JavaScript, zum Beispiel, können Sie den Service von Google Geocoding zur Verfügung gestellt und diskutiert in Google Maps: Wie man Breitengrad und Längengrad von einer Adresse zu bekommen . Apple iPhone oder iPad, können Sie jedoch dieses Hindernis mit einem anderen Google-Services zu überwinden. Insbesondere können Sie direkt aufrufen, um den URL:

1
http://maps.google.com/maps/geo?q = [Adresse] & output = csv

Wo ist [indirizzo] , um den String mit der Adresse, die Sie wollen, um die Koordinaten zu transformieren geben. Die Ausgabe, ist vom Typ:

1
200,8,41.9128300,12.2241172

). Der erste Wert, 200 , zeigt, dass alles gut gegangen ist ( 200 OK ). Die zweite, 8 , ist Google die Richtigkeit Parameter (1-10). Die letzten beiden Werte sind schließlich Längen-und Breitengrad. Jetzt sehen wir einen Prototyp für ein Verfahren in unseren Anwendungen können enthalten sein:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
CLLocationCoordinate2D ) getLocationFromAddress : ( NSString * ) address { - (CLLocationCoordinate2D) getLocationFromAddress: ( NSString *) Adresse {
urlString = [ NSString stringWithFormat : @ "http://maps.google.com/maps/geo?q=%@&output=csv" , NSString * urlString = [ NSString stringWithFormat: @ "% @ http://maps.google.com/maps/geo?q = & output = csv"
NSUTF8StringEncoding ] ] ; [StringByAddingPercentEscapesUsingEncoding Adresse: NSUTF8StringEncoding]];

listItems = [ locationString componentsSeparatedByString : @ "," ] ; NSArray * ListItems = [locationString componentsSeparatedByString: @ ""];

/ / Int zoom = 0;
0.0 ; Doppel-Breite = 0,0;
0.0 ; Doppel-Länge = 0,0;

listItems count ] > = 4 && [ [ listItems objectAtIndex : 0 ] isEqualToString : @ "200" ] ) { if ([ListItems count]> = 4 & & [[ListItems objectAtIndex: 0] isEqualToString: @ "200"]) {
/ / Zoom = [[ListItems objectAtIndex: 1] intValue];
listItems objectAtIndex : 2 ] doubleValue ] ; Latitude = [[ListItems objectAtIndex: 2] doubleValue];
listItems objectAtIndex : 3 ] doubleValue ] ; Länge = [[ListItems objectAtIndex: 3] doubleValue];
{ Else {}
/ / Fehler
}
CLLocationCoordinate2D location;
location.latitude = Breite;
location.longitude = Länge;

Ort der Rückgabe ist;
}

Hinweise von Interesse

, alla stregua della funzione explode ( ) del PHP per intenderci. Der String zurückgegeben in locationString "split" wird durch das Verfahren componentsSeparatedByString , wie die Funktion explode ( ) in PHP zum Beispiel. Ich habe das Beispiel, das ich vorgeschlagen - aber bemerkte - der Code selbst die Google Genauigkeit Parameter, Genauigkeit oder Skalierungsfaktor, bezeichnen wir abrufen zoom .

Quelle als

Für Vollständigkeit, ich machte kleine Beispiel-Anwendung , mit der Sie die Methode oben vorgeschlagenen versuchen können, geben Sie eine beliebige Adresse und das iPhone wird auf der Karte zu zeigen.


Quellcode

Ich danke dem Team devapp für die Inspiration dieses Artikels.

Fortsetzung ...

setAnimationDidStopSelector: verschiedene Verwendungen und Fortgeschrittene

In den meisten Fällen, oder weil wir es gewohnt, oder weil wir haben in Tutorien gesehen und in einigen Texten, 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 den obigen Code die setAnimationDelegate Satz self als Delegierter und durch setAnimationDidStopSelector sendet eine Nachricht removeView , wenn die Animation beendet ist. Der Code selbst ist richtig, aber nutzt eine Nachricht Definition ( removeView ), die 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 eine Unterklasse von werden UIView ! Es kann daher eine benutzerdefinierte Klasse mit eigenen Nachrichten und, wie gesagt, leicht aufrufbar sein setAnimationDidStopSelector . Darüber hinaus die setAnimationDidStopSelector einverstanden Selektoren mit den 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 ein Delegierter erweitert werden kann, ist Atro nicht einen Zeiger auf eine Instanz eines Objekts.

Fortsetzung ...

iPhone: Beseitigen Sie die Schatten-Effekt beim Scrollen eine UIWebView

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 .

TheFirst 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.

TheFirst

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:

UIWebView Shadow

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 ...

Objective-C: machen Eigenschaften in einer Klasse

Ich möchte zeigen und diskutieren einige Beispiele, wie man hinzufügen und manipulieren Eigenschaften in Objective-C-Klasse. : Ein klassisches Beispiel, genau, ist die folgende, in der Definition unserer Interface-Klasse definiert zwei Eigenschaften nome und cognome :

1
2
3
4
5
6
7
8
9
10
11
/ / MyClass.h
# Import <Foundation/Foundation.h>

NSObject { @ Interface MyClass: NSObject {
nome; NSString * name;
cognome; NSString * name;
}

retain ) NSString * nome; @ Property (behalten) NSString * name;
retain ) NSString * cognome; @ Property (behalten) NSString * name;
@ End

e setter usati rispettivamente per leggere ed impostare le nostre due proprietà: In der Implementierung-Datei die Anweisung einfügen @synthesize , so dass Xcode für uns produzieren werden die Methoden getter -und setter bzw. zum 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 du gehst, um unsere Klasse MyClass , dass, wenn istanziaremo ist 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"

@ Class TestViewController;

NSObject <UIApplicationDelegate> { @ Interface TesAppDelegate: NSObject {<UIApplicationDelegate>
UIWindow * window;
* 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 ist das ä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 eine Irreführung der Gleichwertigkeit der "variable" interne (ivar) mit dem Namen des Immobilien-Objekt selber. Um zu verstehen, der Unterschied, wieder schlagen die gleiche wie Verzicht, dieses Mal, die @synthesize . . Nun, deshalb sollten wir darauf achten, dass die Methoden zu schreiben getter und setter . Zur weiteren betonen die Unterschiede, werden die internen Variablen durch Einfügen eines vor dem Namen unterstreichen umzubenennen. 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 Zeiger auf interne Variablen (incapsultate) geworden _nome und _cognome . . @property è scomparso, in quanto non serve più. Darüber hinaus gibt es vier Definitionen von Methoden, die unsere 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 Return;
}
/ / Um "name" Set
void ) setNome : ( NSString * ) stringaIngresso { - (Void) setNome: ( NSString *) {stringaIngresso
_Name = StringaIngresso;
}

/ / Für "Nachname" Get
NSString * ) cognome { - ( NSString *) name {
_cognome return;
}
/ / Für "Nachname" Set
void ) setCognome : ( NSString * ) stringaIngresso { - (Void) setCognome: ( NSString *) {stringaIngresso
_cognome = stringaIngresso;
}

@ End

Geschrieben als eine Klasse genau wie die vorherigen genutzt werden können, nämlich:

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 gleichbedeutend ist mit:

@ "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" Methoden get und set , Hervorhebung - auch mit dem Zusatz dell'underscore - die Unterschiede zwischen den 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 der funktionalen Ebene der persönlichen Nutzung der Methoden get und set ermöglicht Echtzeit-Steuerung der Daten vor ihrer Einstellung (oder vor seiner Lesung) und dann eine echte Kapselung der internen Variablen zu schützen.
Zum Beispiel wäre es möglich, den Durchgang der leeren Saiten, um eine Immobilie 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 Variation

Wenn Sie die internen Variablen mit dem verwenden möchten unterstreichen vor (wer rpoviene Adobe Actionscript könnte auch verwendet werden) ist nicht notwendig, die Verwendung der Richtlinie aufzugeben @synthesize . Xcode macht es möglich, "merge" den oben genannten Verfahren:

1
2
_nome; @ Synthesize name = _Name;
_cognome; @ Synthesize name = _cognome;

. Dabei haben wir den Zeiger auf die intern verwenden könnten _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 . Außerdem, es ist wahr, dass die Verwendung von @synthesize automatische Generierung Methoden (Nachrichten) von produziert getter -und setter ist es auch wahr, dass, wenn er sie nicht findet, so, wenn Sie "implementieren" eine Methode für Ihren gewünschten getter -und / oder setter können Sie dies tun, auch wenn Sie der Richtlinie verwendete @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. Darüber hinaus gibt es die Zugabe einer Methode 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 @ = "Preset Name";
"Cognome preimpostato" ; _cognome @ = "Preset Name";
}
Rückkehr Selbst;
}

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

NSString * ) nome { - ( NSString *) name {
_Name Return;
}
void ) setNome : ( NSString * ) stringaIngresso { - (Void) setNome: ( NSString *) {stringaIngresso
stringaIngresso == @ "" ) stringaIngresso = @ "senza nome" ; if (@ stringaIngresso == "") @ stringaIngresso = "no name";
_Name = StringaIngresso;
}

NSString * ) cognome { - ( NSString *) name {
_cognome return;
}
void ) setCognome : ( NSString * ) stringaIngresso { - (Void) setCognome: ( NSString *) {stringaIngresso
_cognome = stringaIngresso;
}

@ End

, etc… In Zukunft werden wir dann sehen, die Details über die Eigenschaften readonly , retain , etc ... :)

Fortsetzung ...

Browser oder Handy-Browser?

Unsere Website ist jetzt nur noch durch PCs angezeigt. Mit der Verbreitung von mobilen, dank Apples iPhone, den Zugriff auf die Website oder ein Blog wird zunehmend durch eine Vielzahl von mobilen Geräten durchgeführt. Es ist daher notwendig, zu wissen, wie viele Web-Entwickler und abzufangen Identifizierung der verschiedenen "Agenten", dh die Mittel, mit denen ein Benutzer betrachten (Browsing) unseren Seiten.

Fortsetzung ...



Stoppen SOPA