Curs Cocoa ::: AppDot ::: Part 1

Avui comencem a programar directament amb Cocoa sobre MacOSX. Això vol dir que començarem a fer aplicacions amb interfície gràfica i mirarem d'entendre com es relacionen els components de la interfície gràfica i el codi de desenvolupament. A partir d'ara el curs se centrarà en el desenvolupament de petites aplicacions per presentar el funcionament de diferents tecnologies.

En aquesta primera aplicació tractarem el funcionament amb l'Interface Builder on presentarem la majoria de les formes amb que s'hi pot treballar:
- El paradigma Target/Action
- Els IBOutlets i les IBActions
- El Key Value Coding (KVC)
- El Key Value Observing (KVO)
- Els Bindings
- etc

En aquesta primera part que consta de dos trossos veurem com dibuixar un punt en una vista d'una finestra, i com capturar els esdeveniments del ratolí per poder canviar la situació del punt.

Podeu trobar aquesta nova classe en la plana destinada als vídeos del curs. Allà hi podeu trobar els vídeos, el projecte que s'ha desenvolupat i l'enllaç a aquest tema del fòrum.
- http://public.poble.cat/MacOSX/XCode/#cocoa-appdot-cap1

Xin  sep  29 maig 2008 21:21

He adaptado parte de este tutorial para que funcione en el iPod Touch/iPhone. Creo que lo he hecho correctamente, pero corregidme si me he equivocado en algo! Por ejemplo, he tenido que hacer un cuadrado en vez de un punto ya que no se puede utilizar NSBezierPath...

La forma de montar el proyecto es elegir "nuevo proyecto", aplicación para iPhone y entonces elegir "View-Based Application"

Aquí en vez del archivo .nib, se utiliza un archivo .xib, y al hacer doble click veremos que se abre Interface Builder con opciones muy similares.

Arrastramos un view, que en este caso es una instancia de UIView y le asignamos la clase DotView. Podemos redimensionar el view si quieremos. Ahora pasemos al código.

En "DotView.h"

#import <UIKit/UIKit.h>

// En CocoaTouch es UIView en vez de NSView
@interface DotView : UIView {
CGPoint center;
CGFloat radius;
}

@end

y en "DotView.m":

#import "DotView.h"


@implementation DotView

// ya que el view se va a montar por código, debemos utilizar initWithCoder en vez de initWithFrame
- (id)initWithCoder:(NSCoder *)coder {
if (self = [super initWithCoder:coder]) {
center = CGPointMake(100.0,100.0);
radius = 50.0;
}
return self;
}


- (void)drawRect:(CGRect)rect {
// Cambiar el color de la vista, azul porque el fondo de la apliciación por defecto es blanco
CGRect bounds = [self bounds];
[[UIColor blueColor] set];
UIRectFill(bounds);

// Crear un cuadrado, rojo para contraste
CGRect dotRect= CGRectMake(center.x - radius, center.y - radius, 2*radius, 2*radius);
[[UIColor redColor] set];
UIRectFill(dotRect);
}


// TOUCH

// Detectar un punto en pantalla
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touch = [touches anyObject];
center = [touch locationInView:self];
[self setNeedsDisplay];
}

// Redibujar el cuadrado al arrastrar
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touch = touches.anyObject;
center = [touch locationInView:self];
[self setNeedsDisplay];
}


- (void)dealloc {
[super dealloc];
}


@end

Bueno, espero que se interesante para alguien. Un saludo!

 sep  12 juny 2008 13:26

Bien, yo mismo me corrijo, la función de arrastre queda más "recogida" así:

// Redibujar el cuadrado al arrastrar
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
[self touchesBegan:touches withEvent:event];
}

 sep  12 juny 2008 13:54

Hola Jaime,

Si vols ficar codi als fòrums, només et cal escriure un mínim de quatre signes "====" la línia abans i després del codi. Potser ficar-n'hi 30 si vols. Però no hi fiquis cap espai al principi ni al final. Així:

====================================
// Redibujar el cuadrado al arrastrar
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
[self touchesBegan:touches withEvent:event];
}
====================================

// Redibujar el cuadrado al arrastrar
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
[self touchesBegan:touches withEvent:event];
}

Xin  sep  12 juny 2008 18:53

Jaime, veig que t'has creat un usuari, pensa a identificar-t'hi sinó no sortirà el teu usuari. :)

Per cert, potser ens podries fer un ScreenCast amb l'emulador de l'iPhone. Pels que no tenim màquines Intel ens aniria molt bé veure que tal funciona. :-D

I per últim, intenta utilitzar el català, ja que aquests fòrums estan destinats a gent catalano-parlant i no tots entenen l'espanyol. Si vas al traductor de la Generalitat el tradueix els textos molt correctament:
- http://traductor.gencat.net/

Aquesta és la traducció del teix d'en Jaime:

------------------------------------------
He adaptat part d'aquest tutorial perquè funcioni en el iPod Touch/iPhone. Crec que ho he fet correctament, però corregiu-me si m'he equivocat en alguna cosa! Per exemple, he hagut de fer un quadrat en comptes d'un punt ja que no es pot utilitzar NSBezierPath...

La forma de muntar el projecte és elegir "nou projecte", aplicació per a iPhone i llavors elegir "View-Based Application"

Aquí en comptes de l'arxiu|arxivament .nib, s'utilitza un arxiu|arxivament .xib, i en fer doble click veurem que s'obre Interface Builder amb opcions molt similars.

Arrosseguem un view, que en aquest cas és una instància de UIView i li assignem la classe DotView. Podem redimensionar el view si volguéssim. Ara passem al codi.
------------------------------------------

Xin  sep  12 juny 2008 19:04

Ah! No sabia com editar el codi, la pròxima vegada ho faré millor :D .
Sobre el Catalá, el problema es que no n'he estudiat desde els dotze anys, y encara que em sembla que em defenso parlant, l'escriure s'em fa molt dificil. No conexía la web de traducciò, potser ara ho puc intentar.

Y sobre el podcast, m'ho pensaré,la veritat es que no n'he fet mai, però bé, sempre hi ha una primera vegada per tot, no?

Jaime  sep  12 juny 2008 21:44

propera...

Jaime  sep  12 juny 2008 21:45

Així pots practicar... ;)

I si ens fas una introducció a la programació amb l'iPhone, aniria de conya. Sobretot els temes específics de la seva interfície. Ja he vist que hi ha els mètodes touchBegan i touchMoved.

O les diferències en quan a controls d'interfície a l'hora de treballar amb l'iPhone, la seva mida, com s'ha d'organitzar la informació en una pantalla tant petita, ...

Bé, si com diuen no hi haurà versió d'Snow Leopard per a PowerPC, potser hauré de comprar-me un Intel, però si puc ho evitaré tant com vulgui, que aquests aparells valen calés. :(

Xin  sep  13 juny 2008 00:19

Bé, m'ho pensaré. El problema es que penso que no tinc els coneixements suficients per parlar-ne amb rigor, però si finalment em decideixo, et demanaria ajuda amb el screencast ja que no se quines eines em caldrien ni como utilitzar-les.

Mentrestant e trobat una web on expliquen com utilitzar l'emulador amb PPC, potser t'interessa. Només ves amb compte i estudia-t'ho bé perquè semble un programa molt poderós i no sé quins efectes podria tenir.
La plana es:

http://www.iphoneatlas.com/2008/03/10/surprise-iphone-sdk-also-works-on-powerpc-macs/

Jaime  sep  13 juny 2008 12:56

Ei, gràcies. Ara hi faig un cop d'ull. :-D

Xin  sep  13 juny 2008 17:48

Bé, sembla que ara puc crear aplicacions per l'iPhone, però no em deixa simular-les. :[ Em diu: "No architectures to compile for (ARCHS=ppc, VALID_ARCHS=i386)".

Què hi farem... :(

Xin  sep  13 juny 2008 19:08

:D :D :D

Ja m'ha sortit. Fent servir una mica el Google, i llegint en una pàgina xinesa. Voilà.
- http://www.elesson.com.cn/archiver/?tid-625.html

Aquí us deixo una captura perquè veieu que ja se ficar un botó que hi digui "HOLA": :)

imatge

Xin  sep  13 juny 2008 19:36

Selecciona'l abans d'enviar el commentari