SlideShare una empresa de Scribd logo
1 de 82
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
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
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

Más contenido relacionado

La actualidad más candente

Introdução ao jquery
Introdução ao jqueryIntrodução ao jquery
Introdução ao jquery
Yuri Costa
 
PDC - Engenharia - Plataforma Microsoft .NET
PDC - Engenharia - Plataforma Microsoft .NETPDC - Engenharia - Plataforma Microsoft .NET
PDC - Engenharia - Plataforma Microsoft .NET
slides_teltools
 

La actualidad más candente (20)

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

Similar a Desenvolvendo para iOS com Cocoa-Touch

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

iOS Delegates - Mobile Conf Rio 2014
iOS Delegates - Mobile Conf Rio 2014iOS Delegates - Mobile Conf Rio 2014
iOS Delegates - Mobile Conf Rio 2014
 
Desenvolvimento iOS
Desenvolvimento iOSDesenvolvimento iOS
Desenvolvimento iOS
 
Drag and Drop no iOS 11
Drag and Drop no iOS 11Drag and Drop no iOS 11
Drag and Drop no iOS 11
 
Desenvolvimento de Jogos com Cocos2d - Apresentação Coderockr Jam
Desenvolvimento de Jogos com Cocos2d - Apresentação Coderockr JamDesenvolvimento de Jogos com Cocos2d - Apresentação Coderockr Jam
Desenvolvimento de Jogos com Cocos2d - Apresentação Coderockr Jam
 
Semcomp - USP São Carlos - Desenvolvendo um aplicativo iOS com Swift
Semcomp - USP São Carlos - Desenvolvendo um aplicativo iOS com SwiftSemcomp - USP São Carlos - Desenvolvendo um aplicativo iOS com Swift
Semcomp - USP São Carlos - Desenvolvendo um aplicativo iOS com Swift
 
Construindo interfaces com XIBs reutilizáveis
Construindo interfaces com XIBs reutilizáveisConstruindo interfaces com XIBs reutilizáveis
Construindo interfaces com XIBs reutilizáveis
 
Swift, a nova linguagem de programação da Apple (CocoaHeads Sao Paulo)
Swift, a nova linguagem de programação da Apple (CocoaHeads Sao Paulo)Swift, a nova linguagem de programação da Apple (CocoaHeads Sao Paulo)
Swift, a nova linguagem de programação da Apple (CocoaHeads Sao Paulo)
 
Caelum Day In Rio
Caelum Day In RioCaelum Day In Rio
Caelum Day In Rio
 
Introdução ao Titanium Mobile
Introdução ao Titanium MobileIntrodução ao Titanium Mobile
Introdução ao Titanium Mobile
 
CDI Extensions e DeltaSpike
CDI Extensions e DeltaSpikeCDI Extensions e DeltaSpike
CDI Extensions e DeltaSpike
 
Mobile conf
Mobile confMobile conf
Mobile conf
 
IBDESIGNABLE
IBDESIGNABLEIBDESIGNABLE
IBDESIGNABLE
 
Kotlin first
Kotlin firstKotlin first
Kotlin first
 
Material Design - Melhorando a experiência de seu App
Material Design - Melhorando a experiência de seu AppMaterial Design - Melhorando a experiência de seu App
Material Design - Melhorando a experiência de seu App
 
Aulas Google Android
Aulas Google AndroidAulas Google Android
Aulas Google Android
 
Aula02 android hands_on
Aula02 android hands_onAula02 android hands_on
Aula02 android hands_on
 
MapKit na prática: Desenvolvendo um aplicativo iOS que exibe Pontos de Intere...
MapKit na prática: Desenvolvendo um aplicativo iOS que exibe Pontos de Intere...MapKit na prática: Desenvolvendo um aplicativo iOS que exibe Pontos de Intere...
MapKit na prática: Desenvolvendo um aplicativo iOS que exibe Pontos de Intere...
 
Apresentação Google Android
Apresentação Google AndroidApresentação Google Android
Apresentação Google Android
 
SESTINFO 2011 Apresentacao Android
SESTINFO 2011 Apresentacao AndroidSESTINFO 2011 Apresentacao Android
SESTINFO 2011 Apresentacao Android
 
Desenvolvendo aplicacoes mobile_com_html_css_
Desenvolvendo aplicacoes mobile_com_html_css_Desenvolvendo aplicacoes mobile_com_html_css_
Desenvolvendo aplicacoes mobile_com_html_css_
 

Más de Campus Party Brasil

Tempestades solares: mitos e verdades
Tempestades solares: mitos e verdadesTempestades solares: mitos e verdades
Tempestades solares: mitos e verdades
Campus Party Brasil
 
A busca por planetas além do sistema solar
A busca por planetas além do sistema solarA busca por planetas além do sistema solar
A busca por planetas além do sistema solar
Campus Party Brasil
 
Construção de uma luneta a baixo custo
Construção de uma luneta a baixo custoConstrução de uma luneta a baixo custo
Construção de uma luneta a baixo custo
Campus Party Brasil
 
Hardware livre Arduino: eletrônica e robótica com hardware e software livres
Hardware livre Arduino: eletrônica e robótica com hardware e software livresHardware livre Arduino: eletrônica e robótica com hardware e software livres
Hardware livre Arduino: eletrônica e robótica com hardware e software livres
Campus Party Brasil
 
Robótica e educação inclusiva
Robótica e educação inclusivaRobótica e educação inclusiva
Robótica e educação inclusiva
Campus Party Brasil
 
Robótica e educação inclusiva
	Robótica e educação inclusiva	Robótica e educação inclusiva
Robótica e educação inclusiva
Campus Party Brasil
 
Confecção de Circuito Impresso
Confecção de Circuito ImpressoConfecção de Circuito Impresso
Confecção de Circuito Impresso
Campus Party Brasil
 
Virtualização, cloud computig e suas tendencias
Virtualização, cloud computig e suas tendenciasVirtualização, cloud computig e suas tendencias
Virtualização, cloud computig e suas tendencias
Campus Party Brasil
 

Más de Campus Party Brasil (20)

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

Último

Último (8)

Programação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdfProgramação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdf
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object Calisthenics
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemplo
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 
Luís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdfLuís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdf
 
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docxATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
 

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
  • 19.
  • 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
  • 58.
  • 59.
  • 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.