Archive for the ‘Uncategorized’ Category

Preenchimento de figuras

2010/01/27

Tentei localizar uma rotina para desenho no iPhone. Quero carregar uma figura e preencher parte dela com uma cor específica. O preenchimento deve estar contido no menor polígono delimitado por uma borda de cor preta.

Para fazer isso no iPhone, é necessário utilizar a camada mais baixa de programação: OpenGL ES. O motivo é simples: as demais bibliotecas são vetoriais, e o preenchimento é um algoritmo para imagens reticuladas. O exemplo GLSprite tem quase tudo que preciso. Falta apenas ler um pixel (glReadPixels), alterar a cor de um pixel e programar uma rotina de preenchimento com as instruções na Wikipedia (flood/seed fill).

O exemplo GLPaint também tem algum código útil.

Referências:

http://ask.metafilter.com/101438/Getting-to-the-point-in-OpenGL-ES

Depois de procurar bastante, parece que é mais simples utilizar o Quartz:

http://www.iphonedevsdk.com/forum/iphone-sdk-development/11721-manipulating-image-data.html

http://discussions.apple.com/thread.jspa?threadID=1505532

http://developer.apple.com/iphone/library/documentation/Cocoa/Conceptual/LoadingResources/ImageSoundResources/ImageSoundResources.html

http://developer.apple.com/mac/library/DOCUMENTATION/GraphicsImaging/Reference/CGImage/Reference/reference.html

Hello Universe!

2010/01/18

Não consegui seguir o exemplo em http://www.iphonesdkarticles.com/2008/07/first-iphone-application.html. A aplicação compila, executa, mas nada acontece ao se pressionar o botão. Acabei por encontrar um outro caminho para realizar a mesma aplicação. Seguirei em parte o roteiro do exemplo original, com algumas simplificações.

Com o iPhone SDK e o XCode instalados, basta seguir as instruções abaixo. Este texto ainda não está concluído e  será elaborado em etapas.

Encontrando a primeira ferramenta:  XCode

Demorei um pouco para encontrar o XCode. As ferramentas de desenvolvimento não ficam junto com as demais aplicações. Tudo que está relacionado com o desenvolvimento fica em /Developer. O aplicativo pode estar em outra pasta, dependendo dos parâmetros da instalação no seu computador.

O XCode instalado no diretório /Developer/Applications
Local de instalação do XCode

A aplicação “Hello Universe”

O aplicação HelloUniverse permite informar nome e sobrenome e apertar um botão para ver uma mensagem. A mensagem apresenta uma saudação parecida com “Marco Mangan says Hello Universe!”. Com este exemplo são apresentadas  três ferramentas (XCode, Interface Builder e iPhone Simulator) e também a utilização de controles e de respostas a eventos.

A tela da aplicação será assim:

Exemplo de dados de entrada e mensagem correspondente.
A aplicação Hello Universe

Criando um novo projeto no XCode

Nas primeiras execuções do XCode, fechei a janela de diálogo inicial Welcome to XCode. Um dia voltarei para estudar a janela 🙂 Selecione o menu File -> New Project… -> IPhone OS Application, escolha o modelo View-based Application e aperte o botão Choose…

Os modelos de projeto do XCode + iPhone SDK
O modelo utilizado: aplicação com base em visão

Selecione uma pasta e salve o projeto com o nome HelloUniverse. Diversos arquivos e referências são gerados de acordo com o modelo:

A aplicação conta com duas classes: um delegador de aplicação (HelloUniverseAppDelegate) e um controlador de visão  (HelloUniverseViewControler). Foi gerado também um recurso que representa a visão da interface gráfica (HelloUniverseViewController.xib em Resources). Cada classe apresenta dois arquivos: o cabeçalho (.h) e a implementação (.m).

Construindo interfaces com a segunda ferramenta: Interface Builder

O construtor de interfaces (interface builder) permite editar os recursos que representam as visões da aplicação. Clique no arquivo HelloUniverseViewController.xib para ativar o construtor de interfaces. O exemplo tem uma única visão. Para editar os atributos da visão ou de seus componentes, use o inspetor de atributos no menu Tools -> Attributes Inspector. Por exemplo, troque a cor de fundo da visão.

Agregando componentes à visão

Para encontrar os  componentes disponíveis, consulte a biblioteca, no menu Tools -> Library. Os componentes que utilizaremos estão em Cocoa Touch – Inputs and Values.

Os quatro componentes da visão são: dois campos de texto (textefields), um botão arredondado (rounded button) e um rótulo (label). Para um acabamento altere as dimensões e posição dos controles e os valores de algumas de suas propriedades. Para os campos de texto, foram alterados os marcadores (place holders), a opção de remover o texto quando a edição inicia (clear when editing begins) e a resposta ao pressionamento da tecla Entra (Return). Então, os atributos ficam, respectivamente, placeholders: First Name e Last Name, Clear When Editing Begins: desmarcado e  Return Key fica em Next:

Altere o título (Title) do botão para Click Me. Aumente a largura do rótulo para poder ler a mensagem e apague o texto (Text). Para simular a interface use a opção File -> Simulate Interface.

Criando um controlador de visão no XCode

Edite o código fonte  do controlador de interface e acrescente atributos e métodos:

//  HelloUniverseViewController.h
#import 

@interface HelloUniverseViewController : UIViewController {
	IBOutlet UITextField *txtFirstName;
	IBOutlet UITextField *txtLastName;
	IBOutlet UILabel *lblMessage;
}

- (IBAction) btnClickMe_Clicked:(id)sender;

@end

Para implementar o controlador, basta alterar o método de desalocação e acrescentar o método que responderá ao pressionamento do botão arredondado. Altere apenas o dealloc, que deve liberar os recursos que foram alocados pela implementação:

//  HelloUniverseViewController.m
#import "HelloUniverseViewController.h"

@implementation HelloUniverseViewController

// deixe o código daqui para cima como está...

- (void)dealloc {
	[txtFirstName release];
	[txtLastName release];
	[lblMessage release];
	[super dealloc];
}

- (IBAction) btnClickMe_Clicked:(id)sender {

	NSString *FirstName = txtFirstName.text;
	NSString *LastName = txtLastName.text;
	NSString *Message = nil;

	if([FirstName length] == 0 && [LastName length] == 0)
		Message = [[NSString alloc] initWithFormat:@"Anonymous says Hello Universe!!!"];
	else if ([FirstName length] > 0 && [LastName length] ==0)
		Message = [[NSString alloc] initWithFormat:@"%@ says Hello Universe", FirstName];
	else if ([FirstName length] == 0 && [LastName length] > 0)
		Message = [[NSString alloc] initWithFormat:@"%@ says Hello Universe", LastName];
	else
		Message = [[NSString alloc] initWithFormat:@"%@ %@ says Hello Universe", FirstName, LastName];

	lblMessage.text = Message;

	[Message release];
}	

@end

Compile o código e inspecione as tomadas do construtor de interfaces (interface builder outlets) do proprietário (file’s owner) e do atendente (first responder) no construtor de interface.


Conectando variáveis de instância aos objetos na visão

Para realizar as conexões, basta utilizar o construtor de interface e realizar as conexões pelo inspetor de conexões (Tools -> Connections Inspector):

Conectando as tomadas do controlador com os componentes da visão.

Respondendo a eventos

Conecte o último elemento, ligando o evento de liberar toque interno do botão com o novo método do atendente.

O evento do botão conectado com o método do controlador.

Salve os arquivos e execute a aplicação no simulador.

Conclusão

As principais diferenças deste roteiro em relação ao exemplo original são a omissão de detalhes e o uso de um modelo de projeto que já possui uma visão associada. Após a conclusão deste exemplo, fica mais fácil seguir roteiros mais complexos:  MoveMe.

Programação no iPhone/iPod

2010/01/16

Resolvi tentar desenvolver uma aplicação para o iPod, apenas para conhecer a plataforma.

O ambiente de desenvolvimento tem 3 GB, vai levar três horas para transferir, mas parece valer a pena.

Tentarei aproveitar para seguir o OpenUP, também para aprender mais sobre essa versão minimalista do UP.

OpenUP

http://epf.eclipse.org/wikis/openup/

http://www.eclipse.org/epf/

Apple Developer Connection

http://developer.apple.com/

http://developer.apple.com/iphone/index.action#downloads

Exemplos

http://www.iphonesdkarticles.com/2008/07/first-iphone-application.html

http://developer.apple.com/iphone/library/navigation/index.html?section=Resource+Types&topic=Sample+Code

Desenho com o Quartz

http://developer.apple.com/iphone/library/documentation/GraphicsImaging/Conceptual/drawingwithquartz2d/dq_paths/dq_paths.html#//apple_ref/doc/uid/TP30001066-CH211-TPXREF106

Certificação Java

2010/01/15

O conteúdo do exame mais simples da certificação Java é útil para quem quer iniciar a carreira de programação ou para quem precisa revisar conteúdos básicos.

Exame de Associado Certificado Sun para a Plataforma Java, Standard Edition, Versão 1.0 (CX-310-019)

O exame parece simples, exceto pela duas últimas seções sobre tecnologias cliente e servidor.

O material de apoio poderia incluir o endereço Web de cada referência. Segue o que achei no Google: