Artículos con la etiqueta 'iPhone de Apple
Mueva el doble toque en el simulador
El simulador de iPhone / iPad Xcode te permite simular el doble toque se presiona la tecla Alt. Esto es útil para simular la función de Pinch, que se utiliza para aumentar o desplazarse Mantener alejado contenido en el punto de vista con los objetos o UIWebView . Bueno, algunos de ustedes han notado que la simulación de los "dos dedos" procede de una manera simétrica siempre desde el centro de la pantalla. Para avanzar en este "centro" se encuentra a sólo mantenga presionada la tecla SHIFT.
Continuación ...
No sólo los navegadores de escritorio portatitli o navegando por los sitios desarrollados por nosotros, ahora la era de la telefonía móvil - el navegador móvil - está muy extendida, gracias a dispositivos como el iPhone de Apple, Android, etc ... Además, incluso para desarrolladores para el iPhone de Apple se ha convertido en obligatoria para entender a qué dispositivo se ejecuta la aplicación.
En la web, la situación es similar a la que se muestra en el Navegador o Browser móvil? , con la variante:
Continuación ...
En muy breve fragmento: Quitar desplazamiento de un objeto UIWebView vimos cómo era posible para eliminar el desplazamiento de un objeto UIWebView :
Continuación ...
Respondo a Mirko me pregunta cómo hacer que el caso contrario, se propone en llegar Latitud y Longitud en Objective-C .
A partir de los valores de latitud y longitud se puede utilizar la clase MKReverseGeocoder para obtener una amplia gama de información, tales como: ciudad, estado, dirección completa, cap!
Continuación ...
Documentados o indocumentados, una característica, a veces, se ven obligados a aplicar por la fuerza! Útil en algunas situaciones, el desplazamiento es de sacar un objeto de UIWebView . : Curiosamente, en general, ver cómo se puede acceder a los componentes internos de "la parte del objeto en cuestión: en este ejemplo se recupera el puntero de objeto UIScrollView presente en el asunto UIWebView :
Continuación ...
El marco proporciona características útiles MapKit muchos, excepto el retorno de latitud y longitud de una dirección. En JavaScript, por ejemplo, puede utilizar el servicio proporcionado por Google geocodificación y discutido en Google Maps: Cómo llegar latitud y longitud de una dirección . Apple iPhone o iPad, sin embargo, puede superar este obstáculo mediante el uso de otro servicios de Google. En concreto, puede llamar directamente a la url:
1
| http://maps.google.com/maps/geo?q = [dirección] & output = csv |
¿Dónde está [indirizzo] para entrar en la cadena con la dirección que desea para transformar las coordenadas. La salida que se devuelve es de tipo:
1
| 200,8,41.9128300,12.2241172 |
). El primer valor, 200 , indica que todo ha ido bien ( 200 OK ). El segundo, 8 , Google es el parámetro de precisión (1-10). Los dos últimos valores son, por último, la latitud y longitud. Ahora podemos ver un prototipo de un método se puede incluir en nuestras aplicaciones:
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 *) dirección { 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 dirección: NSUTF8StringEncoding]]; listItems = [ locationString componentsSeparatedByString : @ "," ] ; NSArray ListItems * = [locationString componentsSeparatedByString: @ ""]; / / Int zoom = 0; 0.0 ; latitud doble = 0.0; 0.0 ; longitud doble = 0.0; listItems count ] > = 4 && [ [ listItems objectAtIndex : 0 ] isEqualToString : @ "200" ] ) { if ([ListItems cuenta]> = 4 & & [[ListItems objectAtIndex: 0] isEqualToString: @ "200"]) { / / Zoom = [[objectAtIndex ListItems: 1] intValue]; listItems objectAtIndex : 2 ] doubleValue ] ; Latitud = [[ListItems objectAtIndex: 2] doubleValue]; listItems objectAtIndex : 3 ] doubleValue ] ; Longitud = [[ListItems objectAtIndex: 3] doubleValue]; { Else {} / / Error } CLLocationCoordinate2D ubicación; location.latitude = latitud; location.longitude = longitud; Lugar de entrega; } |
Notas de interés
, alla stregua della funzione explode ( ) del PHP per intenderci. La cadena devuelta en locationString se "divide" por el método de componentsSeparatedByString , al igual que la función de explode ( ) en PHP, por ejemplo. Pongo el ejemplo que propone -, pero comentó - el código para recuperar siquiera el parámetro de precisión de Google, la precisión o factor de escala, que se denota por zoom .
Fuente como
Para completar, hice un pequeño ejemplo de aplicación con la que puedes probar el método propuesto más arriba, entrar en cualquier dirección y el iPhone se mostrará en el mapa.


Fuente Descarga
Doy las gracias al equipo de devAPP por la inspiración de este artículo.
Continuación ...
En la mayoría de los casos, o porque estamos acostumbrados o porque hemos visto en los tutoriales y en algunos textos, se utiliza el setAnimationDidStopSelector de esta manera:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| nil context : NULL ] ; [BeginAnimations UIView: contexto nada: NULL]; 1.5 ] ; [UIView setAnimationDuration: 1,5]; UIViewAnimationCurveEaseInOut ] ; [UIView setAnimationCurve: UIViewAnimationCurveEaseInOut]; self ] ; [SetAnimationDelegate UIView: auto]; @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. En el código anterior el setAnimationDelegate conjunto self como delegado ya través de setAnimationDidStopSelector envía un mensaje removeView cuando la animación ha terminado. El código es correcto, sin embargo, hace uso de una definición de mensaje ( removeView ) que podrían ser omitidos. Ahora, aquí es el mismo código, con el mismo efecto, sin el mensaje de removeView :
1 2 3 4 5 6 7 8 9
| nil context : NULL ] ; [BeginAnimations UIView: contexto nada: 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]; |
! Lo interesante de este enfoque es que myView podría ser una subclase de UIView ! Por lo tanto, puede ser una clase personalizada con nuestros propios mensajes y, como se dijo, fácilmente se puede llamar desde setAnimationDidStopSelector . Además, el setAnimationDidStopSelector selectores de acuerdo con los parámetros:
1 2 3 4 5 6 7 8 9
| nil context : NULL ] ; [BeginAnimations UIView: contexto nada: 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]; |
En este ejemplo se puede extender a todos los casos aquí, donde hemos establecido un delegado, Atro no es un puntero a una instancia de un objeto.
Continuación ...
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 .
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).

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:

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 ...
Me gustaría mostrar y discutir algunos ejemplos acerca de cómo agregar y manipular las propiedades de la clase Objective-C. : Un ejemplo clásico es, precisamente, lo siguiente, en la definición de nuestra clase de interfaz define dos propiedades nome y cognome :
e setter usati rispettivamente per leggere ed impostare le nostre due proprietà: En el archivo de la aplicación de la instrucción INSERT @synthesize lo que Xcode se producen para nosotros los métodos getter y setter , respectivamente, que se utiliza para leer y establecer las dos propiedades:
1 2 3 4 5 6 7 8
| / / MyClass.m # Import "MyClass.h"
@ Implementación MyClass
@ Name Sintetizar y apellidos;
@ End |
, possiamo scrive: Cuando usted va a utilizar la clase MyClass , que es cuando istanziaremo un objeto de tipo MyClass , se puede escribir:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| / / Cualquier otra clase, como AppDelegate / / En el archivo. H # Importar <UIKit/UIKit.h> # Import "MyClass.h" @ Clase TestViewController; NSObject <UIApplicationDelegate> { @ Interface TesAppDelegate: NSObject {<UIApplicationDelegate> UIWindow * ventana; * TestViewController ViewController; MyClass * miClase; } / / En el archivo. M MyClass alloc ] ; myClass = [MyClass alloc]; "Giovambattista" ; miaClasse.nome @ = "Giovambattista"; "miaClasse.nome = %@" , miaClasse.nome ) ; NSLog (@ "miaClasse.nome =% @", miaClasse.nome); |
O, lo que es equivalente a:
1 2 3
| / / Siempre en la M archivo. @ "Undolog" ] ; [SetNome myClass: @ "Undolog"]; "miaClasse.nome = %@" , [ miaClasse nome ] ) ; NSLog (@ "miaClasse.nome =% @", [nombre miClase]); |
Hasta aquí todo bien. Sin embargo, podría inducir a error a la equivalencia de las "variables" internas (ivar) con el nombre de la propiedad en sí. Para entender la diferencia, proponer de nuevo lo mismo que hacerlo fuera, esta vez, la @synthesize . . Ahora, por lo tanto, debemos tener cuidado en escribir los métodos getter y setter . Para enfatizar aún más las diferencias, se cambie el nombre de las variables internas mediante la inserción de un guión bajo delante del nombre. Sin embargo, vemos el código:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| # Importar <Foundation/Foundation.h> NSObject { @ Interface MyClass: NSObject { _nome; NSString * _name; _cognome; NSString * _cognome; } NSString * ) nome; // get - ( NSString *) Nombre; / / obtener NSString * ) cognome; // get - ( NSString *) Nombre; / / obtener void ) setNome : ( NSString * ) stringaIngresso; // set - (Void) setNome: ( NSString *) stringaIngresso; / / establecer void ) setCognome : ( NSString * ) stringaIngresso; // set - (Void) setCognome: ( NSString *) stringaIngresso; / / establecer @ End |
. A diferencia de los punteros antes de las variables internas (incapsultate) se han convertido en _nome y _cognome . . @property è scomparso, in quanto non serve più. Además hay cuatro definiciones de los métodos que representan nuestra get y set . @property ha desaparecido, ya que no necesita más.
Vemos el archivo de implementación 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" @ Implementación MyClass / / Obtener un "nombre" NSString * ) nome { - ( NSString *) Nombre { _name Retorno; } / / Set para "nombre" void ) setNome : ( NSString * ) stringaIngresso { - (Void) setNome: ( NSString *) {stringaIngresso _name StringaIngresso =; } / / Obtener de "apellido" NSString * ) cognome { - ( NSString *) Nombre { _cognome retorno; } / / Set para "apellido" void ) setCognome : ( NSString * ) stringaIngresso { - (Void) setCognome: ( NSString *) {stringaIngresso _cognome = stringaIngresso; } @ End |
Escrito como una clase se puede utilizar exactamente igual que el anterior, a saber:
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);
/ / O, lo que equivale a:
@ "Undolog" ] ; [SetNome myClass: @ "Undolog"]; "miaClasse.nome = %@" , [ miaClasse nome ] ) ; NSLog (@ "miaClasse.nome =% @", [nombre miClase]); |
e set , evidenziando – anche con l'aggiunta dell'underscore – le differenze tra il nome della proprietà e la sua ivar interna _nome . En el nivel de abandono educativo @synthesize nos obligó a escribir "su propia" métodos de get y set , destacando - incluso con la adición dell'underscore - las diferencias entre el nombre de la propiedad y su ivar interna _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. En el nivel funcional del uso personal de los métodos de get y set permite un control real de los datos antes de su puesta (o antes de su lectura) y un encapsulado real para proteger a la variable interna.
Por ejemplo, sería posible para impedir el paso de cadenas vacías a la propiedad nome :
1 2 3 4
| void ) setNome : ( NSString * ) stringaIngresso { - (Void) setNome: ( NSString *) {stringaIngresso stringaIngresso == @ "" ) stringaIngresso = @ "senza nome" ; if (@ stringaIngresso == "") @ stringaIngresso = "sin nombre"; _name StringaIngresso =; } |
Otra variación
Si desea utilizar las variables internas con el guión bajo delante (que rpoviene Adobe ActionScript puede ser utilizado también) no es necesario abandonar el uso de la directiva @synthesize . Xcode permite "fusionar" los métodos mencionados anteriormente:
1 2
| _nome; Sintetizar @ name = _name; _cognome; @ Name = Sintetizar _cognome; |
. Al hacerlo, puede usar el puntero para las personas internamente _nome ", resumió" - en el exterior - como una propiedad de 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 . Por otra parte, es cierto que el uso de @synthesize produce la generación de métodos automáticos (mensajes) de getter y setter , también es cierto que si no las encuentra, por lo que si quieren "aplicar" un método para su getter y / o setter que usted puede hacer esto incluso si ha utilizado la directiva @synthesize .
Las asignaciones de memoria
En los ejemplos anteriores he omitido algunos detalles importantes para una implementación real. En primer lugar, no han mostrado ningún método init() , útil para la inicialización de objetos y valores por defecto. Por otra parte, está la adición de un método 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
| / / Archivo MyClass.m # Import "MyClass.h" @ Implementación MyClass id ) init { - (Id) {init self = [ super init ] ) { if (self = [super init]) { "Nome preimpostato" ; _name @ = "Nombre del ajuste"; "Cognome preimpostato" ; _cognome @ = "Nombre del ajuste"; } cambio sí; } void ) dealloc { - (Void) {dealloc ; [_name Release]; ; [_cognome Release]; ; [Super dealloc]; } NSString * ) nome { - ( NSString *) Nombre { _name Retorno; } void ) setNome : ( NSString * ) stringaIngresso { - (Void) setNome: ( NSString *) {stringaIngresso stringaIngresso == @ "" ) stringaIngresso = @ "senza nome" ; if (@ stringaIngresso == "") @ stringaIngresso = "sin nombre"; _name StringaIngresso =; } NSString * ) cognome { - ( NSString *) Nombre { _cognome retorno; } void ) setCognome : ( NSString * ) stringaIngresso { - (Void) setCognome: ( NSString *) {stringaIngresso _cognome = stringaIngresso; } @ End |
, etc… En el futuro veremos entonces los detalles de las propiedades readonly , retain , etc ... 
Continuación ...
Nuestro sitio web es ahora sólo se muestra por los PC. Con la difusión de la telefonía móvil, gracias al iPhone de Apple, para acceder al sitio o blog es cada vez más los trabajos realizados por una variedad de dispositivos móviles. Por lo tanto, necesitamos saber cuántos Web Developer interceptar e identificar los diferentes "agentes", es decir, el medio por el cual un usuario está viendo (navegación) y nuestras páginas.
Continuación ...
Últimos Comentarios
Marcos : @ Marcos: Gracias por la respuesta. Por ejemplo, si usted tiene un código para guardar / utilizar la carpeta ...
Marcos : Gracias por la respuesta. Por ejemplo, si usted tiene un código para guardar / utilizar la carpeta ...
Giovambattista Fazioli : @ Marcos: en principio, absolutamente, mucho depende de cómo y por qué descargar. Luisiana ..
Marcos : Hola, buen guía! Quería preguntarle, usted puede usar el mismo código para ejecutar una base de datos sql? En lugar de ...
José : Hola quería preguntar cómo se puede hacer en el post que he subido una galería de 50 imágenes, por ejemplo, ...