Origine

muqaddarmuqaddar Administrateur
22:39 modifié dans API AppKit #1
Salut,

J'écris ça :

<br />		viewRect.origin.x = 135;<br />		viewRect.origin.y = 24;		<br />		viewRect.size = NSMakeSize(220, 130);<br />


Or mon rect se dessine en origine 0,0. Qu'ai-je oublié ?
«1

Réponses

  • ClicCoolClicCool Membre
    22:39 modifié #2
    Je sais pas,

    Mais pourquoi t'écris pas directement NSMakeRect (x,y,w,h) ?
  • muqaddarmuqaddar Administrateur
    22:39 modifié #3
    NSMakeSize prend que la width et la height... ds la doc.
  • 22:39 modifié #4
    ClicCool a marqué NSMakeRect, pas NSMakeSize....
  • muqaddarmuqaddar Administrateur
    mars 2005 modifié #5
    Je ne sais pas lire. Sorry.

    sinon, ça marche pas, mon rect est tjs en (0,0)...

    viewRect = NSMakeRect(135, 24, 220, 130);
    monInstance = [[maView alloc] initWithFrame: viewRect];
  • mpergandmpergand Membre
    22:39 modifié #6
    <br />viewRect = NSMakeRect(135, 24, 220, 130);<br />monInstance = [[maView alloc] initWithFrame: viewRect];&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
    


    Oui et après tu fais quoi ?
  • muqaddarmuqaddar Administrateur
    22:39 modifié #7
    Salut mpergand.

    Après, ds ma classe Vue :

    - (id)initWithFrame:(NSRect)frame {<br /><br />&nbsp; &nbsp; self = [super initWithFrame:frame];<br />&nbsp; &nbsp; if (self) {<br />&nbsp; &nbsp; }<br />	<br />&nbsp; &nbsp; }<br />&nbsp; &nbsp; return self;<br />}<br /><br />
    


    + ma méthode drawRect.

    Que manque t-il ?
    Apparemment, la taille du rect demandé marche mais pas la position...

  • fouffouf Membre
    22:39 modifié #8
    Peut-etre s'agit-il d'un pb de conversion de coordonnées ??
  • mpergandmpergand Membre
    22:39 modifié #9
    Non, ta vue tu la mets où, dans quelle fenêtre ?
    Tu fais un addSubView quelque part ?
  • muqaddarmuqaddar Administrateur
    22:39 modifié #10
    Ma vue est dans une fenêtre customizée (avec une custom class).
    Pkoi un addSubView ?

    Encore une fois, mon rect s'affiche à  la bonne taille, simplement, la position n'est pas bonne. :)
  • cbrandtcbrandt Membre
    22:39 modifié #11
    si tu ne mets pas de addsubview, ta view ne sera jamais visible à  l'écran... m'est avis que tu dois avoir une autre vue crée avec IB, qui elle s'affiche...
  • mpergandmpergand Membre
    22:39 modifié #12
    dans 1110376179:

    si tu ne mets pas de addsubview, ta view ne sera jamais visible à  l'écran... m'est avis que tu dois avoir une autre vue crée avec IB, qui elle s'affiche...

    C'est ce que je pressens depuis le début  ;D
  • muqaddarmuqaddar Administrateur
    mars 2005 modifié #13
    Je comprends pas. :(
    A qui dois-je faire un addSubView de ma vue personnelle créée ?

    Parce que :
    "Adds aView to the receiver?s subviews so it?s displayed above its siblings", est pas clair pour moi.

    Par ailleurs, je persiste et signe en disant que je n'ai pas fait de vue ds IB...
  • fouffouf Membre
    22:39 modifié #14
    <br />MaSuperVue *laVueEnQuestion = [[MaSuperVue alloc]initWithFrame:rect];<br />[[mainWindow contentView] addSubview: laVueEnQuestion];
    

    Je ne sais pas s'il faut convertir le rectangle. Je ne pense pas, mais bon ...
  • cbrandtcbrandt Membre
    22:39 modifié #15
    tu fais un addsubview sur la contentview de la fenêtre:
    <br />[[maFenetre contentView] addSubview: maView];<br />
    

  • muqaddarmuqaddar Administrateur
    22:39 modifié #16
    Oui, ce que j'ai fait ! ;)

    Mais ça change rien... ma vue s'affichait déjà ... et là , le compilo bronche pas, mais le résultat est le même avec ou sans cette ligne !
  • fouffouf Membre
    22:39 modifié #17
    grilled cbrandt  :o
  • fouffouf Membre
    22:39 modifié #18
    2 solutions : la fenêtre est trop petite. Agrandit-la.

    2 eme passe nous le code.
  • mpergandmpergand Membre
    mars 2005 modifié #19
    Ah! aà¯e aà¯e ! les trucs tordus d'oxitan  :) ;)

    Résumons, tu as une vue dans une fenetre ( défini dans IB )
    Tu veux modifier le taille et la position de cette vue, oui ?

    <br />IBOutlet id maVue;<br /><br />[maVue setFrameOrigin:NSMakePoint(10,10)];<br />[maVue setFrameSize:NSMakeSize(10,150)];<br />[maVue setNeedDisplay:YES];<br />
    


    Que cette vue soit une sous classe ou pas ne change rien

    Attention, l'origine (0,0) par défaut est en bas à  gauche et est relative à  la superview.
  • muqaddarmuqaddar Administrateur
    mars 2005 modifié #20
    dans 1110385709:

    Ah! aà¯e aà¯e ! les trucs tordus d'oxitan  :) ;)


    T'as raison, j'ai le don... :(  :)beta:

    Je résume, parce que c'est plus compliqué...

    - J'ai un controller qui instancie ma vue ds son -(id)init
    - Ma customView, sous-classe de NSView.
    - Une autre classe qui custom ma mainWindow pour la rendre transparente avec :
    - (id)initWithContentRect:(NSRect)contentRect styleMask:(unsigned int)aStyle backing:(NSBackingStoreType)bufferingType defer:(BOOL)flag
    


    Dans IB, j'ai une fenêtre mainWindow avec un outlet ds le controller. dans IB, je n'ai pas d'instance de ma vue ! Je l'instancie par le code.

    Pour l'instancier, je fais dans mon controlleur :


    maView = [[MyView alloc] initWithFrame: viewRect];<br />		[maView setFrameOrigin:NSMakePoint(135, 24)];<br />		[[mainWindow contentView] addSubview: maView];
    


    Je répète : que j'écrive les 2 dernières lignes ou pas... l'image appelée dans ma classe MyView s'affiche en (0,0).

    Voilà , tu peux me  :o

    En fait, on dirait qu'il considère ma vue comme ma fenêtre, qu'il ne se soucie pas de la taille de la vue mais de la fenêtre.
  • muqaddarmuqaddar Administrateur
    22:39 modifié #21
    J'ai p-e trouvé une parade qd je place mon image ds le rect :

    ;Il était en NSZeroPoint... reste que ça n&#39;est pas logique.
    - (void)drawRect:(NSRect)rect<br />{<br />	[img compositeToPoint:NSMakePoint(135,24) operation:NSCompositeSourceOver];<br />}
    
  • mpergandmpergand Membre
    22:39 modifié #22
    dans 1110387908:


    maView = [[MyView alloc] initWithFrame: viewRect];<br />		[maView setFrameOrigin:NSMakePoint(135, 24)];<br />		[[mainWindow contentView] addSubview: maView];
    


    Je répète : que j'écrive les 2 dernières lignes ou pas... l'image appelée dans ma classe MyView s'affiche en (0,0).



    Peux-tu m'expliquer par quelle miracle MyView peut s'afficher, sans l'avoir au préalable inséré dans la fenêtre :o

    Si je suis bien, c'est ton image qui s'affiche pas la vue, pour preuve fait un fillRect, pour voir ...
  • muqaddarmuqaddar Administrateur
    22:39 modifié #23
    Le rect s'affiche, je le voit à  sa taille, mais l'image n'est pas dedans. Pourquoi ? L'image je la met bien dans mon drawRect pourtant.
  • mpergandmpergand Membre
    22:39 modifié #24
    Ce que tu veux faire ressemble beaucoup à  mon exemple TransparentWindow

    Source de drawRect:
    <br />public void drawRect(NSRect rect)<br />		{<br />		NSColor color=NSColor.clearColor();<br />		color.set();<br />		<br />			// draw image<br />		circle.compositeToPoint( new NSPoint(0,0),NSImage.CompositeSourceOver);<br />		}<br />
    


    A mon avis le problème est ailleurs  ???
  • muqaddarmuqaddar Administrateur
    22:39 modifié #25
    J'ai viré l'affichage des images de drawRect et l'ai mis ds une méthode à  part, je parle de :

    :(" alt=";Et ça fait le même effet !!! Donc drawRect n&#39;est pas appelé ! On dirait que je suis ds une sous-classe de NSObject et pas NSView ! :(" />
  • mpergandmpergand Membre
    22:39 modifié #26
    dans 1110397094:

    Et ça fait le même effet !!! Donc drawRect n'est pas appelé ! On dirait que je suis ds une sous-classe de NSObject et pas NSView ! :(


    oui c'est bien ce que je pensais  :)

    Tu dois être proche du but maintenant ;)
  • muqaddarmuqaddar Administrateur
    22:39 modifié #27
    Merci de ton soutien ;)

    Je suis dans la même classe que l'autre jour... tu sais, celle où il fallait forcer l'appel à  drawRect... Tu m'avais filé : [self drawRect: [self bounds]];
    Mais en fait, ça l'appelle pas non plus. :)
  • mpergandmpergand Membre
    22:39 modifié #28
    dans 1110398382:

    Merci de ton soutien ;)

    Je suis dans la même classe que l'autre jour... tu sais, celle où il fallait forcer l'appel à  drawRect... Tu m'avais filé : [self drawRect: [self bounds]];
    Mais en fait, ça l'appelle pas non plus. :)


    Laisse tomber cette bidouille !

    Et puis je ne sais plus quoi dire, je ne comprends pas ce que tu peux faire pour que ça marche  pas  ;D

    Je crois que si tu nous files pas le projet, on va pas s'en sortir  ???
  • Eddy58Eddy58 Membre
    22:39 modifié #29
    dans 1110400587:

    dans 1110398382:

    Je suis dans la même classe que l'autre jour... tu sais, celle où il fallait forcer l'appel à  drawRect... Tu m'avais filé : [self drawRect: [self bounds]];
    Mais en fait, ça l'appelle pas non plus. :)


    Laisse tomber cette bidouille !

    En effet, il ne faut jamais appeler la méthode drawRect directement....Les méthodes de type display sont la pour ça et préparent le terrain avant d'exécuter le code de tracé dans la méthode drawRect... :)
  • muqaddarmuqaddar Administrateur
    22:39 modifié #30
    Bon, j'ai tout changé.
    Finalement j'ai une simple NSImageView ds une classe dérivée de NSObject...

    J'aimerai comprendre une chose.

    - Lorsque j'affiche une image dans mon ImageView depuis le awakeFromNib de la classe, je n'ai aucun pb, elle s'affiche.

    - Si j'appelle depuis la même classe, depuis le awakefromnib, une méthode qui affiche l'image, elle s'affiche aussi.

    - Si j'appelle depuis mon controlleur la même méthode, l'image ne s'affiche pas ds le NSImageView. Or, la mécanique tourne :
    2005-03-10 11:26:07.936 soft[29394] Image : NSImage 0x34df80 Name=nono132 Size={150, 150} Reps=(
        NSBitmapImageRep 0x3b4830 Size={150, 150} ColorSpace=NSCalibratedRGBColorSpace BPS=8 Pixels=150x150 Alpha=YES
    )

    C'est fou, ça ne marche que si j'appelle la méthode depuis le awakeFromNib ! On peut bien charger une image à  n'importe quel instant non ?!
  • ChachaChacha Membre
    22:39 modifié #31
    dans 1110450452:

    - Si j'appelle depuis mon controlleur la même méthode, l'image ne s'affiche pas ds le NSImageView. Or, la mécanique tourne :
    2005-03-10 11:26:07.936 soft[29394] Image : NSImage 0x34df80 Name=nono132 Size={150, 150} Reps=(
        NSBitmapImageRep 0x3b4830 Size={150, 150} ColorSpace=NSCalibratedRGBColorSpace BPS=8 Pixels=150x150 Alpha=YES
    )

    C'est fou, ça ne marche que si j'appelle la méthode depuis le awakeFromNib ! On peut bien charger une image à  n'importe quel instant non ?!



    Quand tu dis que ton contrôlleur appelle la méthode, c'est avant ou après que le awakefromnib a été appelé ? Car dans le awakefromnib, tu es sûr que tes IBOutlet ont été connectées, mais sinon...
Connectez-vous ou Inscrivez-vous pour répondre.