Nouveau né cherchant le sein

vico92vico92 Membre
21:13 modifié dans API UIKit #1
Bonjour à  tous,

Je suis nouveau, et je suis paumé !

J'aurais besoin d'un petit coup de pouce svp car je suis en train de me noyer dans une multitude de documents qui parlent de manière soit trop générale, soit avec des exemples trop précis...
Connaissez-vous un bon tuto qui permet d'apprendre, étape par étape,
à  faire une application d'abord très basique, et qui devient de plus en plus complexe au fur et à  mesure ?

petite précision:

J'ai souscrit au programme Apple Dev, croyant qu'ils me prendraient par la main pour développer mon app, mais je me suis trompé, je suis tout seul et rien de plus n'est donné que la documentation déjà  disponible avant ma souscription. Soit, je peux à  présent debugger sur mon Iphone.

Je me suis donc mangé TOUTE la doc disponible sur le portail d'Apple, j'ai fait plusieurs petits tutos et lu le fameux "iPhone Open Application Development, 2nd Edition by Jonathan Zdziarski" mais je suis toujours incapable de faire tout seul un simple carré qui suivrait mon doigt, par exemple (un MoveMe simplifié en fait).

(Alors oui, l'application MoveMe fonctionne car j'ai fait comme Apple m'a dit, j'ai copié-collé leurs codes aux bons endroits)


Voilà , désolé pour le speech de 2 pages et merci à  ceux qui peuvent m'aider :)

Vico (oui...comme les chips)

Réponses

  • Philippe49Philippe49 Membre
    avril 2009 modifié #2
    Pour ton appli du carré :

    1) Créer un projet du type View-Based Application, par exemple, on v la nommer Vico
    2) Tu disposes d'une classe VicoAppDelegate et d'une classe VicoViewController.

    3) Build and Go ... cela marche déjà 

    4) Ajoute une classe VicoView héritant de UIView

    5) Ouvre le xib  VicoViewController.xib, sélectionne la vue, ouvre le panel Identity , et mets VicoView pour la classe de cette vue.

    6) code la méthode drawRect de l'UIView

    - (void)drawRect:(CGRect)rect {<br />	CGContextRef context=UIGraphicsGetCurrentContext();<br />	CGRect r;<br />	r.origin.x=10.;	r.origin.y=30.;<br />	r.size.width=100.;	r.size.height=130.;	<br />	CGContextSetRGBFillColor(context, 1., 0., 0., 1.);<br />	CGContextFillRect (context,r);<br />}<br />
    


    7) Build and Go ==> un beau rectangle rouge

    @+ pour la gestion des touches
  • GreensourceGreensource Membre
    21:13 modifié #3
    Salut!
    C'est marrant ça de commencer direct par souscrire au programme d'Apple! Mais en même temps je me retiens de le faire aussi, j'aurais bien envie de faire mes tests sur mon iPod.

    Bon alors pour t'aider un peu. Déjà  ça pourrais être pas mal d'en savoir un peu plus sur toi, ce que tu connais en programmation...
    En tout cas, et d'autre te dirons la même chose, il peut-être intéressant de connaà®tre la programmation MacOSX avant de se lancé sur iPhone OS. Pour ça, le très bon "Programmation Cocoa sous MacOSX" d'Aaron Hillgass est super. Tu as un lien Amazon sur la page d'accueil du forum.

    Mais comme tu as déjà  souscrit au programme Apple je te soupçonne de vouloir en découdre directement avec ton iPhone  :)
    Là  je pense qu'il est intéressant de commencer avec les "Gettings started documents" d'Apple, ce que tu dis avoir déjà  fait.
    Sinon ton bouquin je ne connais pas, mais si il parait que pour l'instant il n'y a pas vraiment de référence pour le dev iPhone OS.
    Bon sinon je vais te filez mes bookmarks sachant que je ne les aient pas tous parcourus:

    Mais il faut vraiment que tu fasses les tutos, pas juste les parcourirs. Parce que je suis étonné qu'avec tout ce que tu dis avoir fait, tu soit si perdu.

    Bon courage et bienvenue! :adios!:
  • Philippe49Philippe49 Membre
    21:13 modifié #4
    L'exemple dans le iPhone Programming Guide est également simple d'accès.
  • Philippe49Philippe49 Membre
    21:13 modifié #5
    8) on passe le rectangle à  dessiner en property de la VicoView
    <br />@interface VicoView : UIView {<br />	CGRect rectToDraw;<br />}<br />@property 	CGRect rectToDraw;<br />@end
    

    @implementation VicoView<br /><br />@synthesize rectToDraw;<br /><br /><br /><br />- (void)drawRect:(CGRect)rect {<br />	CGContextRef context=UIGraphicsGetCurrentContext();<br />//	CGRect r;<br />//	r.origin.x=10.;	r.origin.y=30.;<br />//	r.size.width=100.;	r.size.height=130.;	<br />	<br />	CGContextSetRGBFillColor(context, 1., 0., 0., 1.);<br />	CGContextFillRect (context,rectToDraw);<br />}<br /><br /><br />- (void)dealloc {<br />&nbsp; &nbsp; [super dealloc];<br />}<br /><br /><br />@end<br />
    





    9) Dans la méthode viewDidLoad qui est appelé lors du désarchivage du xib VicoViewController.xib, on définit la taille du rectangle initial à  dessiner dans la vue.
    <br />#import &quot;VicoViewController.h&quot;<br />#import &quot;VicoView.h&quot;<br /><br />@implementation VicoViewController<br />// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.<br />- (void)viewDidLoad {<br />	[(VicoView*)(self.view) setRectToDraw:CGRectMake(10.,30.,100.,100.)];<br />&nbsp; &nbsp; [super viewDidLoad];<br />}
    



    10) Build and Run
  • Philippe49Philippe49 Membre
    21:13 modifié #6
    Essayer la localisation du touch

    11) Mettre dans VicoViewController la méthode suivante :
    - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {<br />	UITouch * touch=[touches anyObject];<br />	CGPoint touchLocation=[touch locationInView:self.view];<br />	NSLog(NSStringFromCGPoint(touchLocation));<br />}
    


    12) Build and run et faire les tests par rapport au rectangle rouge présent dans la vue.
  • Philippe49Philippe49 Membre
    21:13 modifié #7
    13) Définir une variable d'instance touchLocation dans le viewController
    <br />#import &lt;UIKit/UIKit.h&gt;<br /><br />@interface VicoViewController : UIViewController {<br />	CGPoint touchLocation;<br />}<br /><br />@end
    


    14) Repérer le rectangle à  dessiner dans touchesBegan et touchesMoved

    - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {<br />	UITouch * touch=[touches anyObject];<br />	touchLocation=[touch locationInView:self.view];<br />	NSLog(NSStringFromCGPoint(touchLocation));<br />}<br /><br />- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {<br />	UITouch * touch=[touches anyObject];<br />	CGPoint location=[touch locationInView:self.view];<br />	CGSize size;<br />	size.width=location.x-touchLocation.x;<br />	size.height=location.y-touchLocation.y;<br />	<br />	CGRect rect;<br />	rect.origin=touchLocation;<br />	rect.size=size;<br />	<br />	[(VicoView*)(self.view) setRectToDraw:rect];<br />	[self.view setNeedsDisplay]; 	<br />}<br /><br />- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {<br />	NSLog(@&quot;touch ended&quot;);<br />}
    


    15) Build and Run .. That's all
  • vico92vico92 Membre
    21:13 modifié #8
    Merci à  vous pour ces réponses, Philippe ça me fait plaisir d'avoir un tuto taillé sur mesure, c trop sympa !!
    Je met le nez dedans et je vous tiens au courant, si je pige pas cette fois, c'est que je dois vraiment pas être fait pour ça :)

    Merci les gars,
    Vico


  • GreensourceGreensource Membre
    21:13 modifié #9
    Mais si si, c'est fait pour tout le monde Cocoa! Un bol tous les matins ya rien de mieux!

    poumboudoumboudoum.... *se dirige tranquilement vers la petite sortie au fond* :P
  • schlumschlum Membre
    21:13 modifié #10
    Dis Philippe, t'as pas l'impression de lui faire son application là  ?  :)

    C'est pas comme ça qu'il va progresser  :P
  • Philippe49Philippe49 Membre
    21:13 modifié #11
    A lui de faire ce qu'il en veut.  ::)
    Je vais mettre tout ça en mini-tuto.
  • vico92vico92 Membre
    21:13 modifié #12
    Salut Philippe,

    Ecoute je viens d'essayer de suivre tes instructions, j'ai bien le rectangle rouge mais pas le touch :(
    Le code du touch Began, TouchMoved etc. tu le colle dans quelle page ? VicoViewController.m, non ?

    Et tu vx bien m'expliquer à  quoi servent les étapes 8 et 9 ?
    (le rectangle est déjà  créé à  l'étape 7 donc je m'interroge)

    Merci bcp Philippe :)
    Vico
  • AliGatorAliGator Membre, Modérateur
    21:13 modifié #13
    1) Ne pas oublier de cocher "User Interaction Enabled" sur ta vue dans IB (ou de mettre [tt]self.view.userInteractionEnabled=YES;[/tt] par exemple dans le viewDidLoad de ton ViewController ou, ce qui est encore équivalent, à  mettre [tt]self.userInteractionEnabled=YES;[/tt] dans le init de ta View. Sans cette propriété userInteractionEnabled cochée/passée à  YES, les événements de touch (touchBegan, ...) ne seront pas reçus par la vue

    2) Les étapes 8 et 9 du tuto de Philippe ne servent à  rien dans l'immédiat en soi, en effet tu as déjà  ton rectangle. Leur but est de sortir le CGRect de la méthode de dessin drawRect pour pouvoir accéder à  ce CGRect de l'extérieur, d'en faire une variable d'instance pour pouvoir la modifier un peu de n'importe où au sein de ta UIView. Ces étapes sont nécessaires à  ce qui va suivre, puisque les étapes suivantes consisteront à  modifier la position (et la taille ?) du rectangle à  dessiner, chose qui devra être fait dans les méthodes touchBegan, touchMoved, etc., alors que le dessin de ce rectangle, lui, doit rester dans drawRect.

    Comme on doit accéder au rectangle qu'on veut dessiner à  la fois dans touchBegan/touchMoved/... pour en définir sa position (et sa taille ?), mais aussi dans drawRect pour justement le dessiner réellement à  l'écran, il faut donc sortir cette variable CGRect pour la passer en variable d'instance, but de ces étapes 8 et 9.
  • phielphiel Membre
    21:13 modifié #14
    dans 1238944231:

    En effet j'ai l'impression que ça va être pas mal (mais je n'ai suivi que le premier cours et fait les premiers exo), je suis  impatient de voir la suite  ;)


    Il y a également les tuto sur www.cococast.com pour cocoa et objective-C en général.
Connectez-vous ou Inscrivez-vous pour répondre.