92
Desarrollo iOS Creación de Aplicaciones para iPad, iPhone e iPod Touch iOS100a - Jesús Mazcuñán Arnandis - Julio 2011 jueves 14 de julio de 2011

Desarrollo de apps para iphone

Embed Size (px)

DESCRIPTION

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

Citation preview

Page 1: Desarrollo de apps para iphone

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

Page 2: Desarrollo de apps para iphone

Presentación

jueves 14 de julio de 2011

Page 3: Desarrollo de apps para iphone

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

Page 4: Desarrollo de apps para iphone

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

Page 5: Desarrollo de apps para iphone

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

Page 6: Desarrollo de apps para iphone

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

Page 7: Desarrollo de apps para iphone

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

Page 8: Desarrollo de apps para iphone

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

Page 9: Desarrollo de apps para iphone

iOS Overview

jueves 14 de julio de 2011

Page 10: Desarrollo de apps para iphone

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

Page 11: Desarrollo de apps para iphone

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

Page 12: Desarrollo de apps para iphone

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

Page 13: Desarrollo de apps para iphone

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

Page 14: Desarrollo de apps para iphone

Dispositivos

jueves 14 de julio de 2011

Page 15: Desarrollo de apps para iphone

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

Page 16: Desarrollo de apps para iphone

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

Page 17: Desarrollo de apps para iphone

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

Page 18: Desarrollo de apps para iphone

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

Page 19: Desarrollo de apps para iphone

Developer Program

jueves 14 de julio de 2011

Page 20: Desarrollo de apps para iphone

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

Page 21: Desarrollo de apps para iphone

XCode + iOS SDK

jueves 14 de julio de 2011

Page 22: Desarrollo de apps para iphone

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

Page 23: Desarrollo de apps para iphone

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

Page 24: Desarrollo de apps para iphone

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

Page 25: Desarrollo de apps para iphone

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

Page 26: Desarrollo de apps para iphone

Objective-C

jueves 14 de julio de 2011

Page 27: Desarrollo de apps para iphone

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

Page 28: Desarrollo de apps para iphone

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

Page 29: Desarrollo de apps para iphone

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

Page 30: Desarrollo de apps para iphone

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

Page 31: Desarrollo de apps para iphone

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

Page 32: Desarrollo de apps para iphone

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

Page 33: Desarrollo de apps para iphone

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

Page 34: Desarrollo de apps para iphone

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

Page 35: Desarrollo de apps para iphone

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

Page 36: Desarrollo de apps para iphone

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

Page 37: Desarrollo de apps para iphone

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

Page 38: Desarrollo de apps para iphone

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

Page 39: Desarrollo de apps para iphone

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

Page 40: Desarrollo de apps para iphone

Sistema Base

jueves 14 de julio de 2011

Page 41: Desarrollo de apps para iphone

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

Page 42: Desarrollo de apps para iphone

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

Page 43: Desarrollo de apps para iphone

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

Page 44: Desarrollo de apps para iphone

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

Page 45: Desarrollo de apps para iphone

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

Page 46: Desarrollo de apps para iphone

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

Page 47: Desarrollo de apps para iphone

InterfaceIBOutlets & IBActions

jueves 14 de julio de 2011

Page 48: Desarrollo de apps para iphone

Window Based Template

UIApplicationDelegate

File’s Owner

First Responder Window

jueves 14 de julio de 2011

Page 49: Desarrollo de apps para iphone

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

Page 50: Desarrollo de apps para iphone

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

Page 51: Desarrollo de apps para iphone

View Based Template

UIApplicationDelegate Window

ViewViewController

jueves 14 de julio de 2011

Page 52: Desarrollo de apps para iphone

UIKitElementos básicos

jueves 14 de julio de 2011

Page 53: Desarrollo de apps para iphone

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

Page 54: Desarrollo de apps para iphone

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

Page 55: Desarrollo de apps para iphone

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

Page 56: Desarrollo de apps para iphone

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

Page 57: Desarrollo de apps para iphone

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

Page 58: Desarrollo de apps para iphone

View Controllers

jueves 14 de julio de 2011

Page 59: Desarrollo de apps para iphone

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

Page 60: Desarrollo de apps para iphone

RotaciónView Controllers

jueves 14 de julio de 2011

Page 61: Desarrollo de apps para iphone

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

Page 62: Desarrollo de apps para iphone

Root Controller

jueves 14 de julio de 2011

Page 63: Desarrollo de apps para iphone

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

Page 64: Desarrollo de apps para iphone

Tab Bar

jueves 14 de julio de 2011

Page 65: Desarrollo de apps para iphone

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

Page 66: Desarrollo de apps para iphone

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

Page 67: Desarrollo de apps para iphone

Navigation Controller

jueves 14 de julio de 2011

Page 68: Desarrollo de apps para iphone

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

Page 69: Desarrollo de apps para iphone

Comunicación con el Usuario

AlertView , ActionSheets y Vistas Modales

jueves 14 de julio de 2011

Page 70: Desarrollo de apps para iphone

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

Page 71: Desarrollo de apps para iphone

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

Page 72: Desarrollo de apps para iphone

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

Page 73: Desarrollo de apps para iphone

Persistencia de Datos

jueves 14 de julio de 2011

Page 74: Desarrollo de apps para iphone

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

Page 75: Desarrollo de apps para iphone

Documents & tmpDirectorios en los que podemos escribir

jueves 14 de julio de 2011

Page 76: Desarrollo de apps para iphone

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

Page 77: Desarrollo de apps para iphone

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

Page 78: Desarrollo de apps para iphone

Application Setup& User Defaults

jueves 14 de julio de 2011

Page 79: Desarrollo de apps para iphone

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

Page 80: Desarrollo de apps para iphone

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

Page 81: Desarrollo de apps para iphone

Data from the Web

jueves 14 de julio de 2011

Page 82: Desarrollo de apps para iphone

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

Page 83: Desarrollo de apps para iphone

UIWebView

jueves 14 de julio de 2011

Page 84: Desarrollo de apps para iphone

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

Page 85: Desarrollo de apps para iphone

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

Page 86: Desarrollo de apps para iphone

Handling Touch Events Taps, Touches & Gestures

jueves 14 de julio de 2011

Page 87: Desarrollo de apps para iphone

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

Page 88: Desarrollo de apps para iphone

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

Page 89: Desarrollo de apps para iphone

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

Page 90: Desarrollo de apps para iphone

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

Page 91: Desarrollo de apps para iphone

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

Page 92: Desarrollo de apps para iphone

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