Artículos con la etiqueta 'iPhone'


iPhone: Eliminar el efecto de sombra al desplazarse un UIWebView

En este último período he trabajado en tres aplicaciones para el iPhone de Apple, prácticamente de forma simultánea. Dos ya han sido aprobadas por Apple y se encuentran en la App Store: thefirst y iMakeLove .

TheFirst iMakeLove

En ambas aplicaciones han adoptado el uso de un objeto UIWebView para mostrar las instrucciones.
El objeto UIWebView ilevato era muy cómoda en este caso. Eso me permitió ver de forma rápida y un bonito texto, imágenes, y acompañado, si todo lo demás se muestra en una página Web (Flash en el iPhone no incluido).

TheFirst

El objeto UIWebView es muy versátil y las necesidades de configuración muy pocos para ser utilizado. El único defecto es la presencia de una misteriosa sombra que aparece al hacer un desplazamiento fuera de la zona de control se encuentra en la parte inferior que en la parte superior:

UIWebView Shadow

Después de varias búsquedas me di cuenta de que este comportamiento depende de la SDK, especialmente las últimas actualizaciones. Y Apple no ha publicado ningún comunicado oficial sobre la forma de eliminar, por el contrario, rechazó que el código no se permite una serie de hacks que hacen uso de funciones sensibles, o la documentación. Con el tiempo me di por vencido, tanto en términos de tiempo, y porque las soluciones parecía que todo fuera de la caja de Apple.
Afortunadamente tengo la solución, espero que con bastante frecuencia, lo que parece resolver el problema (gracias a Adolfo ):

1
2
3
4
5
6
/ / WebView es el control de UIWebView
[ webView.subviews objectAtIndex : 0 ] ; id = scroller [webView.subviews objectAtIndex: 0];

UIView * subView in [ scroller subviews ] ) para (* UIView subvista en [scroller subvistas])
subView class ] description ] isEqualToString : @ "UIImageView" ] ) if ([[[subvista clase]] Descripción isEqualToString: @ "UIImageView"])
; subView.hidden = YES;

Como ha señalado Adolfo , sin embargo este es un truco que puede dejar de funcionar con futuras versiones del SDK.

Continuación ...

Cómo encontrar las imágenes y vistas en Interface Builder

Después de explicar cómo localizar nuestras cuerdas en Xcode , es fácil ver ahora cómo - mediante la aplicación de la misma técnica - para localizar y ver las imágenes / interfaces creados con Interface Builder.

Localizar los recursos gráficos

El proceso, como se mencionó, es el mismo, si tenemos una imagen ya está incluido en nuestros recursos, o insertar una nueva, y nos quieren "ubicar" - es decir, para manejar dos o más imágenes en función de los idiomas soportados - simplemente haga clic en el botón imagen de la derecha ( Adium.png en este ejemplo) y seleccione Obtener información:

Crear archivo localizable hacemos clic en la parte inferior izquierda.

Nosotros, haga clic en Agregar e introduzca la localización Italian :

Con el fin de obtener:

esattamente come accadeva con il testo: Nuestra imagen se mueve (física, una de las raras ocasiones en que ocurre nell'alberatura Xcode se refleja en el sistema de archivos) en carpetas virtuales English.lproj y Italian.lproj tal y como sucedió con el texto:

contiene una stessa versione dell'immagine. En este punto, cada una de las carpetas English.lproj y Italian.lproj contiene la misma versión de la imagen. Esta imagen es manipulada en Interface Builder, donde podremos ver - por defecto - la versión en Inglés.
En este punto, sólo sobrescribir uno (o ambos archivos Adium.png ) para obtener una ubicación de las imágenes "flash".

Localice el XIB archivos

Incluso las interfaces construidas con Interface Builder se puede encontrar en su totalidad, cuando se considere necesario. ) con interfaccia XIB , lo selezioniamo, scegliamo Get Info dal menu contestuale, rendiamo il file localizzabile, aggiungiamo la localizzazione in italiano: El procedimiento es idéntico al realizado con las capacidades gráficas: agregar un ViewController (por ejemplo, infoViewController ) XIB interfaz, que se selecciona, elige Obtener información en el menú contextual, dan la localizable archivo, añadir la localización italiano:

ViewController

Al hacer clic en Italiano o el italiano se abrirá Interface Builder! ) all'interno della classica cartella Classes . Esta vez, el sistema de archivos, te darás cuenta de que ha creado dos directorios ( English.lproj y Italian.lproj ) dentro de la carpeta de clases clásica. Ambos tienen sus archivos infoViewController.xib . La comodidad en este, resuelve con claridad en el código, y cuando vamos a una instancia de nuestro código de controlador vamos a tener una "limpia" de esta manera:

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

Como puedes ver no hay ni rastro de cualquier declaración relativa a la ubicación, totalmente administrado por el sistema. Las dos interfaces, por supuesto, puede ser completamente diferente, como lo son en efecto como dos archivos separados XIB.

Continuación ...

10 fragmentos útiles para el iPhone de Apple

Ejecutar un método después de n segundos

Toda la familia performSelector es muy interesante y puede ser útil en multitud de casos. Su aplicación más simple y común es el siguiente:

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

Sin embargo, consideran que el "timer" no es exacta. Este procedimiento, por lo tanto, se debe utilizar cuando no se requiere un "significativo" de precisión temporal.

Recuperar la versión de la

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

Sí, es cierto o verdadero?

e TRUE sono in pratica la stessa edentica cosa: Va a peinar el iPhone de Apple kernel puede darse cuenta de que YES , true , y TRUE son básicamente los Edentia lo mismo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/ / Definición de la SI
# Definición de SI (BOOL) 1
# Se define NO 0 (BOOL)

/ / Definición de la verdad
# Definición de una verdadera
# Define FALSO 0

/ / Definición de VERDADERO
# Si! Definida (VERDADERO)
# Define True 1
# Endif

# Si! Definida (FALSO)
# Define FALSO 0
# Endif

Al menos por ahora ...

Vibración

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

CGImageRef puntero de una UIImage

1
2
3
4
[ UIImage imageNamed : @ "LittleHeart.png" ] ; UIImage corazón * = [UIImage imageNamed: @ "LittleHeart.png"];
heart CGImage ] ; CGImageRef imagen = [CGImage corazón];
/ / La imagen ahora pueden ser "trama" en una CGContextRef
CGRect ) { 0 , 0 , 100 , 100 } , image ) ; CGContextDrawImage (c, (CGRect) {0, 0, 100, 100}, imagen);

Animaciones

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

NSLog

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

Conversor de RGB UIColor

1
# Definición de RGBA (r, g, b, a) [UIColor colorWithRed: verde r/255.0: azul g/255.0: b/255.0 alfa: a]

Paso de parámetros a un NSTimer

Aprovechando el parámetro userInfo puede enviar un puntero a un objeto a nuestro método invocado por temporizador.

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: un objetivo: selector de auto: @ selector (timerMethod) userInfo: repite objectPointer: YES];

/ / ...

void ) timerMethod : ( NSTimer * ) timer { - (Void) timerMethod: ( NSTimer *) {contador
/ / Recuperar el puntero a mi objeto
timer userInfo ] ; objectPointer = [temporizador userInfo];
/ / O
myMethod ] ; [[Timer userInfo] miMetodo];
[ [ timer userInfo ] myProperty ] ; int a = [[temporizador userInfo] myProperty];
/ / ¿Qué es la misma
[ objectPointer myProperty ] ; int a = [objectPointer myProperty];
}

Tiempo de funcionamiento

Esta es una forma sencilla de calcular el tiempo necesario para comprobar la velocidad de la ejecución del código:

1
2
3
4
; CFAbsoluteTime initialTime CFAbsoluteTimeGetCurrent = ();
/ / ... cruz
; CFAbsoluteTime finalTime CFAbsoluteTimeGetCurrent = ();
"Tempo trascorso %f" , finalTime - initialTime ) ; NSLog (@ "f% transcurrido el tiempo", finalTime - initialTime);

Continuación ...

Apple iPhone: Crear un botón de activación personalizado

non funzionano quando un UIButton è impostato in modalità UIButtonTypeCustom ! Los estados UIControlStateSelected o UIControlStateHighlighted no funciona cuando hay un UIButton modo se establece UIButtonTypeCustom ! O más bien, no funcionan (porque reservado para otro tipo de botón), por ejemplo, para crear un botón de dos estados: nota de palanca. Si hemos creado dos imágenes (y stato2.png stato1.png) para nuestro botón, se puede proceder de la siguiente manera:

1
2
3
/ / Los archivos de cabecera que se crea una variable global para usaremo
/ / Comprobar la palanca se
ToggleFlag BOOL;

Ahora vamos a crear nuestro botón:

1
2
3
4
5
6
7
8
9
/ / Creamos un botón y lo colocamos inicialmente en el estado "stato1.png"
/ / Editar initWithFrame: (CGRect) {} 100,100,50,50 con la ubicación y
/ / Tamaño de la imagen ha
; 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 ] ; [AddTarget ToggleButton: acción de auto: @ selector (onToggle:) forControlEvents: UIControlEventTouchUpInside];
toggleButton ] ; [Self.view addSubview: ToggleButton];

Al hacer clic en el botón se envía un mensaje a gestionar onToggle :

1
2
3
4
5
6
7
void ) onToggle : ( id ) sender { - (Void) onToggle: (id) {remitente
/ / Recuperar puntero a UIButton
( UIButton * ) sender; UIButton buttonClicked * = (UIButton *) del remitente;
/ / Ejecutar Toogle
toggleFlag = toggleFlag!;
[ UIImage imageNamed : ( toggleFlag ) ? @ "stato1.png" : @ "stato2.png" ] forState : UIControlStateNormal ] ; [ButtonClicked setBackgroundImage: [UIImage imageNamed: (toggleFlag) @ "Stato1.png" @ "stato2.png"] Forst: UIControlStateNormal];
}

Continuación ...

Fragmento muy breve: la transmisión de archivos mp3 en el iPhone de Apple

Una alternativa muy simple de ejecutar una secuencia de un archivo mp3 en el iPhone de Apple podría ser:

Continuación ...

10 trucos útiles y fragmentos para Apple iPhone y Xcode

1. Cadenas en varias líneas

En Xcode, se puede "romper" una cadena en varias líneas mediante la inserción en el extremo de una barra invertida "\". Esta característica puede ser útil cuando, por ejemplo, queremos insertar el texto HTML en un control UIWebView :

Continuación ...

Fragmento muy breve: un formato de datos de un control de UIDatePicker

El control UIDatePicker es quizás la más bella de control presente gráfica en el iPhone de Apple. Además de la belleza de ella es también fácil de usar, extremadamente versátil y se utiliza en muchas situaciones.

Continuación ...

Objective-C: NSLog () de C struct

o CGPoint , ad esempio. La sintaxis NSLog(@"%@", ... ); que funciona y se utiliza para obtener información sobre los objetos, pero no funciona en C tipos de datos tales como la estructura CGRect o CGPoint , por ejemplo. o NSStringFromCGPoint : Para aprovechar las ventajas de NSLog(@"%@", ... ); incluso en las estructuras de C-estilo se puede confiar en las funciones de conversión como NSStringFromCGRect() o 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 (@ "rectángulo Info:% @", NSStringFromCGRect (mioRect));
"Info point: %@" , NSStringFromCGPoint ( mioPoint ) ) ; NSLog (@ "punto de información:% @", NSStringFromCGPoint (mioPoint));

En concreto, es posible mejorar este procedimiento habla de pequeñas macros útiles, como:

1
# Definir 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)

O:

1
2
3
4
# Definir NSLogCGPoint (punto) NSLog (@ "% s (% 0.0f,% 0.0f)", # punto.x punto, Point.y)

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

Que dará como resultado:

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

Continuación ...

Truco muy corto: tres trucos para los desarrolladores de iPhone de Apple

Icono de la aplicación

57 × 57 píxeles icono que representará a nuestra aplicación es "deteriorados" por el iPhone de Apple de forma automática: se agrega un borde redondeado, un brillante y efectos 3D. Este ajuste se puede cambiar seleccionando el archivo [nome applicazione]-Info.plist y la adición de la propiedad "Icon incluye efectos de brillo y bisel Ya":

Continuación ...

Fragmento muy breve: Los números de iPhone, al azar

Si usted necesita para generar números aleatorios en una aplicación deben dejar de lado el iPhone de Apple Objective-C, ya que no propone un orden de clases. La solución se propone que el C: rand(), srand(), random(), srandom() e arc4random() .

Continuación ...



Dejar de SOPA