Articles taggés avec 'iPhone d' Apple


10 extraits utiles Objective-C

Déplacez le double-clic sur le simulateur

Le simulateur de iPhone / iPad Xcode vous permet de simuler le double tap sur la touche Alt est enfoncée. Ceci est utile pour simuler la fonction de Pinch, qui sert à agrandir ou faire défiler le contenu Conserver à l'écart dans la vue avec des objets ou UIWebView . Eh bien, certains d'entre vous ont remarqué que la simulation du "deux doigts" procède d'une manière symétrique en commençant toujours par le centre de l'écran. Pour déplacer ce «centre» est aussi juste maintenez la touche MAJ.

Suite ...

Très court extrait: détecter iPad sur le périphérique et sur ​​le Web

Non seulement les navigateurs portatitli bureau ou naviguez sur les sites développés par nous, maintenant l'ère de la téléphonie mobile - le navigateur mobile - est très répandue, grâce à des appareils comme l'iPhone d'Apple, Android, etc ... Par ailleurs, même pour des développeurs pour l'iPhone d'Apple est devenu obligatoire pour comprendre à quel périphérique l'application s'exécute.

Sur le Web, la situation est similaire à celle affichée dans le navigateur ou le navigateur mobile? , avec la variante:

Suite ...

API privées à l'enlèvement du rouleau dans un objet UIWebView

En très court extrait: Retirer défiler partir d'un objet UIWebView nous avons vu comment il était possible de retirer le rouleau d'un objet UIWebView :

Suite ...

Objective-C: obtenir des informations de latitude et de longitude

Je réponds à Mirko me demandant comment faire le cas contraire proposée dans Mise en latitude et longitude en Objective-C .
A partir des valeurs de latitude et longitude, vous pouvez utiliser la classe MKReverseGeocoder d'obtenir un éventail d'informations, telles que: ville, état, adresse complète, chap!

Suite ...

Très court extrait: Retirer défiler d'un objet à UIWebView

Avec ou sans papiers, une caractéristique, parfois, vous êtes obligé de mettre en œuvre par la force! Utile dans certaines situations, le défilement est de supprimer un objet de UIWebView . : Fait intéressant, en général, voir comment vous pouvez accéder aux composants internes 'une partie de l'objet en question: dans cet exemple récupère l'objet pointeur UIScrollView présent dans le sujet UIWebView :

Suite ...

Comment obtenir Latitude et Longitude en Objective-C

Le cadre fournit MapKit nombreuses fonctions utiles, sauf le retour de longitude et latitude d'une adresse. En JavaScript, par exemple, vous pouvez utiliser le service fourni par Google de géocodage et discutés dans Google Maps: Comment obtenir Latitude et Longitude partir d'une adresse . Apple iPhone ou iPad, cependant, vous pouvez surmonter cet obstacle en utilisant un des différents services Google. Plus précisément, vous pouvez appeler directement à l'url:

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

Où est [indirizzo] pour entrer dans la chaîne avec l'adresse que vous voulez transformer les coordonnées. La sortie retournée est de type:

1
200,8,41.9128300,12.2241172

). La première valeur, 200 , indique que tout s'est bien passé ( 200 OK ). La seconde, 8 , Google est le paramètre de précision (1-10). Les deux dernières valeurs sont, enfin, la latitude et la longitude. Maintenant, nous voyons un prototype d'une méthode peut être inclus dans nos applications:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20e
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 ; Latitude double = 0,0;
0.0 ; Longitude double = 0,0;

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

Lieu de retour;
}

Notes d'intérêt

, alla stregua della funzione explode ( ) del PHP per intenderci. La chaîne retournée dans locationString est "split" par la méthode componentsSeparatedByString , comme la fonction explode ( ) en PHP par exemple. J'ai mis l'exemple que j'ai proposé - mais commenté - le code pour récupérer le paramètre de précision, même Google, la précision ou le facteur d'échelle, notée zoom .

Source comme

Pour être complet, j'ai fait un exemple d'application petits avec lesquels vous pouvez essayer la méthode proposée ci-dessus, entrer d'adresse et de l'iPhone va montrer sur la carte.


Télécharger Source

Je remercie l'équipe devAPP pour l'inspiration de cet article.

Suite ...

setAnimationDidStopSelector: les différents usages et avancées

Dans la plupart des cas, ou parce que nous sommes habitués ou parce que nous avons vu dans les didacticiels et dans certains textes, nous utilisons le setAnimationDidStopSelector de cette manière:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
nil context : NULL ] ; [BeginAnimations UIView: contexte nul: NULL];
1.5 ] ; [UIView setAnimationDuration: 1,5];
UIViewAnimationCurveEaseInOut ] ; [UIView setAnimationCurve: UIViewAnimationCurveEaseInOut];
self ] ; [SetAnimationDelegate UIView: self];
@selector ( removeView ) ] ; [UIView setAnimationDidStopSelector: @ selector (removeView)];

; myView.alpha = 0;

; [CommitAnimations UIView];

/ /

void ) removeView { - (Void) {removeView
; [MyView removeFromSuperview];
}

come delegato e tramite la setAnimationDidStopSelector gli invia un messaggio removeView quando l'animazione è terminata. Dans le code ci-dessus l' setAnimationDelegate mis self en tant que délégué et par setAnimationDidStopSelector envoie un message removeView lorsque l'animation est terminée. Le code lui-même est correct, cependant, fait usage d'une définition de message ( removeView ) qui pourraient être omis. Maintenant, voici le même code, avec le même effet, sans le message removeView :

1
2
3
4
5
6
7
8
9
nil context : NULL ] ; [BeginAnimations UIView: contexte nul: NULL];
1.5 ] ; [UIView setAnimationDuration: 1,5];
UIViewAnimationCurveEaseInOut ] ; [UIView setAnimationCurve: UIViewAnimationCurveEaseInOut];
myView ] ; [SetAnimationDelegate UIView: myView];
@selector ( removeFromSuperview ) ] ; [UIView setAnimationDidStopSelector: @ selector (removeFromSuperview)];

; myView.alpha = 0;

; [CommitAnimations UIView];

! La chose intéressante à propos de cette approche est que myView pourrait être une sous-classe de UIView ! Il peut donc être une classe personnalisée avec nos propres messages et, comme indiqué, facilement appelables depuis setAnimationDidStopSelector . En outre, le setAnimationDidStopSelector sélecteurs d'accord avec les paramètres:

1
2
3
4
5
6
7
8
9
nil context : NULL ] ; [BeginAnimations UIView: contexte nul: NULL];
1.5 ] ; [UIView setAnimationDuration: 1,5];
UIViewAnimationCurveEaseInOut ] ; [UIView setAnimationCurve: UIViewAnimationCurveEaseInOut];
myView ] ; [SetAnimationDelegate UIView: myView];
@selector ( myMessage : param1 : ) ] ; [UIView setAnimationDidStopSelector: @ selector (myMessage: param1:)];

; myView.alpha = 0;

; [CommitAnimations UIView];

Cet exemple peut être étendu à tous les cas ici, où nous installons un délégué, Atro n'est pas un pointeur vers une instance de n'importe quel objet.

Suite ...

iPhone: Eliminer l'effet d'ombre lors du défilement un UIWebView

Dans cette dernière période, j'ai travaillé sur trois applications pour iPhone d'Apple, presque simultanément. Deux ont déjà été approuvées par Apple et sont situés sur l'App Store: la Première et de iMakeLove .

TheFirst iMakeLove

Dans les deux applications ont adopté l'usage d'un objet UIWebView pour afficher les instructions.
L'objet UIWebView ilevato était vraiment à l'aise dans ce cas. Cela m'a permis de rapidement visualiser et un joli texte, des images, et accompagné, si autre chose est affichée sur une page Web (Flash sur iPhone non inclus).

TheFirst

L'objet UIWebView est vraiment polyvalent et très peu besoin de paramètres à utiliser. Le seul défaut est la présence d'une ombre mystérieuse qui apparaît lorsque vous faites une sortie de défilement de la zone de contrôle est à la base qu'au sommet:

UIWebView Shadow

Après plusieurs recherches, j'ai réalisé que ce comportement dépend du SDK, en particulier les dernières mises à jour. Et Apple n'a pas publié de déclaration officielle sur la façon de l'enlever, au contraire, il a rejeté en tant que code n'est pas autorisé une série de hacks qui font usage des fonctions sensibles, ou documenter. Finalement, j'ai renoncé, tant en termes de temps, et parce que les solutions semblaient tous sortir de la Pomme boîte.
Heureusement j'ai la solution, je l'espère, assez régulièrement, ce qui semble résoudre le problème (grâce à Adolfo ):

1
2
3
4
5
6
/ / WebView est le UIWebView de contrôle
[ webView.subviews objectAtIndex : 0 ] ; id = scroller [webView.subviews objectAtIndex: 0];

UIView * subView in [ scroller subviews ] ) pour (sous-vue UIView * dans [scroller subviews])
subView class ] description ] isEqualToString : @ "UIImageView" ] ) if ([[[sous-vue de classe]] Description isEqualToString: @ "UIImageView"])
; subView.hidden = OUI;

Comme l'a souligné Adolfo , mais cela est un hack qui peut cesser de travailler avec les futures versions du SDK.

Suite ...

Objective-C: les propriétés d'exposer dans une classe

Je voudrais montrer et de discuter quelques exemples sur la façon d'ajouter et de manipuler les propriétés en Objective-C de classe. : Un exemple classique, précisément, est la suivante, dans la définition de notre classe d'interface définit deux propriétés nome et cognome :

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

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

retain ) NSString * nome; @ Property (conserver) NSString * name;
retain ) NSString * cognome; @ Property (conserver) NSString * name;
@ Fin

e setter usati rispettivamente per leggere ed impostare le nostre due proprietà: Dans le fichier de mise en œuvre de l'instruction INSERT @synthesize afin que Xcode va produire pour nous les méthodes getter et setter , respectivement, utilisé pour lire et définir nos deux propriétés:

1
2
3
4
5
6
7
8
/ / MyClass.m
# Import "MyClass.h"

@ Mise en oeuvre MaClasse

Synthétiser le nom @, prénom;

@ Fin

, possiamo scrive: Lorsque vous allez utiliser notre classe MyClass , qui est quand istanziaremo un objet de type MyClass , nous pouvons écrire:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/ / Tout autre classe, comme AppDelegate
/ / Dans le fichier. H
# Import <UIKit/UIKit.h>
# Import "MyClass.h"

@ Classe TestViewController;

NSObject <UIApplicationDelegate> { TesAppDelegate @ interface: NSObject {<UIApplicationDelegate>
UIWindow * fenêtre;
* TestViewController ViewController;

MaClasse * maClasse;
}

/ / Dans le fichier. M
MyClass alloc ] ; maClasse = [MaClasse alloc];
"Giovambattista" ; miaClasse.nome @ = "Giovambattista";
"miaClasse.nome = %@" , miaClasse.nome ) ; NSLog (@ "miaClasse.nome =% @", miaClasse.nome);

Ou, ce qui équivaut à:

1
2
3
/ / Toujours dans le fichier de M.
@ "Undolog" ] ; [SetNome maClasse: @ "Undolog"];
"miaClasse.nome = %@" , [ miaClasse nome ] ) ; NSLog (@ "miaClasse.nome =% @", [nom maClasse]);

Jusqu'ici tout va bien. Cependant, il pourrait induire en erreur l'équivalence de la «variable» interne (Ivar) avec le nom de la propriété elle-même. Pour comprendre la différence, de proposer à nouveau la même chose que faire sans, cette fois, les @synthesize . . Maintenant, donc, nous devrions prendre soin d'écrire les méthodes getter et setter . Afin de mieux souligner les différences, va renommer les variables internes en insérant un caractère de soulignement devant le nom. Mais nous voyons le code:

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

NSObject { @ Interface MaClasse: NSObject {
_nome; NSString * _Nom;
_cognome; NSString * _cognome;
}

NSString * ) nome; // get - ( NSString *) nom; / / récupère
NSString * ) cognome; // get - ( NSString *) nom; / / récupère

void ) setNome : ( NSString * ) stringaIngresso; // set - (Void) setNome: ( NSString *) stringaIngresso; / / set
void ) setCognome : ( NSString * ) stringaIngresso; // set - (Void) setCognome: ( NSString *) stringaIngresso; / / set

@ Fin

. Contrairement à la précédente pour les pointeurs de variables internes (incapsultate) sont devenus _nome et _cognome . . @property è scomparso, in quanto non serve più. En outre, il existe quatre définitions des méthodes qui représentent notre get et de set . @property a disparu, comme n'étant plus nécessaires.
Nous voyons le fichier d'implémentation MyClass.m :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20e
21
22
23
# Import "MyClass.h"

@ Mise en oeuvre MaClasse

/ / Obtenir un "nom"
NSString * ) nome { - ( NSString *) nom {
_Nom Retour;
}
/ / Set pour "nom"
void ) setNome : ( NSString * ) stringaIngresso { - (Void) setNome: ( NSString *) {stringaIngresso
_Nom StringaIngresso =;
}

/ / Obtenir de "surnom"
NSString * ) cognome { - ( NSString *) nom {
_cognome retour;
}
/ / Set pour "patronyme"
void ) setCognome : ( NSString * ) stringaIngresso { - (Void) setCognome: ( NSString *) {stringaIngresso
_cognome = stringaIngresso;
}

@ Fin

Écrit comme une classe peut être utilisé exactement comme la précédente, à savoir:

1
2
3
4
5
6
7
8
MyClass alloc ] ; maClasse = [MaClasse alloc];
"Giovambattista" ; miaClasse.nome @ = "Giovambattista";
"miaClasse.nome = %@" , miaClasse.nome ) ; NSLog (@ "miaClasse.nome =% @", miaClasse.nome);

/ / Ou, ce qui équivaut à:

@ "Undolog" ] ; [SetNome maClasse: @ "Undolog"];
"miaClasse.nome = %@" , [ miaClasse nome ] ) ; NSLog (@ "miaClasse.nome =% @", [nom maClasse]);

e set , evidenziando – anche con l'aggiunta dell'underscore – le differenze tra il nome della proprietà e la sua ivar interna _nome . Au niveau de la négligence éducative @synthesize nous a forcé à écrire "leur propre" méthodes get et de set , en soulignant - même avec l'ajout dell'underscore - les différences entre le nom de propriété et ses Ivar internes _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. Au niveau fonctionnel à l'usage personnel des méthodes get et de set permet un contrôle réel des données avant sa mise (ou avant sa lecture), puis une encapsulation réel de protéger la variable interne.
Par exemple, il serait possible d'empêcher le passage des chaînes de vide à la propriété nome :

1
2
3
4
void ) setNome : ( NSString * ) stringaIngresso { - (Void) setNome: ( NSString *) {stringaIngresso
stringaIngresso == @ "" ) stringaIngresso = @ "senza nome" ; if (@ stringaIngresso == "") @ stringaIngresso = "sans nom";
_Nom StringaIngresso =;
}

D'autres variations

Si vous souhaitez utiliser les variables internes avec le trait de soulignement en face (qui rpoviene Adobe ActionScript pourrait être utilisé aussi bien) n'est pas nécessaire d'abandonner l'utilisation de la directive @synthesize . Xcode permet de "fusionner" les méthodes mentionnées ci-dessus:

1
2
_nome; Synthétiser @ name = _Nom;
_cognome; Synthétiser le nom @ = _cognome;

. En faisant cela, nous pourrions utiliser le pointeur à l'interne _nome ", résume" - à l'extérieur - comme une propriété 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 . Par ailleurs, il est vrai que l'utilisation de @synthesize produit des méthodes de génération automatique (messages) de getter et setter , il est également vrai que s'il ne les trouve pas, donc si vous voulez "mettre en œuvre« une méthode pour vos getter et / ou setter vous pouvez le faire même si vous avez utilisé la directive @synthesize .

Les allocations de mémoire

Dans les exemples ci-dessus, j'ai omis certains détails importants pour une mise en œuvre réelle. Tout d'abord, je n'ai pas montré toute méthode init() , utile pour l'initialisation objet et les valeurs par défaut. Par ailleurs, il est l'ajout d'une méthode dealloc() :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20e
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
/ / Fichier MyClass.m
# Import "MyClass.h"

@ Mise en oeuvre MaClasse

id ) init { - (Id) {initialisation
self = [ super init ] ) { if (self = [super init]) {
"Nome preimpostato" ; _Nom @ = "Nom Preset";
"Cognome preimpostato" ; _cognome @ = "Nom Preset";
}
le retour de soi;
}

void ) dealloc { - (Void) dealloc {
; [Communiqué de _Nom];
; [Communiqué de _cognome];
; [Super dealloc];
}

NSString * ) nome { - ( NSString *) nom {
_Nom Retour;
}
void ) setNome : ( NSString * ) stringaIngresso { - (Void) setNome: ( NSString *) {stringaIngresso
stringaIngresso == @ "" ) stringaIngresso = @ "senza nome" ; if (@ stringaIngresso == "") @ stringaIngresso = "sans nom";
_Nom StringaIngresso =;
}

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

@ Fin

, etc… Dans l'avenir, nous verrons ensuite les détails sur les propriétés readonly , retain , etc ... :)

Suite ...

Navigateur ou navigateur mobile?

Notre site est maintenant affiché uniquement par les PC. Avec la propagation de la téléphonie mobile, grâce à l'iPhone d'Apple, pour accéder au site ou blog est de plus en plus effectuée par une variété de dispositifs mobiles. Il est donc nécessaire de savoir combien de Web Developer intercepter et identifier les différents «agents», c'est à dire le moyen par lequel un utilisateur consulte (navigation) nos pages.

Suite ...