2. Apresentação
Sócio/Programador/Eletricista da Code Rockr
Programo para:
‣ Web
‣ iOS...
... e nas horas vagas:
‣ Mac OS X
‣ Arduino
“Professor” de desenvolvimento iOS
http://twitter.com/xorna
xorna@coderockr.com
4. Pré-requisitos
Programação Orientada a Objetos
Inglês pelo menos para leitura
Conhecimento de Design Patterns
MVC é primário
Acesso a Mac OS X
Ferramentas de desenvolvimento
Um iDevice para testes é recomendado
5. Recursos para desenvolvedores
iOS Dev Center
Apple Developer Forums
Documentação
Ferramentas de desenvolvimento
Provisioning Portal
iTunes Connect
9. Human Interface Guidelines
Guia para construção de interfaces
Estudos de UX feitos sobre os apps da Apple
Frequentemente atualizada
Indispensável para designers e desenvolvedores
11. Xcode
Ambiente de desenvolvimento integrado nativo da Apple
Versão atual: 4.2
Suporta desenvolvimento iOS e Mac OS X
Possui Interface Builder Integrado
Possui console de depuração
Grátis para desenvolvedores e usuários Mac OS X Lion
Possui documentação completa integrada
16. Framework Foundation
Framework base do Mac OS X e iOS
Totalmente Objective-C
Facilita o desenvolvimento
Classes básicas como:
‣ NSObject
‣ NSString
‣ NSArray
‣ NSDictionary
21. Declaração de Classes
Necessária a prévia declaração de uma classe com suas
propriedades, métodos e demais configurações de comportamento.
#import <Foundation/Foundation.h>
// Inicio da declaração
@interface Carro : NSObject
// Lista de propriedades
@property (nonatomic, strong) NSString *modelo;
@property (nonatomic, strong) NSString *fabricante;
@property (nonatomic, strong) UIColor *cor;
@property (nonatomic, assign) BOOL ligado;
// Lista de Métodos
- (void) acelerar:(NSInteger) aceleracao;
- (void) freiar:(NSInteger) desaceleracao;
- (BOOL) ligar;
- (BOOL) desligar;
// Final da declaração
@end
22. Configuração de Propriedades
Usadas para configurar o comportamento dos getters e setters.
Leitura/Escrita
‣ readwrite
‣ readonly
Atribuição
‣ assign
‣ strong
‣ unsafe_unretained
Atomicidade
‣ atomic
‣ nonatomic
24. Implementação de Classes
Seguindo a declaração prévia da classe, faz-se a implementação da
mesma. Abaixo a implementação das propriedades.
// Importação da declaração da classe
#import "Carro.h"
// Início da Implementação
@implementation Carro
// Geração automática de getter and setter + variável privada
@synthesize modelo = _modelo;
@synthesize fabricante = _fabricante;
@synthesize cor = _cor;
@synthesize ligado = _ligado;
25. @synthesize
Gera os métodos get e set para cada propriedade, de acordo com
sua configuração.
Cria também uma variável dentro do escopo da implementação para
acesso direto a uma propriedade.
26. Implementação de Classes
Agora a implementação dos métodos
// Implementação dos métodos
- (void) acelerar:(NSInteger)aceleracao {
}
- (void) freiar:(NSInteger)desaceleracao {
}
- (BOOL) ligar {
return YES;
}
- (BOOL) desligar {
return YES;
}
// Final da Implementação
@end
29. NSString
Classe padrão para manipulação de strings, pode ser mutável
(NSString) ou imutável (NSMutableString)
// NSString na criação de uma imagem
UIImage *img = [UIImage imageNamed:@"icon.png"];
// Manipulação de uma string mutável
NSMutableString *str = [NSMutableString stringWithString:@"Mac OS
Dev"];
! [str replaceOccurrencesOfString:@"Mac OS"
! ! ! ! ! ! withString:@"iOS"
! ! ! ! ! ! ! options:NSLiteralSearch
! ! ! ! ! ! ! range:NSMakeRange(0, [str length])];
30. NSArray
Utilizada para armazenar e manipular listas ordenadas
numericamente. Possui uma forma imutável (NSArray) e uma forma
mutável (NSMutableArray).
// Criação do Array
NSArray *carros = [NSArray arrayWithObjects:@"Corsa", @"Palio",
@"Fiesta", @"Gol", nil];
// Acesso a um objeto em um índice específico
NSString *carro = [carros objectAtIndex:0];
31. NSDictionary
Utilizada para armazenar para armazenar e manipular listas com
índices não numéricos. Possui uma versão imutável (NSDictionary) e
uma versão mutável (NSMutableDictionary)
// Criação da lista
NSDictionary *dict = [NSDictionary
dictionaryWithObjectsAndKeys:@"primeiro", @"objeto1", @"segundo",
@"objeto2", nil];
// Recuperação de um item específico
NSString *item = [dict objectForKey:@"primeiro"];
32. NSNumber
Utilizada para armazenar e manipular qualquer valor numérico de
qualquer tipo (int, float, double), forma utilizada para utilizar números
como objetos. É possível recuperar o valor em tipo nativo a qualquer
instante.
// Criação do Objeto
NSNumber *number = [NSNumber numberWithFloat:12.3];
// Recuperação do Valor
float floatNumber = [number floatValue];
34. Uso do Interface Builder
Criação de interfaces de forma totalmente visual
Ligações com o ViewController
‣ IBOutlet
‣ IBAction
// Conecta o elemento a uma propriedade
@property (nonatomic, strong) IBOutlet UILabel *label;
// Conecta o elemento a uma ação
- (IBAction)doSomething:(id)sender;
36. Uso de Imagens
Um dos recursos mais comuns no desenvolvimento de aplicativos
Imagens podem ser:
‣ Arquivos Locais
‣ Objetos Quartz
‣ Fotos tiradas com a camera
‣ Dados vindos de um servidor
Formatos Suportados:
‣ .tiff, .tif
‣ .jpg, .jpeg
‣ .gif
‣ .png
‣ .bmp
‣ .ico
‣ .cur
‣ .xbm
37. Retina Display e as Imagens
Pixels 4x mais densos
Resolução duplicada
Solução:
‣ Imagens Normais para displays comuns
‣ Imagens com tamanho duplicado para Retina Display
Tratamento via Código:
Nenhum
Na prática:
‣ Imagem normal com seu nome comum: background.png
‣ Imagem retina com sufixo @2x: background@2x.png
38. UIImage
Representação de uma imagem em forma de objeto
Imutável
Possui gerenciamento automático de memória
Evitar imagens maiores que 1024x1024
Redimensionamento de Imagens:
‣ Configuração do objeto UIImageView para apresentação
‣ Via código, de forma permanente
39. UIImageView
Um UIView para exibição de imagens
Suporta animações com vários frames
Exibe um objeto UIImage
Possui propriedades para redimensionamento da imagem
41. Elementos de Controle
Elementos de interface utilizados para interação com usuário
Executam ações e controlam valores
UIKit possui os de uso mais comum
Possibilidade de personalização
Possibilidade de criação de novos elementos utilizando Cocoa
45. UISegmentedControl
Controle de vários botões
O valor armazenado é o índice selecionado
Configurações de múltipla escolha
Utilizado para separação de conteúdo em abas