[Résolu] Adapter une NSScrollview lorsque sa NSView change

berfisberfis Membre
mai 2013 modifié dans API AppKit #1

Bonsoir,


 


Une petite question sans doute élémentaire, mais je n'ai pas trouvé la réponse (peut-être mes critères étaient-ils mal formulés).


 


J'ai une NSView dont la taille peut varier (mettons que je "zoome" sur elle). Comme je n'ai pas envie que cette view dépasse de la fenêtre, je l'ai "incluse" dans une NSScrollView.


 


Comment faire, lorsque la taille de la NSView augmente, pour adapter les barres de défilement de la NSScrollView en conséquence, y compris pour les désactiver lorsque la NSView devient plus petite que la NSScrollView?


 


D'avance merci de m'indiquer la solution (même par une référence sur la partie de la doc que j'ai certainement survolée inconsidérément).


Réponses

  • Ce que tu veux c'est adapter ta NSScrollView à  ta NSView. Si la NSView devient plus grande, alors tu peux scroller pour. Si la NSView devient plus petite que la taille de ta NSScrollView, tu ne peux plus scroller.


     


    Ta NSScrollView possède une propriété : documentView. Tu dois ajouter ta NSView à  cette propriété.


    Tu peux ensuite changer la frame de ta documentiez en fonction de la taille de ta NSView.


     


    Apple donne un exemple ici.


     


    J'ai jamais utilisé NSScrollView (je suis plus iOS) mais ça y ressemble beaucoup à  mon avis.


  • berfisberfis Membre
    avril 2013 modifié #3

    J'avais fait ça, avec les nsView et scrollView définies dans IB (là  j'ai pris une imageView pour tester: je n'ai qu'à  glisser une image pour voir si ça marche). Bien sûr j'ai dérivé l'imageView pour savoir quand l'image changeait:



    @implementation ASImageView

    - (id)initWithFrame:(NSRect)frame
    {
    self = [super initWithFrame:frame];
    if (self) {
    [self addObserver:self forKeyPath:@image options:0 context:nil];
    }

    return self;
    }

    - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
    {
    [self setBounds:NSMakeRect(0,0,self.image.size.width,self.image.size.height)];
    [(NSScrollView*)[self superview]setDocumentView:self];
    }

    @end


     


    ... mais ça ne marche pas, j'aurais été trop content. A vrai dire, l'init de ma ASImageView n'est même pas appelée... ça ça me parait grave.


  • Ooops! Silly me. La ASImageView est déjà  instanciée par le chargement du nib! C'est awakeFromNib qu'il faut implémenter, pas initWithFrame!


     


    Navré du dérangement! ça marche, maintenant. Génial! Et merci pour la réponse, ça m'a forcé à  réfléchir un peu! ::)


Connectez-vous ou Inscrivez-vous pour répondre.