SlideShare uma empresa Scribd logo
Desenvolvendo para iOS
       com CocoaTouch
Sumário
• Documentação

• Principais ferramentas de uso

• Objective-C / Cocoa touch

• Novidades do IOS 5

• Design e imagens

• Animações e edições de imagens

• Rastreando o usuário
Documentação
  O primeiro grande passo
Documentação
• https://developer.apple.com/library/ios/ipad/#home
Documentação
• https://github.com/brunogb/DocSets-for-iOS
Documentação
• HIG - Human interface guidelines
Principais ferramentas
Xcode
Xcode


• Edição do código

• Construção da interface

• Ferramenta de depuração de código

• Modelador de banco de dados
Xcode
Editor de versão do código



Suporte:
Interface Builder?
Interface Builder
Interface Builder



 • IBOutlets e IBActions diretamente da interface
Instruments
Instruments


• Avaliação de performance, gargálos, memory leaks

• Automação de navegação pelo aplicativo

• Facilita encontrar bugs de programação

• Analisador de OpenGL
Instruments
Instruments
Instruments
Desenvolvendo para iOS com Cocoa-Touch
Objective-C
Sintaxe
Sintaxe
ARC
Automatic Reference Counting
ARC
Automatic Reference Counting




• Não utilize os métodos dealloc, retain e release

• Para arquivos que não devam ser compilados com ARC, utilize a flag
  <-fno-objc-arc>

• Todos os métodos da sua classe devem estar especificados na
  interface
ARC
Automatic Reference Counting
ARC
Automatic Reference Counting




      @autoreleasepool {
          <seu código>
      }
Usando blocos com Objective-C
   E quais as vantagens em se utilizar blocos
Usando blocos com Objective-C




     Blocos são objetos que encapsulam um
      segmento de código a ser executado.
Usando blocos com Objective-C




   Adotado cada vez mais nos novos frameworks
Usando blocos com Objective-C


  Como remover uma view com fade
Usando blocos com Objective-C


   Transição "Flip" entre views
Definindo blocos
Definindo blocos
https://github.com/brunogb/BlocksKit


BlocksKit adiciona o suporte a blocos em diversos
frameworks que ainda não tem esse suporte
• Filtros em arrays e dicionários

• Alertas e ActionSheets

• Timers

• Conexões de internet

• Reconhecimento de gestos
Executando tarefas em background
 "nunca execute tarefas longas na thead principal"
Executando tarefas em background



           Tarefas com processamento paralisam a
          interface gráfica e passam a sensação de
            que o aplicativo não esta funcionando


- (void)performSelectorInBackground:(SEL)aSelector withObject:(id)arg
Executando tarefas em background



      Tarefas com processamento paralisam a
     interface gráfica e passam a sensação de
       que o aplicativo não esta funcionando


     - (void)performSelectorOnMainThread:(SEL)aSelector
     withObject:(id)arg waitUntilDone:(BOOL)wait
Novidades do iOS 5
Novos métodos, frameworks, e possibilidades
NSJSONSerialization
Traduzindo e gerando dados no formato JSON

+ (id)JSONObjectWithData:(NSData *)data options:
(NSJSONReadingOptions)opt error:(NSError **)error;

+ (id)JSONObjectWithStream:(NSInputStream *)stream
options:(NSJSONReadingOptions)opt error:(NSError **)error;

+ (BOOL)isValidJSONObject:(id)obj;

+ (NSData *)dataWithJSONObject:(id)obj options:
(NSJSONWritingOptions)opt error:(NSError **)error;
UIKit
UIScreen
    Controlando o brilho da tela


@property (nonatomic) CGFloat brightness;



@property (nonatomic) BOOL wantsSoftwareDimming;
 ( Cuidado com essa propriedade, ela pode causar uma
       animação mais lenta se estiver habilitada )
UIScrollview
Controlando o ponto de parada de um scroll



- (void)scrollViewWillEndDragging:(UIScrollView *)sv
withVelocity:(CGPoint)vel
targetContentOffset:(inout CGPoint *)tCO;

 ( a variável tCO contem o possível ponto de parada da
scrollView, e você pode altera-lo para o ponto que achar
melhor. Cuidado para não estraga a "física" da scrollView,
              ou o usuário pode ficar perdido)
UIReferenceLibraryViewController
Exibindo definições de palavras

- (id)initWithTerm:(NSString *)term;

+ (BOOL)dictionaryHasDefinitionForTerm:(NSString *)term;
UITableView
Registrando UITableViewCell com um identifier

- (void)registerNib:(UINib *)nib
forCellReuseIdentifier:(NSString *)ident;



Como recuperar um Nib


    UINib *nibFile = [UINib nibWithNibName:@"MyNib" bundle:nil];


( Importante definir na UITableViewCell o mesmo identifier )
UIImage
Imagens animadas

+ (UIImage*)animatedImageNamed:(NSString *)name duration:
(NSTimeInterval)duration;
Busca por name0, name1....


+ (UIImage*)animatedImageWithImages:(NSArray *)images
duration:(NSTimeInterval)duration;

@property (nonatomic, readonly) NSArray *images;

@property (nonatomic, readonly) NSTimeInterval duration;
UIImage
Imagens redimencionadas (tiles)


- (UIImage*)resizableImageWithCapInsets:(UIEdgeInsets)i;
duration:(NSTimeInterval)duration;




                            {0, 1, 0, 1}
UIViewControllerContainer
UIViewControllerContainer
Container



- (void)addChildViewController:(UIViewController *)cvc;

- (void)removeFromParentViewController;

@property (readonly) BOOL childViewControllers;


Após executar o método <addChildViewController:> deve-se este método no
controllers adicionado:

- (void)didMoveToParentViewController:(UIViewController *)cvc;
UIViewControllerContainer
Transição entre controllers




- (void)transitionFromViewController:(UIViewController *)fvc
toViewController:(UIViewController *)tvc
duration:(NSTimeInterval)duration
options:(UIViewAnimationOptions)options
animations:(void (^)(void))animations
completion:(void (^)(BOOL finished))completion;
UIStepper
Controle para aumentar ou diminuir um valor

@property (nonatomic) BOOL autorepeat;

@property (nonatomic) double maximumValue;

@property (nonatomic) double minimumValue;

@property (nonatomic) double stepValue;

@property (nonatomic) double value;
Twitter & Accounts
     "Single sign-on"
Twitter & Accounts
    "Single sign-on"

TWRequest;

Responsável por efetuar requisições para a API do Twitter. Caso
seja um recurso protegido, basta definir a propriedade <account>.
 

 Saiba os métodos disponíveis em: http://dev.twitter.com/docs/api



TWTweetComposeViewController

ViewController que permite ao usuário enviar um tweet. Pode ser
adicionado uma imagem, ou url ao tweet antes de exibi-lo.
Twitter & Accounts
 "Single sign-on"




Código para recuperar todas as contas disponíveis
UIStoryBoards
UIStoryBoards




Fácil de criar e visualizar a navegação do aplicativo
UIStoryBoard
UIViewController

@property (readonly, retain) UIStoryBoard *storyboard;

- (void)performSegueWithIdentifier:(NSString *)id sender:
(id)sender;

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:
(id)sender;

- (void)instantiateViewControllerWithIdentifier:(NSString *)identifier
UIStoryBoard
UITableViewController




                        Protótipo de células de
                        tabelas dentro da própria
                        tabela
UIStoryBoard
UITableViewController




                        Tabelas com conteúdo
                        estático pre definido
Desenvolvendo para iOS com Cocoa-Touch
Desenvolvendo para iOS com Cocoa-Touch
Sincronização remota em tempo
      real entre aplicativos
Configurando iCloud
 em seu aplicativo
• Habilitar o provisioning profile com permissão para
  iCloud

• Atualizar provisioning profile no Xcode

• Marcar o campo <entitlements> dentro do summary do
  aplicativo
Configurando iCloud
 em seu aplicativo
Configurando iCloud
 em seu aplicativo
Newsstand
Revistas e jornais no seu iDevice
Newsstand
Revistas e jornais no seu iDevice




• Possibilita download de conteúdo em background

• Possibilita que o aplicativo seja lançado em
  background via push notification

• Possibilita downloads de itens separados do servidor
  em background.

• Ícone do aplicativo pode ser alterado para refletir a
  última edição recebida.
Animações e edição básica de imagens
 Utilizando QuartzCore, CoreAnimation e CoreImage
CALayer
Toda UIView tem uma CALayer responsável por desenhar
o conteúdo na tela. Seus atributos podem ser animados




Para acessar a layer de uma UIView:

    UIView *view = [[UIView alloc] init];
    CALayer *layer = view.layer;
CALayer                          • cornerRadius


Deixa a view com borda arredondada.
Caso a view possua conteúdos perto da
borda, pode ser necessário utilizar a
propriedade <clipToBounds> da view
para que o conteúdo seja escondido


    UIView *view = [[UIView alloc] init];
    CALayer *layer = view.layer;
    layer.cornerRadius = 8;
CALayer                        • borderColor, borderWidth


Define cor e tamanho da borda da view.
Acompanha o traçado do cornerRadius,
se houver. A cor é definida com uma
referencia do tipo CGColorRef.


    UIView *view = [[UIView alloc] init];
    CALayer *layer = view.layer;
    layer.borderWidth = 3;
    layer.borderColor = [UIColor redColor].CGColor;
CALayer                       • shadowOpacity, shadowRadius,
                                shadowOffset, shadowColor


Define opacidade, radius, offset e cor da
sombra da UIView. O offset é definido
como um CGSize e determina a partir
do centro da view para qual direção a
sombra vai se deslocar.

    UIView *view = [[UIView alloc] init];
    CALayer *layer = view.layer;
    layer.shadowOpacity = 0.8;
    layer.shadowColor = [UIColor redColor].CGColor;
    layer.shadowRadius = 2;
    layer.shadowOffset = CGSizeMake(0,1);
Design e imagens
Design e imagens
Regra dos 44x44 pixels




     A área mínima de um controle que aceite um
           toque deve ser de 44x44 pixels.
Design e imagens
Regra dos 44x44 pixels
Design e imagens
Regra dos 44x44 pixels




    UINavigationBar tem 44px de altura, e apesar
    de seus botões interior terem 30px de altura,
    sua área de toque é estendida para os 44px
Design e imagens
Tamanho dos ícones do aplicativo


• AppStore: 512x512px

• iPad: 72x72px

• Home screen: 57x57px

• Home screen (Retina display): 114x114px
Design e imagens
Tamanho da tela e desenvolvendo para tela Retina


• iPhone: 320x480

• iPad: 768x1024

• IPhone Retina: 640x960
Importante notar que para desenvolver para tela retina basta multiplicar por 2
o tamanho do objeto numa tela não retina. Ex: uma imagem 50x50 em tela
normal, em tela retina seria 100x100. E para utilizar imagens em retina, basta
ela ter o mesmo nome da normal acrescentada de @2x antes da extensão.
Design e imagens
Tamanho dos elementos internos


• Status bar: 20px de altura

• Navigation bar: 44px de altura

• Tab bar: 49px de altura

• Bar itens: 30x30 pixels
Rasteando o usuário
dentro do aplicativo
  Aprendendo com o usuário o que mais
   importante e o que funciona melhor
Rasteando o usuário dentro do aplicativo


 As melhores ferramentas disponíveis no momento
 são Google analytics e Flurry.
 
 Ambas são muito parecidas em termos de
 funcionalidades mas cada uma se destaca em
 uma área.
Flurry
• Analytics para iOS, Android, Blackberry, Windows Phone,
  JavaME, HTML5.

• Rastreia dados como sexo do usuário, idade e ID (desde
  que esses dados sejam fornecidos pelo programador)

• Relatórios são mais simples porém.


Google analytics
• Analytics para iOS, Android e HTML.

• Rastreia dados customizados definidos pelo
  desenvolvidor

• Integração com ecommerce, e campanhas. Versão web

• Relatórios detalhados, mesmo painel da versão web.
Mais informações
Bruno Bilescky

bruno.gondim@telefonicadigital.com.br

brunogb@gmail.com

@bgondim


Documentação 

http://developer.apple.com
Desenvolvendo para iOS com Cocoa-Touch

Mais conteúdo relacionado

PDF
Persistência de Dados no SQLite com Room
PDF
Spring Data Jpa
PDF
Turbinando o desenvolvimento Android com Kotlin
ODP
Introdução a jQuery
PDF
jQuery na Prática!
PDF
Programação Web com jQuery
PDF
Java script aula 06 - dom
PDF
Spring Data Jpa
Persistência de Dados no SQLite com Room
Spring Data Jpa
Turbinando o desenvolvimento Android com Kotlin
Introdução a jQuery
jQuery na Prática!
Programação Web com jQuery
Java script aula 06 - dom
Spring Data Jpa

Mais procurados (20)

PPTX
Javascript para CSharpers - Append B - jQuery
PPTX
Treinamento Elasticsearch - Parte 1
PDF
LaravelSP - MySQL 5.7: introdução ao JSON Data Type
PPTX
Introdução ao jquery
PPTX
PDC - Engenharia - Plataforma Microsoft .NET
PDF
Minicurso sobre AndroidAnnotations, GreenDAO, EventBus e Crouton
PPTX
JavaFX e Scala - Como Leite com Bolacha
PDF
Node.js: serious business
PPTX
Seja um ninja em AWS IAM
PDF
MySQL 5.7 - 
Tirando o Máximo Proveito
PDF
Mongodb workshop cinlug
PDF
JavaScript e JQuery para Webdesigners
PPTX
jQuery na Prática - Cauê Fajoli
PDF
Desenvolvimento Moderno de Aplicativos Android
PDF
Java 9, 10 e ... 11
PDF
Introdução ao MongoDB em 30 slides
PDF
Primeiros Passos Com Elasticsearch
PPTX
Introdução ao MongoDB
PDF
Fisl 11 - Ecossistema Ruby on Rails
PDF
Hibernate efetivo (COALTI-2014 / ALJUG)
Javascript para CSharpers - Append B - jQuery
Treinamento Elasticsearch - Parte 1
LaravelSP - MySQL 5.7: introdução ao JSON Data Type
Introdução ao jquery
PDC - Engenharia - Plataforma Microsoft .NET
Minicurso sobre AndroidAnnotations, GreenDAO, EventBus e Crouton
JavaFX e Scala - Como Leite com Bolacha
Node.js: serious business
Seja um ninja em AWS IAM
MySQL 5.7 - 
Tirando o Máximo Proveito
Mongodb workshop cinlug
JavaScript e JQuery para Webdesigners
jQuery na Prática - Cauê Fajoli
Desenvolvimento Moderno de Aplicativos Android
Java 9, 10 e ... 11
Introdução ao MongoDB em 30 slides
Primeiros Passos Com Elasticsearch
Introdução ao MongoDB
Fisl 11 - Ecossistema Ruby on Rails
Hibernate efetivo (COALTI-2014 / ALJUG)
Anúncio

Semelhante a Desenvolvendo para iOS com Cocoa-Touch (20)

KEY
Desenvolvimento iOS
PDF
Desenvolvendos Apps para iPad - TDC 2010
DOCX
Introdução a programação para plataforma iOS
PDF
Motivos para abandonar a Interface Builder
PDF
Semcomp - USP São Carlos - Desenvolvendo um aplicativo iOS com Swift
PDF
Introdução ao desenvolvimento para iOS
PDF
Desenvolvimento de Apps e Games para iOS - Parte 2
PPT
Cenário Apple
PPTX
Desenvolvendo para iOS
KEY
Desenvolvimento de Jogos com Cocos2d - Apresentação Coderockr Jam
PDF
8 d iniciando_iphone_ios4
PPT
Otimização, dicas de implementação, como resolver problemas by Adriano Santan...
PDF
O que você precisa para iniciar no iOS e Objective-C -
PPTX
Cocoa Touch Framework 8
PDF
Caelum Day In Rio
PDF
Primeiros passos no iOS com Objective-C
PDF
Compartilhamento de código com Frameworks - CocoaHeads RJ
PPT
Desenvolvendo aplicativos para iOS 6 - Campus Party 2013
KEY
A primeira app iOS (a gente não esquece)
Desenvolvimento iOS
Desenvolvendos Apps para iPad - TDC 2010
Introdução a programação para plataforma iOS
Motivos para abandonar a Interface Builder
Semcomp - USP São Carlos - Desenvolvendo um aplicativo iOS com Swift
Introdução ao desenvolvimento para iOS
Desenvolvimento de Apps e Games para iOS - Parte 2
Cenário Apple
Desenvolvendo para iOS
Desenvolvimento de Jogos com Cocos2d - Apresentação Coderockr Jam
8 d iniciando_iphone_ios4
Otimização, dicas de implementação, como resolver problemas by Adriano Santan...
O que você precisa para iniciar no iOS e Objective-C -
Cocoa Touch Framework 8
Caelum Day In Rio
Primeiros passos no iOS com Objective-C
Compartilhamento de código com Frameworks - CocoaHeads RJ
Desenvolvendo aplicativos para iOS 6 - Campus Party 2013
A primeira app iOS (a gente não esquece)
Anúncio

Mais de Campus Party Brasil (20)

PDF
ODP
Buracos negros
PDF
Programação para Atari 2600
PDF
Desenvolvimento de aplicações para o Google App Engine
PDF
Técnicas forenses para a recuperação de arquivos
PPTX
Como ganhar dinheiro no mundo mobile?
ODP
Tempestades solares: mitos e verdades
PDF
A busca por planetas além do sistema solar
PDF
Passeio virtual pelo LHC
PPT
Construção de uma luneta a baixo custo
ODP
Hardware livre Arduino: eletrônica e robótica com hardware e software livres
PPTX
Robótica e educação inclusiva
PDF
Fazendo do jeito certo: criando jogos sofisticados com DirectX
PDF
PDF
Linux para iniciantes
PPTX
Robótica e educação inclusiva
PDF
Gestão e monitoramento de redes e dispositivos com Software Livre
ODP
Confecção de Circuito Impresso
PDF
Vida de Programador
PPTX
Virtualização, cloud computig e suas tendencias
Buracos negros
Programação para Atari 2600
Desenvolvimento de aplicações para o Google App Engine
Técnicas forenses para a recuperação de arquivos
Como ganhar dinheiro no mundo mobile?
Tempestades solares: mitos e verdades
A busca por planetas além do sistema solar
Passeio virtual pelo LHC
Construção de uma luneta a baixo custo
Hardware livre Arduino: eletrônica e robótica com hardware e software livres
Robótica e educação inclusiva
Fazendo do jeito certo: criando jogos sofisticados com DirectX
Linux para iniciantes
Robótica e educação inclusiva
Gestão e monitoramento de redes e dispositivos com Software Livre
Confecção de Circuito Impresso
Vida de Programador
Virtualização, cloud computig e suas tendencias

Último (19)

PDF
COBITxITIL-Entenda as diferença em uso governança TI
PDF
Aula04-Academia Heri- Tecnologia Geral 2025
PDF
Custos e liquidação no SAP Transportation Management, TM130 Col18
PPTX
Aula 18 - Manipulacao De Arquivos python
PDF
Processos na gestão de transportes, TM100 Col18
PDF
Mergulho profundo técnico para gestão de transportes no SAP S/4HANA, S4TM6 Col14
PDF
Otimizador de planejamento e execução no SAP Transportation Management, TM120...
PDF
Gestão de transportes básica no SAP S/4HANA, S4611 Col20
PPTX
BANCO DE DADOS - AULAS INICIAIS-sgbd.pptx
PDF
Fullfilment AI - Forum ecommerce 2025 // Distrito e Total Express
PDF
Fundamentos de gerenciamento de ordens e planejamento no SAP TransportationMa...
PDF
Apple Pippin Uma breve introdução. - David Glotz
PPTX
Programação - Linguagem C - Variáveis, Palavras Reservadas, tipos de dados, c...
PPTX
Aula16ManipulaçãoDadosssssssssssssssssssssssssssss
PPTX
Gestao-de-Bugs-em-Software-Introducao.pptxxxxxxxx
PDF
Custos e faturamento no SAP S/4HANA Transportation Management, S4TM3 Col26
PPTX
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...
PDF
20250805_ServiceNow e a Arquitetura Orientada a Serviços (SOA) A Base para Ap...
PPTX
Como-se-implementa-um-softwareeeeeeeeeeeeeeeeeeeeeeeee.pptx
COBITxITIL-Entenda as diferença em uso governança TI
Aula04-Academia Heri- Tecnologia Geral 2025
Custos e liquidação no SAP Transportation Management, TM130 Col18
Aula 18 - Manipulacao De Arquivos python
Processos na gestão de transportes, TM100 Col18
Mergulho profundo técnico para gestão de transportes no SAP S/4HANA, S4TM6 Col14
Otimizador de planejamento e execução no SAP Transportation Management, TM120...
Gestão de transportes básica no SAP S/4HANA, S4611 Col20
BANCO DE DADOS - AULAS INICIAIS-sgbd.pptx
Fullfilment AI - Forum ecommerce 2025 // Distrito e Total Express
Fundamentos de gerenciamento de ordens e planejamento no SAP TransportationMa...
Apple Pippin Uma breve introdução. - David Glotz
Programação - Linguagem C - Variáveis, Palavras Reservadas, tipos de dados, c...
Aula16ManipulaçãoDadosssssssssssssssssssssssssssss
Gestao-de-Bugs-em-Software-Introducao.pptxxxxxxxx
Custos e faturamento no SAP S/4HANA Transportation Management, S4TM3 Col26
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...
20250805_ServiceNow e a Arquitetura Orientada a Serviços (SOA) A Base para Ap...
Como-se-implementa-um-softwareeeeeeeeeeeeeeeeeeeeeeeee.pptx

Desenvolvendo para iOS com Cocoa-Touch

  • 1. Desenvolvendo para iOS com CocoaTouch
  • 2. Sumário • Documentação • Principais ferramentas de uso • Objective-C / Cocoa touch • Novidades do IOS 5 • Design e imagens • Animações e edições de imagens • Rastreando o usuário
  • 3. Documentação O primeiro grande passo
  • 6. Documentação • HIG - Human interface guidelines
  • 9. Xcode • Edição do código • Construção da interface • Ferramenta de depuração de código • Modelador de banco de dados
  • 10. Xcode Editor de versão do código Suporte:
  • 13. Interface Builder • IBOutlets e IBActions diretamente da interface
  • 15. Instruments • Avaliação de performance, gargálos, memory leaks • Automação de navegação pelo aplicativo • Facilita encontrar bugs de programação • Analisador de OpenGL
  • 24. ARC Automatic Reference Counting • Não utilize os métodos dealloc, retain e release • Para arquivos que não devam ser compilados com ARC, utilize a flag <-fno-objc-arc> • Todos os métodos da sua classe devem estar especificados na interface
  • 26. ARC Automatic Reference Counting @autoreleasepool { <seu código> }
  • 27. Usando blocos com Objective-C E quais as vantagens em se utilizar blocos
  • 28. Usando blocos com Objective-C Blocos são objetos que encapsulam um segmento de código a ser executado.
  • 29. Usando blocos com Objective-C Adotado cada vez mais nos novos frameworks
  • 30. Usando blocos com Objective-C Como remover uma view com fade
  • 31. Usando blocos com Objective-C Transição "Flip" entre views
  • 33. Definindo blocos https://github.com/brunogb/BlocksKit BlocksKit adiciona o suporte a blocos em diversos frameworks que ainda não tem esse suporte • Filtros em arrays e dicionários • Alertas e ActionSheets • Timers • Conexões de internet • Reconhecimento de gestos
  • 34. Executando tarefas em background "nunca execute tarefas longas na thead principal"
  • 35. Executando tarefas em background Tarefas com processamento paralisam a interface gráfica e passam a sensação de que o aplicativo não esta funcionando - (void)performSelectorInBackground:(SEL)aSelector withObject:(id)arg
  • 36. Executando tarefas em background Tarefas com processamento paralisam a interface gráfica e passam a sensação de que o aplicativo não esta funcionando - (void)performSelectorOnMainThread:(SEL)aSelector withObject:(id)arg waitUntilDone:(BOOL)wait
  • 37. Novidades do iOS 5 Novos métodos, frameworks, e possibilidades
  • 38. NSJSONSerialization Traduzindo e gerando dados no formato JSON + (id)JSONObjectWithData:(NSData *)data options: (NSJSONReadingOptions)opt error:(NSError **)error; + (id)JSONObjectWithStream:(NSInputStream *)stream options:(NSJSONReadingOptions)opt error:(NSError **)error; + (BOOL)isValidJSONObject:(id)obj; + (NSData *)dataWithJSONObject:(id)obj options: (NSJSONWritingOptions)opt error:(NSError **)error;
  • 39. UIKit
  • 40. UIScreen Controlando o brilho da tela @property (nonatomic) CGFloat brightness; @property (nonatomic) BOOL wantsSoftwareDimming; ( Cuidado com essa propriedade, ela pode causar uma animação mais lenta se estiver habilitada )
  • 41. UIScrollview Controlando o ponto de parada de um scroll - (void)scrollViewWillEndDragging:(UIScrollView *)sv withVelocity:(CGPoint)vel targetContentOffset:(inout CGPoint *)tCO; ( a variável tCO contem o possível ponto de parada da scrollView, e você pode altera-lo para o ponto que achar melhor. Cuidado para não estraga a "física" da scrollView, ou o usuário pode ficar perdido)
  • 42. UIReferenceLibraryViewController Exibindo definições de palavras - (id)initWithTerm:(NSString *)term; + (BOOL)dictionaryHasDefinitionForTerm:(NSString *)term;
  • 43. UITableView Registrando UITableViewCell com um identifier - (void)registerNib:(UINib *)nib forCellReuseIdentifier:(NSString *)ident; Como recuperar um Nib UINib *nibFile = [UINib nibWithNibName:@"MyNib" bundle:nil]; ( Importante definir na UITableViewCell o mesmo identifier )
  • 44. UIImage Imagens animadas + (UIImage*)animatedImageNamed:(NSString *)name duration: (NSTimeInterval)duration; Busca por name0, name1.... + (UIImage*)animatedImageWithImages:(NSArray *)images duration:(NSTimeInterval)duration; @property (nonatomic, readonly) NSArray *images; @property (nonatomic, readonly) NSTimeInterval duration;
  • 45. UIImage Imagens redimencionadas (tiles) - (UIImage*)resizableImageWithCapInsets:(UIEdgeInsets)i; duration:(NSTimeInterval)duration; {0, 1, 0, 1}
  • 47. UIViewControllerContainer Container - (void)addChildViewController:(UIViewController *)cvc; - (void)removeFromParentViewController; @property (readonly) BOOL childViewControllers; Após executar o método <addChildViewController:> deve-se este método no controllers adicionado: - (void)didMoveToParentViewController:(UIViewController *)cvc;
  • 48. UIViewControllerContainer Transição entre controllers - (void)transitionFromViewController:(UIViewController *)fvc toViewController:(UIViewController *)tvc duration:(NSTimeInterval)duration options:(UIViewAnimationOptions)options animations:(void (^)(void))animations completion:(void (^)(BOOL finished))completion;
  • 49. UIStepper Controle para aumentar ou diminuir um valor @property (nonatomic) BOOL autorepeat; @property (nonatomic) double maximumValue; @property (nonatomic) double minimumValue; @property (nonatomic) double stepValue; @property (nonatomic) double value;
  • 50. Twitter & Accounts "Single sign-on"
  • 51. Twitter & Accounts "Single sign-on" TWRequest; Responsável por efetuar requisições para a API do Twitter. Caso seja um recurso protegido, basta definir a propriedade <account>. Saiba os métodos disponíveis em: http://dev.twitter.com/docs/api TWTweetComposeViewController ViewController que permite ao usuário enviar um tweet. Pode ser adicionado uma imagem, ou url ao tweet antes de exibi-lo.
  • 52. Twitter & Accounts "Single sign-on" Código para recuperar todas as contas disponíveis
  • 54. UIStoryBoards Fácil de criar e visualizar a navegação do aplicativo
  • 55. UIStoryBoard UIViewController @property (readonly, retain) UIStoryBoard *storyboard; - (void)performSegueWithIdentifier:(NSString *)id sender: (id)sender; - (void)prepareForSegue:(UIStoryboardSegue *)segue sender: (id)sender; - (void)instantiateViewControllerWithIdentifier:(NSString *)identifier
  • 56. UIStoryBoard UITableViewController Protótipo de células de tabelas dentro da própria tabela
  • 57. UIStoryBoard UITableViewController Tabelas com conteúdo estático pre definido
  • 60. Sincronização remota em tempo real entre aplicativos
  • 61. Configurando iCloud em seu aplicativo • Habilitar o provisioning profile com permissão para iCloud • Atualizar provisioning profile no Xcode • Marcar o campo <entitlements> dentro do summary do aplicativo
  • 62. Configurando iCloud em seu aplicativo
  • 63. Configurando iCloud em seu aplicativo
  • 65. Newsstand Revistas e jornais no seu iDevice • Possibilita download de conteúdo em background • Possibilita que o aplicativo seja lançado em background via push notification • Possibilita downloads de itens separados do servidor em background. • Ícone do aplicativo pode ser alterado para refletir a última edição recebida.
  • 66. Animações e edição básica de imagens Utilizando QuartzCore, CoreAnimation e CoreImage
  • 67. CALayer Toda UIView tem uma CALayer responsável por desenhar o conteúdo na tela. Seus atributos podem ser animados Para acessar a layer de uma UIView: UIView *view = [[UIView alloc] init]; CALayer *layer = view.layer;
  • 68. CALayer • cornerRadius Deixa a view com borda arredondada. Caso a view possua conteúdos perto da borda, pode ser necessário utilizar a propriedade <clipToBounds> da view para que o conteúdo seja escondido UIView *view = [[UIView alloc] init]; CALayer *layer = view.layer; layer.cornerRadius = 8;
  • 69. CALayer • borderColor, borderWidth Define cor e tamanho da borda da view. Acompanha o traçado do cornerRadius, se houver. A cor é definida com uma referencia do tipo CGColorRef. UIView *view = [[UIView alloc] init]; CALayer *layer = view.layer; layer.borderWidth = 3; layer.borderColor = [UIColor redColor].CGColor;
  • 70. CALayer • shadowOpacity, shadowRadius, shadowOffset, shadowColor Define opacidade, radius, offset e cor da sombra da UIView. O offset é definido como um CGSize e determina a partir do centro da view para qual direção a sombra vai se deslocar. UIView *view = [[UIView alloc] init]; CALayer *layer = view.layer; layer.shadowOpacity = 0.8; layer.shadowColor = [UIColor redColor].CGColor; layer.shadowRadius = 2; layer.shadowOffset = CGSizeMake(0,1);
  • 72. Design e imagens Regra dos 44x44 pixels A área mínima de um controle que aceite um toque deve ser de 44x44 pixels.
  • 73. Design e imagens Regra dos 44x44 pixels
  • 74. Design e imagens Regra dos 44x44 pixels UINavigationBar tem 44px de altura, e apesar de seus botões interior terem 30px de altura, sua área de toque é estendida para os 44px
  • 75. Design e imagens Tamanho dos ícones do aplicativo • AppStore: 512x512px • iPad: 72x72px • Home screen: 57x57px • Home screen (Retina display): 114x114px
  • 76. Design e imagens Tamanho da tela e desenvolvendo para tela Retina • iPhone: 320x480 • iPad: 768x1024 • IPhone Retina: 640x960 Importante notar que para desenvolver para tela retina basta multiplicar por 2 o tamanho do objeto numa tela não retina. Ex: uma imagem 50x50 em tela normal, em tela retina seria 100x100. E para utilizar imagens em retina, basta ela ter o mesmo nome da normal acrescentada de @2x antes da extensão.
  • 77. Design e imagens Tamanho dos elementos internos • Status bar: 20px de altura • Navigation bar: 44px de altura • Tab bar: 49px de altura • Bar itens: 30x30 pixels
  • 78. Rasteando o usuário dentro do aplicativo Aprendendo com o usuário o que mais importante e o que funciona melhor
  • 79. Rasteando o usuário dentro do aplicativo As melhores ferramentas disponíveis no momento são Google analytics e Flurry. Ambas são muito parecidas em termos de funcionalidades mas cada uma se destaca em uma área.
  • 80. Flurry • Analytics para iOS, Android, Blackberry, Windows Phone, JavaME, HTML5. • Rastreia dados como sexo do usuário, idade e ID (desde que esses dados sejam fornecidos pelo programador) • Relatórios são mais simples porém. Google analytics • Analytics para iOS, Android e HTML. • Rastreia dados customizados definidos pelo desenvolvidor • Integração com ecommerce, e campanhas. Versão web • Relatórios detalhados, mesmo painel da versão web.