Articles taggés avec 'iPhone'


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

Comment localiser les images et les vues dans Interface Builder

Après avoir expliqué comment localiser nos chaînes dans Xcode , il est facile de voir maintenant comment - en appliquant la même technique - de localiser et de visualiser des images / interfaces créées avec Interface Builder.

Localiser les ressources graphiques

Le processus, tel que mentionné, est la même, si nous avons une image déjà inclus dans nos ressources, ou qu'ils insèrent un nouveau, et nous voulons de «localiser» - qui est, de gérer deux ou plusieurs images sur la base des langues prises en charge - il suffit de cliquer sur le bouton Image de droite ( Adium.png dans cet exemple) et sélectionnez Get Info:

Créer un fichier localisable on clique en bas à gauche.

On clique sur Ajouter et insérez la localisation Italian :

Afin d'obtenir:

esattamente come accadeva con il testo: Notre image est déplacée (physiquement, l'une des rares fois où cela arrive nell'alberatura Xcode est réfléchi sur le système de fichiers) dans le cadre des dossiers virtuels English.lproj et Italian.lproj exactement comme cela s'est produit avec le texte:

contiene una stessa versione dell'immagine. A ce stade, chacun des dossiers English.lproj et Italian.lproj contient la même version de l'image. Cette image est manipulée dans Interface Builder, où nous verrons - par défaut - la version anglaise.
À ce stade, juste écraser un (ou deux fichiers Adium.png ) pour obtenir un emplacement d'images «flash».

Localisez le fichier XIB

Même les interfaces construites avec Interface Builder peuvent être situés dans leur intégralité, lorsque cela est jugé nécessaire. ) con interfaccia XIB , lo selezioniamo, scegliamo Get Info dal menu contestuale, rendiamo il file localizzabile, aggiungiamo la localizzazione in italiano: La procédure est identique à celui effectué avec les capacités graphiques: ajouter un ViewController (par exemple infoViewController ) interface XIB, nous le sélectionner, choisissez Obtenir des informations dans le menu contextuel, donner l'localisables fichier, ajoutez la localisation italienne:

ViewController

En cliquant ou en italien Italiano va ouvrir Interface Builder! ) all'interno della classica cartella Classes . Cette fois, le système de fichiers, vous remarquerez que vous avez créé deux répertoires ( English.lproj et Italian.lproj ) dans le dossier classes classiques. Les deux auront leurs fichiers infoViewController.xib . Le confort dans ce domaine, clairement résolue dans le code, et quand nous allons instancier notre code du contrôleur, nous aurons un «propre» comme ceci:

1
2
[ InfoViewController alloc ] ; InfoViewController * info = [InfoViewController alloc];
info.view ] ; [Self.view addSubview: info.view];

Comme vous pouvez le voir il n'ya aucune trace d'aucune déclaration concernant l'emplacement, entièrement gérées par le système. Les deux interfaces, bien sûr, peuvent être complètement différents, qui sont en vigueur que deux fichiers séparés XIB.

Suite ...

10 extraits utiles pour Apple iPhone

Exécuter une méthode après n secondes

La famille entière performSelector est vraiment intéressant et peut être utile dans une multitude de cas. Son application la plus simple et la plus courante est la suivante:

1
2
3
4
5
@selector ( myMethod ) withObject : nil afterDelay : 3 ] ; [Self performSelector: @ selector (myMethod) withObject: afterDelay nul: 3];
/ /
void ) myMethod { - (Void) {myMethod
"Hello World!" ) ; NSLog (@ "Bonjour le monde!");
}

Cependant, considérer que le "timer" n'est pas exacte. Cette procédure devrait donc être utilisée quand il ya besoin d'une «importante» la précision temporelle.

Récupérer la version de la

1
2
version = [ [ [ NSBundle mainBundle ] infoDictionary ] objectForKey : @ "CFBundleVersion" ] ; NSString * version = [[[ NSBundle mainBundle] infoDictionary] objectForKey: @ "CFBundleVersion"];
"versione = %@" , version ) ; NSLog (@ "Version =% @", version);

OUI, vrai ou vrai?

e TRUE sono in pratica la stessa edentica cosa: Aller à coiffer grâce à l'iPhone d'Apple Kernel vous pouvez réaliser que YES , true , et TRUE sont fondamentalement les Édentia même chose:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/ / Définition du OUI
# Définir OUI (BOOL) 1
# Ne pas définir de 0 (BOOL)

/ / Définition de la vraie
# Définir une vraie
# Définir 0 false

/ / Définition de VRAI
# Si! Déterminées (TRUE)
# Définir une VRAI
# Endif

# Si! Déterminées (FAUX)
# Définir 0 FAUX
# Endif

Au moins pour l'instant ...

Vibrations

1
2
3
# Import <AudioToolbox/AudioToolbox.h>
/ /
; AudioServicesPlaySystemSound (kSystemSoundID_Vibrate);

Pointeur CGImageRef d'un UIImage

1
2
3
4
[ UIImage imageNamed : @ "LittleHeart.png" ] ; UIImage * heart = [UIImage imageNamed: @ "LittleHeart.png"];
heart CGImage ] ; CGImageRef image = [CGImage coeur];
/ / L'image peut désormais être "pixellisé" sur une CGContextRef
CGRect ) { 0 , 0 , 100 , 100 } , image ) ; CGContextDrawImage (c, (CGRect) {0, 0, 100, 100}, image);

Animations

1
2
3
4
5
nil context : NULL ] ; [BeginAnimations UIView: contexte nul: NULL];
1.5 ] ; [UIView setAnimationDuration: 1,5];
UIViewAnimationCurveEaseInOut ] ; [UIView setAnimationCurve: UIViewAnimationCurveEaseInOut];
/ / ...
; [CommitAnimations UIView];

NSLog

1
2
3
"NSString object %@ " , myString ) ; NSLog (@ "NSString objet% @", myString);
"Float: %f " , myFloat ) ; NSLog (@ "float:% f", myFloat);
"Integer: %i " , myInt ) ; NSLog (@ "Integer:% i", Myint);

RGB convertisseur UIColor

1
# Définir RGBA (r, g, b, a) [UIColor colorWithRed: r/255.0 vert: bleu g/255.0: b/255.0 alpha: a]

Passer des paramètres à une NSTimer

Profitant du paramètre userInfo vous pouvez envoyer un pointeur vers un objet à notre méthode invoquée par minuterie.

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 cible: sélecteur de soi: @ selector (timerMethod) userInfo: répète objectPointer: YES];

/ / ...

void ) timerMethod : ( NSTimer * ) timer { - (Void) timerMethod: ( NSTimer *) timer {
/ / Récupérer le pointeur à mon objet
timer userInfo ] ; objectPointer = [minuterie userInfo];
/ / Ou
myMethod ] ; [[Minuterie userInfo] myMethod];
[ [ timer userInfo ] myProperty ] ; int a = [[minuterie userInfo] myProperty];
/ / Quel est le même
[ objectPointer myProperty ] ; int a = [objectPointer myProperty];
}

Durée

Voici une façon simple de calculer un court laps de temps nécessaire pour vérifier la vitesse d'exécution du code:

1
2
3
4
; CFAbsoluteTime initialTime CFAbsoluteTimeGetCurrent = ();
/ / ... queues
; CFAbsoluteTime finalTime CFAbsoluteTimeGetCurrent = ();
"Tempo trascorso %f" , finalTime - initialTime ) ; NSLog (@ "f écoulé% du temps", finalTime - initialTime);

Suite ...

Apple iPhone: Créer un bouton personnalisé à bascule

non funzionano quando un UIButton è impostato in modalità UIButtonTypeCustom ! Les Etats UIControlStateSelected ou UIControlStateHighlighted fonctionne pas quand un UIButton mode est réglé UIButtonTypeCustom ! Ou plutôt, ne pas travailler (car réservé à d'autres types de bouton), par exemple pour créer un bouton à deux états: note bascule. Si nous avons créé deux images (et stato2.png stato1.png) pour notre bouton, nous pouvons procéder comme suit:

1
2
3
/ / Les fichiers d'en-tête que nous créons une variable globale pour usaremo
/ / Vérifier la bascule ont été
ToggleFlag BOOL;

Maintenant nous allons créer notre bouton:

1
2
3
4
5
6
7
8
9
/ / On crée un bouton et on le place d'abord dans l'état "stato1.png"
/ / Edit initWithFrame: (CGRect) {} 100,100,50,50 avec l'emplacement et
/ / La taille de votre image a
; toggleFlag = OUI;
[ [ 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 ] ; [AddTarget ToggleButton: action d'auto: @ selector (onToggle:) forControlEvents: UIControlEventTouchUpInside];
toggleButton ] ; [Self.view addSubview: ToggleButton];

Lorsque vous cliquez sur le bouton envoyer un message à être gérés onToggle :

1
2
3
4
5
6
7
void ) onToggle : ( id ) sender { - (Void) onToggle: (id) sender {
/ / Récupérer pointeur UIButton
( UIButton * ) sender; UIButton ButtonClicked * = (UIButton *) sender;
/ / Exécuter bascule,
toggleFlag = toggleFlag!;
[ UIImage imageNamed : ( toggleFlag ) ? @ "stato1.png" : @ "stato2.png" ] forState : UIControlStateNormal ] ; [ButtonClicked setBackgroundImage: [UIImage imageNamed: (toggleFlag) @ "Stato1.png" @ "stato2.png"] Forst:? UIControlStateNormal];
}

Suite ...

Très court extrait: le streaming des fichiers MP3 sur l'iPhone d'Apple

Une alternative très simple à exécuter un flux d'un fichier mp3 sur l'iPhone d'Apple pourrait être:

Suite ...

10 astuces utiles et des extraits pour Apple iPhone et Xcode

1. Chaînes sur plusieurs lignes

Dans Xcode, vous pouvez "casser" une chaîne sur plusieurs lignes en insérant à la fin avec une barre oblique inverse "\". Cette fonctionnalité peut être utile lorsque, par exemple, nous voulons insérer le texte HTML dans un contrôle UIWebView :

Suite ...

Très court extrait: un format de données d'un contrôle UIDatePicker

Le contrôle UIDatePicker est peut-être la plus belle de contrôle présents sur le graphique de l'iPhone d'Apple. Outre la beauté de celui-ci est aussi facile à utiliser, extrêmement polyvalent et utilisé dans de nombreuses situations.

Suite ...

Objective-C: NSLog () de C struct

o CGPoint , ad esempio. La syntaxe NSLog(@"%@", ... ); fonctionne et est utilisé pour obtenir des informations sur les objets, mais ne fonctionne pas sur les types de données tels que C struct CGRect ou CGPoint , par exemple. o NSStringFromCGPoint : Pour profiter de NSLog(@"%@", ... ); même sur de style C structs ne peuvent s'appuyer sur des fonctions de conversion, comme NSStringFromCGRect() ou 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 (@ "rectangle Info:% @", NSStringFromCGRect (mioRect));
"Info point: %@" , NSStringFromCGPoint ( mioPoint ) ) ; NSLog (@ "point info:% @", NSStringFromCGPoint (mioPoint));

Plus précisément, il est possible d'améliorer cette procédure écrit des petites macros utiles comme:

1
# Définir NSLogRect (rect) NSLog (@ "0.0fx% s (% 0.0f, 0.0f%)% 0.0f%", # rect, rect.origin.x, rect.origin.y, rect.size.width , rect.size.height)

Ou encore:

1
2
3
4
# Définir NSLogCGPoint (point) NSLog (@ "% s (% 0.0f, 0.0f%)", # point.x point, Point.y)

CGPoint ) { 32 , 64 } ; CGPoint mioPoint = (CGPoint) {32, 64};
; NSLogCGPoint (mioPoint);

Cela va donner comme résultat:

1
32 , 64 ) mioPoint: (32, 64)

Suite ...

Astuce très courte: 3 astuces pour les développeurs iPhone d'Apple

Application Icon

57 × 57 pixels icône qui représentera notre application est «altérée» par l'iPhone d'Apple automatiquement: vous ajoutez un bord arrondi, un des effets lumineux et 3D. Ce réglage peut être modifié en sélectionnant le fichier [nome applicazione]-Info.plist et en ajoutant la propriété "Icon inclut les effets de brillance et de biseau déjà»:

Suite ...

Très court extrait: iPhone, nombres aléatoires

Si vous avez besoin pour générer des nombres aléatoires dans une application doivent mettre de côté l'iPhone d'Apple Objective-C, car elle ne propose pas de l'ordre de classe. La solution est proposé que le dossier C: rand(), srand(), random(), srandom() e arc4random() .

Suite ...