IPB

Bienvenue invité ( Connexion | Inscription )

 
Reply to this topicStart new topic
> Comment utiliser NSScrollView, sans utiliser IB
Options
_remi
posté 26 Apr 2007, 10:25
Message #1


Adepte de Macbidouille
*

Groupe : Membres
Messages : 51
Inscrit : 10 Oct 2004
Membre no 24 988



Bonjour,

Je me teste sur la réalisation d'une visionneuse photo, je souhaite obtenir la même gestion qu'avec 'Aperçu', image centrée, Scroll auto avec en plus le redimensionnement de la NSWindow en fonction de l'image. Tout fonctionne sauf la gestion de NSScrollView. dry.gif
Ma démarche : J'ai une NSView (qui contient l'image centrée) qui s'adapte ses dimensions en fonction de sa NSWindow, mais comment je peux demander d'activer les NSScrollView depuis le Rect de l'image ?

J'ai testé plusieurs trucs : j'ai fait un subView depuis IB de NSView que j'adaptais à la taille de l'image, les NSScrollView fonctionnaient mais je n'avais plus de fond ? huh.gif

Un conseil ?

Fichier(s) joint(s)
Fichier joint  Image_1.jpg ( 28.92 Ko ) Nombre de téléchargements : 62
 
Go to the top of the page
 
+Quote Post
schlum
posté 26 Apr 2007, 10:30
Message #2


Terminaltor
Moderating Machine
*****

Groupe : Admin
Messages : 24 449
Inscrit : 25 Oct 2002
Lieu : Jeumont (59)
Membre no 4 319



Pas trop compris la question...
Soit tu crées la scrollView à la volée quand l'image dépasse, soit tu mets une scrollView directement avec masquage des scrollers quand pas besoin, non ?


--------------------
          I think therefore I Mac          
Go to the top of the page
 
+Quote Post
_remi
posté 26 Apr 2007, 11:27
Message #3


Adepte de Macbidouille
*

Groupe : Membres
Messages : 51
Inscrit : 10 Oct 2004
Membre no 24 988



Avec Make subView ->Scroll View de ma NSView depuis IB, les Scrolls sont visibles ou pas uniquement si NSScrollView est plus petit que ma NSView. Mais comme ma NSView se redimensionne en fonction de sa NSWindow je ne peux pas utiliser IB. Mais ma démarche est peut être mauvaise ? cool.gif
CITATION
Soit tu crées la scrollView à la volée quand l'image dépasse :

Comment je déclare un NSScrollView ? avec un truc du genre ?
NSScrollView *zoneScroll=[[NSScrollView alloc] init];
[[maView contentView] addSubView:zoneScroll];
Go to the top of the page
 
+Quote Post
schlum
posté 26 Apr 2007, 13:26
Message #4


Terminaltor
Moderating Machine
*****

Groupe : Admin
Messages : 24 449
Inscrit : 25 Oct 2002
Lieu : Jeumont (59)
Membre no 4 319



CITATION(_remi @ 26 Apr 2007, 12:27) [snapback]2190463[/snapback]

Avec Make subView ->Scroll View de ma NSView depuis IB, les Scrolls sont visibles ou pas uniquement si NSScrollView est plus petit que ma NSView. Mais comme ma NSView se redimensionne en fonction de sa NSWindow je ne peux pas utiliser IB. Mais ma démarche est peut être mauvaise ? cool.gif


Je ne vois pas le problème... Il faut une NSScrollView dont la taille varie avec celle de la fenêtre (les ressorts...), et dedans une view dont la taille dépend de celle de l'image... Si l'image est plus grande, alors les scrollers apparaissent, sinon, on donne la taille de la ScrollView à la view interne et on centre.

CITATION
Comment je déclare un NSScrollView ? avec un truc du genre ?
NSScrollView *zoneScroll=[[NSScrollView alloc] init];
[[maView contentView] addSubView:zoneScroll];

Tu veux ajouter une scrollView à la contentView de quoi là ??
c'est la scrollView qui a une contentView dans laquelle il faut mettre la vue interne, pas l'inverse.


--------------------
          I think therefore I Mac          
Go to the top of the page
 
+Quote Post
_remi
posté 26 Apr 2007, 15:13
Message #5


Adepte de Macbidouille
*

Groupe : Membres
Messages : 51
Inscrit : 10 Oct 2004
Membre no 24 988



CITATION
Tu veux ajouter une scrollView à la contentView de quoi là ??

Aie ! Dans une recherche sur ce forum j'ai copier/coller ce bout de code un peu trop vite ... biggrin.gif
CITATION
Je ne vois pas le problème... Il faut une NSScrollView dont la taille varie avec celle de la fenêtre (les ressorts...), et dedans une view dont la taille dépend de celle de l'image... Si l'image est plus grande, alors les scrollers apparaissent, sinon, on donne la taille de la ScrollView à la view interne et on centre.

Ben non, marche pas ! blink.gif pas moyen de centrer la NSView dans sa NSScrollView.
Voilà mon code :(un peu d'indulgence ph34r.gif )
CODE
- (void)drawRect:(NSRect)rect
{
//NSView
NSRect viewFrame = [self frame];
NSRect bounds = [self bounds];
[couleur set];
NSRectFill( bounds );
//rect NSWindow
NSWindow *win = [self window];
NSRect winFrame = [win frame];    
//[self setNeedsDisplay:YES];
if(image){
    NSPoint pt = bounds.origin;
    NSSize sizeImg = [image size];
    [self setFrameSize:[image size]];
    NSPoint originView;
    originView.x = (winFrame.size.width - viewFrame.size.width)/2;
    originView.y = (winFrame.size.height - viewFrame.size.height)/2;
    [self setFrameOrigin:originView];
    [image dissolveToPoint:pt fraction:opacity];
    [self setNeedsDisplay:YES];
}  
}

Fichier(s) joint(s)
Fichier joint  Image_3.jpg ( 18.96 Ko ) Nombre de téléchargements : 44
 
Go to the top of the page
 
+Quote Post
schlum
posté 26 Apr 2007, 15:45
Message #6


Terminaltor
Moderating Machine
*****

Groupe : Admin
Messages : 24 449
Inscrit : 25 Oct 2002
Lieu : Jeumont (59)
Membre no 4 319



C'est pour ça que je disais que la largeur de la vue à l'intérieur doit être au minimum celle de la scrollView et pareil pour la hauteur.


--------------------
          I think therefore I Mac          
Go to the top of the page
 
+Quote Post
_remi
posté 26 Apr 2007, 16:05
Message #7


Adepte de Macbidouille
*

Groupe : Membres
Messages : 51
Inscrit : 10 Oct 2004
Membre no 24 988



Ben non, ce n'est pas ce que tu disais... unsure.gif
CITATION
Si l'image est plus grande, alors les scrollers apparaissent, sinon, on donne la taille de la ScrollView à la view interne et on centre.
Go to the top of the page
 
+Quote Post
schlum
posté 26 Apr 2007, 16:17
Message #8


Terminaltor
Moderating Machine
*****

Groupe : Admin
Messages : 24 449
Inscrit : 25 Oct 2002
Lieu : Jeumont (59)
Membre no 4 319



CITATION(_remi @ 26 Apr 2007, 17:05) [snapback]2190774[/snapback]

Ben non, ce n'est pas ce que tu disais... unsure.gif
CITATION
Si l'image est plus grande, alors les scrollers apparaissent, sinon, on donne la taille de la ScrollView à la view interne et on centre.


Ben si... "la taille de la ScrollView à la view interne" c'est bien ça que ça veut dire non ?
La ta view interne est carrément plus petite que la ScrollView, donc c'est pour ça qu'elle n'est pas centrée...


--------------------
          I think therefore I Mac          
Go to the top of the page
 
+Quote Post
_remi
posté 26 Apr 2007, 16:37
Message #9


Adepte de Macbidouille
*

Groupe : Membres
Messages : 51
Inscrit : 10 Oct 2004
Membre no 24 988



Dur dur, donc je reviens à mon premier post :
CITATION
je souhaite obtenir la même gestion qu'avec 'Aperçu', image centrée, Scroll auto

J'avais déjà testé ce que tu me conseille et non ça ne marche pas, on ne peut pas déplacer l'origine d'un NSView dans son NSScrollView.
Alors schlum, comment je peux par des ligne de code, créer un NSScrollView de ma NSView et de les rendre visibles en fonction du Rect de mon NSImage. blink.gif
Go to the top of the page
 
+Quote Post
schlum
posté 26 Apr 2007, 17:21
Message #10


Terminaltor
Moderating Machine
*****

Groupe : Admin
Messages : 24 449
Inscrit : 25 Oct 2002
Lieu : Jeumont (59)
Membre no 4 319



CITATION(_remi @ 26 Apr 2007, 17:37) [snapback]2190789[/snapback]

Dur dur, donc je reviens à mon premier post :
CITATION
je souhaite obtenir la même gestion qu'avec 'Aperçu', image centrée, Scroll auto

J'avais déjà testé ce que tu me conseille et non ça ne marche pas, on ne peut pas déplacer l'origine d'un NSView dans son NSScrollView.
Alors schlum, comment je peux par des ligne de code, créer un NSScrollView de ma NSView et de les rendre visibles en fonction du Rect de mon NSImage. blink.gif

Je n'ai pas dit de déplacer l'origine, mais d'étendre la taille unsure.gif
À toi de te débrouiller après pour que le dessin de l'image soit à 100% centré ! (ça c'est possible... et même facile)

Pour créer un NSScrollView, il faut l'ajouter à la contentView de la fenêtre, et ensuite ajouter la vue à la contentView de la ScrollView.


--------------------
          I think therefore I Mac          
Go to the top of the page
 
+Quote Post
_remi
posté 26 Apr 2007, 17:31
Message #11


Adepte de Macbidouille
*

Groupe : Membres
Messages : 51
Inscrit : 10 Oct 2004
Membre no 24 988



Merci de t'intéresser à mes questions de débutant, mais tes réponses devinettes c'est un peu gonflant... laugh.gif
Edit : je viens de voir que tu as détaillé ton explication !

Ce message a été modifié par _remi - 26 Apr 2007, 17:35.
Go to the top of the page
 
+Quote Post
schlum
posté 26 Apr 2007, 17:38
Message #12


Terminaltor
Moderating Machine
*****

Groupe : Admin
Messages : 24 449
Inscrit : 25 Oct 2002
Lieu : Jeumont (59)
Membre no 4 319



CITATION(_remi @ 26 Apr 2007, 18:31) [snapback]2190845[/snapback]

Merci de t'intéresser à mes questions de débutant, mais tes réponses devinettes c'est un peu gonflant... laugh.gif
Edit : je viens de voir que tu as détaillé ton explication !

Rien de devinette là dedans ; la première et la seconde partie de mon post n'ont rien à voir, c'est deux méthodes complètement différentes ; la seconde ne détaille pas la première qui a déjà été détaillée tout le long du post.


--------------------
          I think therefore I Mac          
Go to the top of the page
 
+Quote Post
_remi
posté 5 May 2007, 11:14
Message #13


Adepte de Macbidouille
*

Groupe : Membres
Messages : 51
Inscrit : 10 Oct 2004
Membre no 24 988



Bon j'ai trouvé une procédure (un peu bricolée !) : smile.gif
- créer une "NSView" dans IB, puis "Make subview->scroll view".
- Dans le panneau "Size", donner les mêmes dimensions à la "NSview" et à la "NSScrollView" et dans "autosizing" valider le redimensionnement des deux.
- Décocher les "Vertical scroller" et "Horizontal scroller" de la NSScrollView.
- créer une une sous-class de la "NSView" avec des "Outlet" de type" NSWindow, NSView, NSScrollView et NSImage" connecter tout cela...
- dans la methode "drawRect:" utiliser "dissolveToPoint:(NSPoint)p fraction:(float)f" pour afficher et centrer l'image :
si l'image est plus petite que "NSScrollView", "p" est la différence entre la largeur/hauteur de "NSScrollView avec (NSRect)documentVisibleRect" et de "NSImage avec (NSSize) size" / 2.
sinon il faut bloquer la taille de la "NSView avec (void)setFrame:(NSRect)aRect" à la taille de l'image et d'afficher les "scroller avec setHasHorizontalScroller:YES et setHasVerticalScroller:YES".
- Lors des changements de taille de la "NSWindow" je récupère la notification "NSWindowDidResizeNotification" et je recommence les mêmes vérifications.
Cette procédure fonctionnne également avec une "NSImageView".
J'aurais aimé une méthode pour associer un "NSScrollView" à la "NSWindow" et de lui spécifier le déclencheur de type : "NSImage NSImaView et NSView". ph34r.gif

Fichier(s) joint(s)
Fichier joint  cap.jpg ( 53.89 Ko ) Nombre de téléchargements : 38
 
Go to the top of the page
 
+Quote Post
_remi
posté 17 Jun 2007, 21:28
Message #14


Adepte de Macbidouille
*

Groupe : Membres
Messages : 51
Inscrit : 10 Oct 2004
Membre no 24 988



Comme un membre du forum (jeanfy) m'a gentiment demandé des nouvelles de ma 'visionneuse', je la mets à dispo ci-dessous. Comme je suis sous Mac OS 10.3.9 et Xcode 1.5 elle fonctionnera sous rosetta sous les nouveaux Macs, mais bon, comme elle fait beaucoup moins bien que Aperçu elle n'a donc pas grand intérêt...
- elle imite le comportement d'affichage d'Aperçu (image centrée, rééchantillonne l'image suivant l'écran),
- elle affiche la résolution de l'image,
- elle permet de choisir la couleur de fond de la fenêtre en mode uni ou avec une texture,
- elle permet de choisir entre 4 bordures différentes (NSImageView),
- elle permet le glisser/déposer (dans la taille de l'image précédentes)
Pas taper ! tongue.gif c'est un gadget, je m'en sers juste pour glisser directement dessus depuis des pages internet, des images pour vérifier leur taille. cool.gif
iMage.sitx

Ce message a été modifié par _remi - 17 Jun 2007, 22:07.
Fichier(s) joint(s)
Fichier joint  capture.jpg ( 30.13 Ko ) Nombre de téléchargements : 32
 
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 utilisateur(s) sur ce sujet (1 invité(s) et 0 utilisateur(s) anonyme(s))
0 membre(s) :

 



Nous sommes le : 28th April 2024 - 16:11