¿Eres adicto a la descarga de aplicaciones para iPhone? ¿Te gustaría crear tus propias apps? Esta es tu oportunidad. Hemos organizado este taller donde podrás aprender a desarrollar aplicaciones para iOs. En caso de que ya estés familiarizado con el tema, tendrás ocasión de profundizar un poco más. ¡No te lo pierdas!
Ponente: Jesús Mazcuñán. Trainer y director de IT en Barreira Arte y Diseño, donde imparte clases sobre programación para dispositivoss iOS. Coordinador técnico certificado por Apple y desarrollador para iOS, ha impartido cursos sobre este sistema operativo en la Facultad de Sevilla, la Fundación CAMON o con Universo Mac.
3. Sobre Barreira Arte y Diseño...
Centro dedicado a la formación en materias de diseño.
Centro AATCe. barreira@barreira.es
CICLOS FORMATIVOS APPLE
Grado Medio - Arte Final Aperture
Grado Superior - Decoración Final Cut
Grado Superior - Diseño Gráfico iLife
Grado Superior - Mobiliario iWork
Grado Superior - Modas Mac OS X
Mac OS X Server
ADOBE iOS
Photoshop
CURSOS ESPECIALIZADOS
Illustrator
Indesign PRUEBA DE ACCESO
Dreamweaver
Flash TALLERES
AUTODESK Dibujo técnico
Dibujo artístico
Autocad Creación multimedia
3D Max
Revit
jueves 14 de julio de 2011
4. Sobre el docente...
Jesús Mazcuñán Arnandis
Formador en Barreira Arte y Diseño
Apple Certi ed
• Pro
• Trainer (IT & Pro Apps)
• Support Professional 10.6
• Technical Coordinator 10.6
iOS Developer
jueves 14 de julio de 2011
5. Cursos iOS
* No hay cursos o ciales de iOS.
• iOS User Start Point (4h)
• iOS 100 Developer Start Point (10h)
• iOS 101 Developer Boot Camp (>20 h)
• iOS 201 Advanced Apps (>20h)
• iOS 300 Frameworks (4h)
• iOS 301 Starting Game Development with Cocos 2D
jueves 14 de julio de 2011
6. iOS 100a (5h)
Tenemos 5 horas para cubrir los principales objetivos que nos
permitirán iniciarnos en el desarrollo de aplicaciones iOS
- Conocer el dispositivo
- Conocer el lenguaje de desarrollo
- Conocer la estructura del programa
- Entender la losofía del proceso de desarrollo
- Conocer las herramientas del SDK (XCode 3.*)
- Introducir los principales componentes de UIKit
- Realizar pruebas en el simulador
El resto de contenidos se ven en iOS 100 (b)
jueves 14 de julio de 2011
7. iOS 100b (5h)
Después de haber visto los contenidos de iOS 100a, podemos
pasar a las siguientes fases de desarrollo.
- Programa de desarrollo (Standard)
- Generación de certi cados de desarrollo
- Pruebas en hardware
- Fundamentos de la distribución de aplicaciones
- Más componentes de UIKit
jueves 14 de julio de 2011
8. Antes de comenzar...
Requisitos mínimos
• Saber programar en cualquier lenguaje.
• Conocer los conceptos de la programación orientada a
objetos.
• Estar registrado como desarrollador iOS en el
programa gratuito.
Requisitos ideales
• Saber programar en Objective-C.
• Estar registrado en el Standard Program.
• Disponer de un terminal para pruebas (y cable USB).
jueves 14 de julio de 2011
10. iOS Overview
Sistema Operativo y tecnologías que se
utilizan para ejecutar aplicaciones
nativas en iPad, iPhone e iPod Touch.
Para desarrollar las aplicaciones nativas utilizamos:
• iOS SDK: contiene el código, la información y las
herramientas necesarias para desarrollo.
• XCode: proporciona las herramientas para edición,
compilación y depuración.
• Simulador (no emulador) de iOS: es una plataforma
que imita los dispositivos.
jueves 14 de julio de 2011
11. iOS Overview
• iOS nos proporciona los mecanismos necesarios
para generar aplicaciones con independencia
del hardware.
• Aunque la aplicación no se ve afectada por los
cambios en el hardware hemos de ser
conscientes de las capacidades de los
dispositivos.
• Las versiones de iOS intentan maximizar la
retrocompatibilidad, pero no siempre es posible.
(iOS 4.3 no soporta modelos de 2ª generación)
jueves 14 de julio de 2011
12. iOS Overview
• Framework: Directorios que contiene las librerías
(bibliotecas) dinámicas y los recursos para
soportarlas.
• iOS proporciona un conjunto de librerías
dinámicas para tareas comunes.
• Cualquier librería de terceros ha de ser incluida
como librería estática.
• Librerías estáticas son aquellas que se copian en
la aplicación generando productos
independientes.
jueves 14 de julio de 2011
13. iOS Overview
Podemos crear dos tipos de aplicaciones:
Contenido Web
• HTML5, Javascript, CSS, AJAX, SQLite...
• http://www.apple.com/webapps
Aplicaciones Nativas
• C, C++, Objective-C.
• App Store.
• Proceso de validación.
jueves 14 de julio de 2011
15. Dispositivos
En enero de 2011 Apple anuncia que ha superado la cifra de
160 millones de dispositivos que soportan iOS vendidos.
Estos dispositivos incluyen diversas familias:
• iPod Touch (4 generaciones)
• iPhone (4 generaciones)
• iPad (2 generaciones)
Distintas capacidades entre familias e incluso dentro de la
misma familia.
jueves 14 de julio de 2011
16. Caducidad de Dispositivos
A pesar de intentar dar soporta a todos los dispositivos
anteriores con cada versión de iOS mediante el recorte en
prestaciones software, las diferencias de hardware obligan a
Apple a abandonar el soporte para los modelos antiguos
llegado cierto punto.
Las fechas de caducidad son:
• iPhone EDGE (1G) - 36 meses
• iPhone 3G (2G) - 32 meses
• iPod Touch (1G) - 33 meses
• iPod Touch (2G) - 29 meses
jueves 14 de julio de 2011
18. Memoria RAM
Es uno de los aspectos más críticos.
Varia con el cambio de iPhone OS 3 a iOS 4.
Memoria Memoria Aviso de
RAM Disponible Memoria
128 Mb 35-40 Mb 20-25 Mb
256 Mb 120-150 Mb 80-90 Mb
512 Mb 340-370 Mb 260-300 Mb
jueves 14 de julio de 2011
20. Developer Program
Programas de desarrollo
• Gratuito
• Standard (Individual) ($99/year)
• Standard (Enterprise) ($99/year)
• Enterprise ($299/year)
• Universidad
Programa de desarrollo para hardware
jueves 14 de julio de 2011
22. iOS SDK
¿Cómo obtener el iOS SDK?
• Como descarga desde el portal de desarrollo.
• La URL es http://developer.apple.com/ios
• Es necesario (y gratuito) registrarse
• Requiere Mac OS X actualizado (>10.6.4)
jueves 14 de julio de 2011
23. XCode
Actualmente el iOS SDK sólo se puede descargar en conjunto
con el XCode.
Hay dos versiones disponibles de XCode:
• XCode 3.x
• XCode 4.x
La versión 3.x es gratuita y está disponible para cualquier
persona registrada como desarrollador.
La versión 4.x sólo es gratuita para desarrolladores inscritos
en programas de pago.
La versión 4.x puede ser adquirida por cualquiera a través del
App Store por 3.99€
jueves 14 de julio de 2011
24. XCode 3
• XCode: Entorno integrado de desarrollo que nos
permite crear, gestionar, compilar y depurar el
código de las aplicaciones.
• Interface Builder: Herramienta que nos permite
montar el interfaz de la aplicación de manera
visual.
• Instruments: Herramienta de análisis de
rendimiento y depuración.
• iOS Simulator
jueves 14 de julio de 2011
25. XCode 4
XCode Tools
• XCode 4:
‣ Entorno integrado de desarrollo que nos
permite crear, gestionar, compilar y depurar
el código de las aplicaciones.
‣ Integra elementos para generar la interfaz
grá ca y de datos de la aplicación de
manera visual.
• Instruments: Herramienta de análisis de
rendimiento y depuración.
• iOS Simulator
jueves 14 de julio de 2011
27. Objective-C
• Lenguaje de programación orientada a objetos.
• Es un superset de ANSI C.
• Está basado en Smalltalk.
• Fue desarrollado en 1980.
• Adoptado por NEXTSTEP en 1988.
• En 1992 fue liberado bajo licencia GPL para GCC.
• Es compatible con C y con C++.
• Objective-C 2 es la base que utilizan Cocoa y
Cocoa Touch.
jueves 14 de julio de 2011
28. Objective-C
De nimos archivos de encabezado y de código.
• .h para los archivos de encabezado.
• .m para el código en C y Objective-C
• .mm para el código en C++ y Objective-C
Las clases se de nen en dos partes: el interfaz (.h)
y la implementación (.m)
Soporta el uso de #import como directiva para
incluir los archivos .h en los archivos .m y .mm
jueves 14 de julio de 2011
29. Objective-C
Nombre de la clase Nombre de la clase padre
@interface MyClass : NSObject
{
int count;
id data; Declaración de variables
NSString *name;
}
-(id)initWithString:(NSString *)aName;
+(MyClass *)createMyClassWithString:(NSString *)aName;
@end
Declaración de métodos
jueves 14 de julio de 2011
30. Objective-C
Podemos utilizar los tipos de variables de C y C++.
La mayoría de los tipos de Objective-C se de nen
como punteros.
Podemos de nir tipos como id (weak typing).
Todos los objetos son descendientes de NSObject.
jueves 14 de julio de 2011
31. Objective-C
-(void)insertObject:(id)anObject atIndex:(NSUInterger)index;
El signo - identi ca el método como de instancia (+
para métodos de clase).
(void) tipo de retorno.
insertObject:atIndex: selector del método.
(id) y (NSUInteger) tipos de los parámetros.
anObject y index nombres de los parámetros.
jueves 14 de julio de 2011
32. Objective-C
Las llamadas a métodos se hacen a través del envío
de mensajes a objetos.
Los mensajes se envían entre corchetes []
[anObject insertObject:anotherObject atIndex:index];
Los mensajes se pueden anidar
[[myObject textLabel] setText:@”¿Porqué esa @? ;)”];
Existe una notación de puntos para propiedades y
es totalmente equivalente
[myObject.textLabel setText:@”¿Porqué esa @? ;)”];
jueves 14 de julio de 2011
33. Objective-C
La implementación de MyClass sería la siguiente:
@implementation MyClass
-(id)initWithString:(NSString *)aName
{
...
}
+(MyClass *)createMyClassWithString:(NSString *)aName
{
...
}
@end
jueves 14 de julio de 2011
34. Objective-C
Las propiedades se de nen en el interfaz de la
siguiente manera:
@interface MyClass : NSObject
{
NSString *name;
}
@property (nonatomic, retain) NSString *name;
@end
Y en la implementación como:
@implementation MyClass
@synthesize name;
...
jueves 14 de julio de 2011
35. Objective-C
La síntesis de propiedades automatiza el proceso
de creación de los métodos de acceso a las
variables de instancia:
Si la variable se llama myVar entonces:
• El método de escritura será setMyVar:
• El método de lectura será myVar
En cualquier caso, en la notación de puntos
accederemos como:
myObject.myVar = @”Supongamos una cadena”;
NSLog(@”%@”, myObject.myVar);
jueves 14 de julio de 2011
36. Objective-C
Al declarar la propiedad hemos indicado
parámetros que indican cómo se debe sintetizar la
misma.
Los más importantes son: getter=..., setter=...,
readwrite, readonly, assing, retain, copy y
nonatomic (atomic NO existe como parámetro).
A la hora de usar @synthesize podemos cambiar el
nombre de los métodos indicando:
@synthesize theVar = myVar;
jueves 14 de julio de 2011
37. Objective-C
Los protocolos son conjuntos de funciones
declaradas que carecen de implementación y que
deben ser implementadas (o no) por los objetos
delegados.
Los protocolos se declaran como:
@protocol
-(void)requiredMethod;
@optional
-(void)optionalMethod;
@required
-(void)anotherRequiredMethod;
@end
jueves 14 de julio de 2011
38. Objective-C
Para especi car que una clase cumple un
protocolo, utilizamos:
@interface myObject:NSObject <aProtocol, bProtocol> {
Podemos hacer que una clase cualquiera cumpla
un protocolo usando categorías.
Las categorías nos permiten ampliar el número de
métodos de una clase pero no sus variables de
instancia.
jueves 14 de julio de 2011
39. Objective-C
Objective-C no tiene garbage collector.
Funciona con un sistema de cuenta de referencias
a objetos.
Nunca usaremos dealloc, siempre release.
Cuando queremos conservar un objeto,
incrementamos su cuenta de referencias con
retain.
Podemos utilizar un sistema de pools para
deshacernos de variables temporales utilizando
autorelease.
jueves 14 de julio de 2011
41. iOS Runtime Environment
Presenta por defecto una serie de restricciones
para optimizar el funcionamiento del equipo.
Filosofía de usuario: Fast launch - Short Use.
La multitarea agiliza la carga de aplicaciones.
La memoria es limitada y puede que necesitemos
descargar/recargar datos.
jueves 14 de julio de 2011
42. Sistema de Memoria Virtual
iOS no soporta paginación al disco.
Cuando la memoria se va terminando...
• Se libera la memoria de solo lectura.
• Se envían noti caciones a los programas.
Hemos de tenerlo en cuenta a la hora de diseñar
nuestras clases.
jueves 14 de julio de 2011
43. Automatic Sleep Timer
Si el sistema no detecta actividad táctil durante un
periodo de tiempo prolongado...
• Baja el brillo de la pantalla
• Apaga la pantalla
• Bloquea el dispositivo
*Podemos deshabilitar esta opción si es necesario:
[[UIApplication sharedApplication]
setIdleTimerDisabled:YES];
jueves 14 de julio de 2011
44. Application Sandbox
Se trata de un mecanismo de defensa para la aplicación y el
sistema.
Se crea un directorio único y opaco para almacenar la
aplicación.
Simpli ca instalaciones, backups, restauraciones y borrado.
La aplicación sólo puede acceder a los contenidos de su
sandbox.
El sistema de archivos es case sensitive.
No hay límites en el tamaño de la aplicación y de los
documentos de la misma, hay sentido común.
jueves 14 de julio de 2011
45. Application Sandbox
Backups incrementales de las carpetas en negrita:
<Application Home>/AppName.app
<Application Home>/Documents
<Application Home>/Library
<Application Home>/Library/Preferences
<Application Home>/Library/Caches
<Application Home>/tmp/
jueves 14 de julio de 2011
46. Patrones de Diseño
iOS utiliza los siguientes patrones de diseño:
• Model-View-Controller
• Block Objects
• Delegation
• Target-Action
• Managed Memory Model
• Threads y Programación Concurrente
• Singleton
jueves 14 de julio de 2011
47. Interface
IBOutlets & IBActions
jueves 14 de julio de 2011
48. Window Based Template
File’s Owner
First Responder Window
UIApplicationDelegate
jueves 14 de julio de 2011
49. Window
Las aplicaciones tienen sólo una ventana.
La ventana proporciona un área donde dibujar el
resto de elementos de la aplicación.
La ventana es una subclase de vista aunque carece
de controlador de vista. (Implicaciones más
adelante)
jueves 14 de julio de 2011
50. IBOutlets & IBActions
Los IBOutlets marcan una variable en XCode para
que sea seleccionable en Interface Builder.
Las IBActions marcan un método en XCode para
que sea accesible por los elementos capaces de
hacer llamadas a funciones en Interface Builder.
A efectos de código son inocuos.
Al contrario que en Cocoa, en Cocoa Touch se
permite la asociación de varias acciones a un
mismo evento.
*Problema de compatibilidad entre Mac OS X e iOS
jueves 14 de julio de 2011
51. View Based Template
UIApplicationDelegate Window
ViewController View
jueves 14 de julio de 2011
52. UIKit
Elementos básicos
jueves 14 de julio de 2011
53. UIKit
Se trata del Framework que nos proporciona la
base para el diseño de las aplicaciones iOS.
Se deben utilizar desde el main thread.
Existe un proyecto de ejemplo en el que se
exponen los elementos y sus estilos (UICatalog).
Principalmente trabajaremos sobre los elementos y
las acciones que provocan o requieren.
jueves 14 de julio de 2011
54. UIKit
Los distintos controles pueden ser:
• Elementos Activos (Active): UIButton, UISwitch ...
• Elementos Inactivos (Static): UITextField ...
• Elementos Pasivos (Pasive): UIImage, UILabel ...
(Casi) Todos son subclases de UIControl y pueden
actuar de cualquier de las tres maneras.
jueves 14 de julio de 2011
55. First Responder
Un “responder” es un objeto que puede responder
a eventos y manipularlos.
El “ rst responder” se re ere en cada momento al
elemento que tiene el foco.
El objeto debe responder al método
canBecomeFirstResponder.
Desde ese momento es capaz de situarse como
elemento que recibe los eventos de movimiento,
control remoto, acciones y menús de edición.
jueves 14 de julio de 2011
56. First Responder
En ocasiones, tendremos que forzar que una
instancia abandone el papel de First Responder
con resignFirstReponder.
Podemos pasar el mensaje al siguiente elemento
de la cadena ([self nextResponder]) de manera
manual.
Cabe destacar que el nextResponder de un UIView
es su View Controller.
jueves 14 de julio de 2011
57. Puliendo detalles...
iPhone 4 incluye una pantalla Retina Display.
El tamaño en pixeles de la pantalla pasa de
320x480 a 640x960.
El escalado de los elementos es automático.
Podemos incluir imágenes de alta resolución.
Si incluimos el archivo imagen.png y el
sistema detecta alta resolución,
reemplazará la imagen automáticamente
por imagen@2x.png si existe.
jueves 14 de julio de 2011
59. View Controller
Nos permiten generar bloques MVC.
Podemos reutilizar elementos:
• En otras aplicaciones
• En la misma aplicación
Es conveniente de nir las interacciones entre view
controllers mediante protocolos.
jueves 14 de julio de 2011
60. Rotación
View Controllers
jueves 14 de julio de 2011
61. Rotación
Cuando rotamos el dispositivo, el sistema puede
encargarse de rotar los componentes de nuestra
aplicación.
Tenemos tres opciones para gestionar este cambio:
• Autorotating & Autosizing
• Realizar los cambios programáticamente
• Realizar los cambios mediante un archivo NIB
jueves 14 de julio de 2011
63. Root Controller
Las aplicaciones con múltiples vistas necesitarán
un controlador de vistas que será hijo de
UIViewController
Ese controlador tendrá información sobre sus
posibles vistas y funciones para intercambiar el
valor a asignar a view por cualquiera de ellas
Identi camos si un elemento está o no cargado
porque si no está cargado, el valor de
myObject.view.superview será nil.
jueves 14 de julio de 2011
65. Tab Bar
Necesitamos un UITabBarController
[window addSubview:myTabController.view];
Podemos gestionarlo directamente desde Interface
Builder o a mano pero combinar las dos
aproximaciones es bastante complicado
myTabController.viewControllers es un Array
de UIViewControllers
jueves 14 de julio de 2011
66. Tab Bar
Podemos personalizar la imagen que utiliza con
contactsNavController.tabBarItem.image =
[UIImage imageNamed:@"contacts.png"];
Podemos personalizar también el título y el Badge
del TabBarItem de cada ViewController.
Tiene un límite de componentes y tras excederlo se
encarga de gestionar el exceso, la reorganización...
jueves 14 de julio de 2011
68. NavigationController
Gestiona la navegación entre controladores de
vista en forma de pila.
Gestionamos un método de tipo push que inserta
el siguiente elemento en la pila.
Podemos gestionar un método de tipo pop para
volver hacia atrás en la jerarquía, pero esta acción
se suele dejar al backBarButton.
El backBarButton es personalizable pero hay que
entender CUANDO aparece.
jueves 14 de julio de 2011
69. Comunicación con el
Usuario
AlertView , ActionSheets y Vistas Modales
jueves 14 de julio de 2011
70. AlertView
Permite avisar al usuario.
Puede gestionar la respuesta del usuario mediante
botones.
Los pasos para utilizarlo son:
• Tener un delegado (si hay que realizar acciones)
• Generar un UIAlertView
• Mostrar un UIAlertView en la ventana
jueves 14 de julio de 2011
71. ActionSheet
Permite consultar al usuario.
Puede gestionar la respuesta del usuario mediante
botones.
Los pasos para utilizarlo son:
• Tener un delegado
• Generar un UIActionSheet
• Mostrar un UIActionSheet en una vista concreta
y que sea visible en este momento.
jueves 14 de julio de 2011
72. Vistas Modales
Un UIViewController puede lanzar una vista de
forma modal.
Utilizamos el método:
presentModalViewController:inView:
El UIViewController que lanzamos, devolverá el
control al anterior con el método
dismissModalViewController
jueves 14 de julio de 2011
74. Estrategias de persistencia
Podemos utilizar distintas estrategias de
persistencia:
- Uso de un archivo
- Uso de múltiples archivos
- Uso de bases de datos
• SQLite 3
• Core Data
- Uso de las preferencias de usuario
jueves 14 de julio de 2011
75. Documents & tmp
Directorios en los que podemos escribir
jueves 14 de julio de 2011
76. Document Directory
Dentro del sandbox, es el directorio en el que
podemos guardar elementos de forma que sean
persistente (y se haga backup de los mismos).
Obtenemos la ruta de este directorio mediante el
siguiente código:
! NSArray *paths = NSSearchPathForDirectoriesInDomains
(NSDocumentDirectory, NSUserDomainMask, YES);
! NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *filePath = [documentsDirectory
stringByAppendingPathComponent:@”myFile.ext”];
jueves 14 de julio de 2011
77. tmp Directory
Directorio que también podemos utilizar para
almacenar datos.
No podemos garantizar su existencia ni su
persistencia.
Obtenemos la ruta de este directorio mediante el
siguiente código:
! NSString *tempPath = NSTemporaryDirectory();
! NSString *tempFile = [tempPath
stringByAppendingPathComponent:@"tempFile.ext"];
jueves 14 de julio de 2011
79. Settings Bundle
Las preferencias de usuario se acceden desde el
menú de ajustes.
Permiten con gurar aquellos aspectos que se
deben establecer una vez y rara vez son
modi cados. (Por ejemplo, nombre de la cuenta de
usuario...)
No todas las aplicaciones lo necesitan.
jueves 14 de julio de 2011
80. Settings Bundle
Hemos de crear un settings bundle.
Se trata de un Property List con un formato
concreto que almacena diversos tipos de valores.
Se copia en una localización especial y es accesible
por el sistema desde los ajustes.
Se accede a los datos mediante un sistema key-
value
! NSUserDefaults *defaults = [NSUserDefaults
standardUserDefaults];
! [defaults objectForKey:myKey];
! [defaults setObject:myObject forKey:myKey];
jueves 14 de julio de 2011
82. Network Basics
Descargar archivos desde internet basados en
esquemas de URL
Guardar los archivos en la ruta de documentos de
la aplicación
Recuperar los archivos de la ruta de documentos
de la aplicación.
jueves 14 de julio de 2011
84. UIWebView
Partimos de un UIWebView
Cargamos contenido HTML (reemplaza al RTF)
La clave es la etiqueta META siguiente:
<meta name="viewport" content="width=320,
user-scalable=yes">
Podemos cargar datos HTML desde una cadena:
NSString *html = @"<html><head></head><body><h1>Hello Web!
</h1></body></html>";
[web loadHTMLString:html baseURL:nil];
jueves 14 de julio de 2011
85. UIWebView
Podemos cargar contenidos desde una URL de la
siguiente manera:
NSString *urlAddress = @"http://www.google.com";
//Create a URL object.
NSURL *url = [NSURL URLWithString:urlAddress];!
//URL Requset Object
NSURLRequest *requestObj = [NSURLRequest
requestWithURL:url];
//Load the request in the UIWebView.
[web loadRequest:requestObj];
jueves 14 de julio de 2011
87. Pantallas Capacitivas
Pantallas capacitivas vs. pantallas resistivas.
Detección de variaciones en el campo capacitivo.
Discriminación de ruido.
Imposibilidad de utilizar stylus < 5mm diámetro.
Gestión software de los eventos.
jueves 14 de julio de 2011
88. Recepción de Eventos
Precisamos elementos que:
• Hereden de UIResponder
• Sean capaces de establecerse como
FirstResponder
Podemos trasladar el evento al siguiente elemento
de la cadena de respuesta.
Las vistas pasan el evento a sus controladores.
jueves 14 de julio de 2011
89. Eventos Táctiles
Poner un dedo en la pantalla: Touch
Quitar y poner el dedo de la pantalla: Tap
Combinación de touches/taps: Gestures
Arrastrar un dedo:
• En una dirección: Swipe o Flick (rápido)
• En una ruta: Drag
jueves 14 de julio de 2011
90. Eventos Táctiles
Mover dos dedos en direcciones opuestas
• Separar/acercar dos dedos: Pinch open/close
• Rotar: Rotate
Mover dos dedos en paralelo: Pan
Sacudir el dispositivo: Shake
jueves 14 de julio de 2011
91. Eventos Táctiles
Las funciones que podemos controlar son:
touchesBegan:withEvent:
touchesMoved:withEvent:
touchesEnded:withEvent:
touchesCancelled:withEvent:
iPhone e iPod soportan 5 touches en la pantalla.
iPad soporta 10 touches en la pantalla.
jueves 14 de julio de 2011
92. Gestores
Podemos gestionar los gestos mediante
controladores.
Todos son subclases de UIGestureRecognizer
UITapGestureRecognizer
UIPinchGestureRecognizer
UIRotationGestureRecognizer
UISwipeGestureRecognizer
UIPanGestureRecognizer
UILongPressGestureRecognize
Hemos de inicializarlos, con gurarlos y asociarlos a
una vista.
jueves 14 de julio de 2011