Quelques petites questions sur les vues.
CrazyJo
Membre
Bonjour,
Dans ce code:
Que font ces lignes de codes :
le self bound -> qu'est-ce que c'est ?
le round et le r.size.width ?
qu'est ce que + r.origin.x
et ici :
Si j'avais voulu rajouter un deuxième chemin en rouge comment je peux faire ?
merci
Dans ce code:
- (NSPoint)randomPoint{<br /> NSPoint result;<br /> NSRect r;<br /> int width,height;<br /> r = [self bounds];<br /> width = round(r.size.width);<br /> height = round(r.size.height);<br /> result.x = (random() % width) + r.origin.x;<br /> result.y = (random() % height) + r.origin.y;<br /> return result;<br />}<br />
Que font ces lignes de codes :
r = [self bounds];
le self bound -> qu'est-ce que c'est ?
width = round(r.size.width);
le round et le r.size.width ?
result.x = (random() % width) + r.origin.x;
qu'est ce que + r.origin.x
et ici :
// Dessiner le chemin en blanc<br /> [[NSColor whiteColor]set];<br /> [path stroke];
Si j'avais voulu rajouter un deuxième chemin en rouge comment je peux faire ?
merci
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Enfin en général la bounds.size est égal à la frame.size, et le bounds.origin est égal à NSZeroPoint ; mais quand ce n'est pas le cas, ça veut dire qu'on a changé de système de coordonnées par rapport à la vue mère.
"round" c'est la valeur arrondie
r.size.width et r.size.width c'est la taille interne de la vue (correspondant souvent à la taille externe)
r.origin.x et r.origin.y c'est l'origine interne de la vue (souvent 0,0)
Pour le chemin en rouge, ben... redColor :fouf):
non je veux dire que si j'ai deux paths : path et path 2. Je dois mettre ça : ?
YES
YES
Autre chose , voilà l'interface pour mieux comprendre ma question:
. Je voudrais que lorsqu'on modifie les champs x,y,w,h le rectangle de la nsview se modifie suivant les réglages. Je ne sais pas trop comment procéder niveau organisation du code. Dois je - avoir un ficher Controller de NSObjet et un ficher Draw de NSView ou qu'un ficher NSView suffit ? Pour le moment j'ai codé cela:
Draw.m :
J'ai aussi un fichier Controller mais vide... Sous IB j'ai créé nsobjet de Draw ... mais peut-être que l'action sendActions: aurait mieux à faire dans COntroller. ? ! Et je ne sais pas quelle méthode employer pour que drawRect soit appelé à chaque fois. [self drawRect]; ne fonctionne pas...
-(IBAction) changeViewFrame:(id) sender
et de le répercuter sur la vue par un
[myView setFrame:NSMakeRect(..............)];
[myView setNeedsDisplay:YES];
A priori, ton fichier Draw.m ne devrait pas avoir besoin du #import "Controller.h"
mais dans le Draw.m je mets quoi alors ? Avant j'avais mis cela mais x,y,w,h ne sont pas définis.
Automatiquement l'argument rect correspond à la partie de la vue qui va être dessinée.
En standard c'est la totalité de la vue.
Donc tu supprimes ton NSMakerect dans cette méthode et tu remplaces r par rect si tu veux n'y voir que du bleu dans ta vue (le charme du Canard WC ?)
D'accord mais je voulais dessiner un rectangle avec les coordonnées et largeur et hauteur qui correspondent au variable des textfields, bref un recangle qui change tout seul de taille et tout suivant les variables des textfields. Parce que pour le moment j'ai bien un grand rectangle bleu (toute la nsview) mais dès que je rentre qqch dans un textfield la vue s'efface et aucun rectangle ne se dessine. Donc il me faudrait pas la vue stantard comme tu l'as dit plus haut ? non?
Tu as un problème de connexion. Il faut connecter chaque textField dans IB avec l'action changeViewFrame: pour que soit pris en compte le changement dans l'interface.
Je l'avais fait pourtant. J'avais même mis un nslog pour en être sur. edit voir post plus bas. Avec le code du bas ça marche à moitié maintenant. Voir en bas :
1. L'app se lance et le nsview définit se colorie en rouge.
2. Je régle x,y,w,h et le carré rouge s'affiche mais en dehors de la nsview. Qui est pourtant bien connectée puisqu'au démarrage de l'app elle s'affiche en rouge.
Logique il n'y a qu'une seule NSView.
Deux possibilités :
soit tu connectes des IBOutlet vers les TextField dans drawView, et tu lis dans ta méthode drawRect la valeur de ces outlets
     NSRect r=NSMakeRect([xtf floatValue], etc..)
     .....bezierPathWithRect:r]
soit tu crées une nouvelle custom view de frame fixe contenant ta drawView.
Â
Pour afficher les changements, il faut utiliser display ou setNeedsDisplay: (et leurs variantes "optimisées" displayInRect: et setNeedsDisplayInRect:). Il est par ailleur conseillé d'utiliser setNeedsDisplay: plutot que display car comme ca, si au cours d'un seul "tour" de la RunLoop, drawRect: ne sera appelé qu'une fois. Si par contre, tu veux rafraichir le contenu de la vue tout de suite (au moment ou tu fais l'appel) tu dois utiliser display.
Controller.h
Controller.m
Draw.h
Draw.m
Dans IB, j'ai créé un nsobjet Controller, tout les textfiels sont connecté à l'action : changeDrawing et tout les textfiels sont connecté avec leurs outlets. La NSView est relié par un outlet Myview.
Oui, display est de la forme
et setNeedsDisplay:
[myView display];
soit
[myView setNeedsDisplay:Yes];
Mais le mieux, c'est setNeedsDisplay, ce sera de toutes façons affiché tout de suite (pour un humain).
Le display est pour des besoins très spécifiques (peut-être du genre animation, ...)
Edit:
Bon, Fouf, tu as gagné
Cochez la case la plus adaptée :
[_] display
[_] setNeedsDisplay:
[_] setShadow:
[_] Ne sait pas
[_] De toutes façons, je n'aime pas les NSViews.
:kicking: :kicking: :kicking:
euh, on dévie peut-être .. ??

comment as-tu relié les outlets de tes textes à ta classe Draw?
oui c'était fait. En tout cas voilà le projet : http://soft4mac.mac-gratuit.fr/OC/ViewEx1.zip
Vérifie les connections dans ton interface !!
bin ça à l'air de jouer , je viens de tout relier :