Desarrollo iOSCreación de Aplicaciones para iPad, iPhone e iPod Touch
iOS100a - Jesús Mazcuñán Arnandis - Julio 2011
jueves 14 de julio de 2011
Presentación
jueves 14 de julio de 2011
Sobre Barreira Arte y Diseño...
TALLERES
CURSOS ESPECIALIZADOS
ADOBE
APPLE
Centro dedicado a la formación en materias de diseño.Centro AATCe. [email protected]
Grado Medio - Arte FinalGrado Superior - DecoraciónGrado Superior - Diseño GráficoGrado Superior - MobiliarioGrado Superior - Modas
PhotoshopIllustratorIndesignDreamweaverFlash
ApertureFinal CutiLifeiWorkMac OS XMac OS X ServeriOS
Dibujo técnicoDibujo artísticoCreación multimedia
CICLOS FORMATIVOS
AUTODESK
Autocad3D MaxRevit
PRUEBA DE ACCESO
jueves 14 de julio de 2011
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
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
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
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
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
iOS Overview
jueves 14 de julio de 2011
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
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
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
iOS OverviewPodemos 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
Dispositivos
jueves 14 de julio de 2011
DispositivosEn 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
Caducidad de DispositivosA 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
iPhoneiPhoneiPhone iPod TouchiPod TouchiPod Touch iPadiPad
3G 3GS 4 2ª 3ª 4ª 2
2.0 3.0 4.0 2.1.1 3.1.1 4.1 3.2 4.3
412MHz 600MHz A4800MHz 532MHz 600MHz A4
800MHzA4
1GHzA5
1GHz
128MB 256MB 512MB 128MB 256MB 256MB 256MB 512MB
480x320 480x320 960x640 480x320 480x320 960x640 1024x768 1024x768
163ppi 163ppi 326ppi 163ppi 163ppi 326ppi 132ppi 132ppi
Dispositivos
jueves 14 de julio de 2011
Es uno de los aspectos más críticos.
Varia con el cambio de iPhone OS 3 a iOS 4.
Memoria RAM
MemoriaRAM
Memoria Disponible
Aviso de 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
Developer Program
jueves 14 de julio de 2011
Developer ProgramProgramas 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
XCode + iOS SDK
jueves 14 de julio de 2011
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
XCodeActualmente 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
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
XCode 4XCode 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
Objective-C
jueves 14 de julio de 2011
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
Objective-CDe!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
Objective-C
@interface MyClass : NSObject{ int count; id data; NSString *name;}-(id)initWithString:(NSString *)aName;+(MyClass *)createMyClassWithString:(NSString *)aName;@end
Nombre de la clase Nombre de la clase padre
Declaración de variables
Declaración de métodos
jueves 14 de julio de 2011
Objective-CPodemos 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
Objective-C
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.
-(void)insertObject:(id)anObject atIndex:(NSUInterger)index;
jueves 14 de julio de 2011
Objective-CLas llamadas a métodos se hacen a través del envío de mensajes a objetos.
Los mensajes se envían entre corchetes []
Los mensajes se pueden anidar
Existe una notación de puntos para propiedades y es totalmente equivalente
[anObject insertObject:anotherObject atIndex:index];
[[myObject textLabel] setText:@”¿Porqué esa @? ;)”];
[myObject.textLabel setText:@”¿Porqué esa @? ;)”];
jueves 14 de julio de 2011
Objective-CLa 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
Objective-CLas propiedades se de!nen en el interfaz de la siguiente manera:
Y en la implementación como:
@interface MyClass : NSObject{ NSString *name;}@property (nonatomic, retain) NSString *name;@end
@implementation MyClass
@synthesize name;
...
jueves 14 de julio de 2011
Objective-CLa 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
Objective-CAl 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
Objective-CLos 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
Objective-CPara especi!car que una clase cumple un protocolo, utilizamos:
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.
@interface myObject:NSObject <aProtocol, bProtocol> {
jueves 14 de julio de 2011
Objective-CObjective-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
Sistema Base
jueves 14 de julio de 2011
iOS Runtime EnvironmentPresenta 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
Sistema de Memoria VirtualiOS 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
Automatic Sleep TimerSi 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
Application SandboxSe 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
Application SandboxBackups 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
Patrones de DiseñoiOS 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
InterfaceIBOutlets & IBActions
jueves 14 de julio de 2011
Window Based Template
UIApplicationDelegate
File’s Owner
First Responder Window
jueves 14 de julio de 2011
WindowLas 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
IBOutlets & IBActionsLos 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 iOSjueves 14 de julio de 2011
View Based Template
UIApplicationDelegate Window
ViewViewController
jueves 14 de julio de 2011
UIKitElementos básicos
jueves 14 de julio de 2011
UIKitSe 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
UIKitLos 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
First ResponderUn “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
First ResponderEn 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
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 elsistema detecta alta resolución,reemplazará la imagen automáticamentepor [email protected] si existe.
jueves 14 de julio de 2011
View Controllers
jueves 14 de julio de 2011
View ControllerNos 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
RotaciónView Controllers
jueves 14 de julio de 2011
RotaciónCuando 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
Root Controller
jueves 14 de julio de 2011
Root ControllerLas 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
Tab Bar
jueves 14 de julio de 2011
Tab BarNecesitamos 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
Tab BarPodemos 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
Navigation Controller
jueves 14 de julio de 2011
NavigationControllerGestiona 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
Comunicación con el Usuario
AlertView , ActionSheets y Vistas Modales
jueves 14 de julio de 2011
AlertViewPermite 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
ActionSheetPermite 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
Vistas ModalesUn 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
Persistencia de Datos
jueves 14 de julio de 2011
Estrategias de persistenciaPodemos 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
Documents & tmpDirectorios en los que podemos escribir
jueves 14 de julio de 2011
Document DirectoryDentro 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
tmp DirectoryDirectorio 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
Application Setup& User Defaults
jueves 14 de julio de 2011
Settings BundleLas 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
Settings BundleHemos 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
Data from the Web
jueves 14 de julio de 2011
Network BasicsDescargar 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
UIWebView
jueves 14 de julio de 2011
UIWebViewPartimos 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
UIWebViewPodemos 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 ObjectNSURLRequest *requestObj = [NSURLRequest requestWithURL:url];
//Load the request in the UIWebView.[web loadRequest:requestObj];
jueves 14 de julio de 2011
Handling Touch Events Taps, Touches & Gestures
jueves 14 de julio de 2011
Pantallas CapacitivasPantallas 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
Recepción de EventosPrecisamos 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
Eventos TáctilesPoner 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
Eventos TáctilesMover 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
Eventos TáctilesLas 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
GestoresPodemos gestionar los gestos mediante controladores.
Todos son subclases de UIGestureRecognizer
UITapGestureRecognizerUIPinchGestureRecognizerUIRotationGestureRecognizerUISwipeGestureRecognizerUIPanGestureRecognizerUILongPressGestureRecognize
Hemos de inicializarlos, con!gurarlos y asociarlos a una vista.
jueves 14 de julio de 2011
Top Related