Question

Ok, donc je suis en train de dessiner un cadre en pointillés qui est subdivisé en sections où je vais mettre du contenu.Voici mon code:

NSBezierPath *path = [NSBezierPath bezierPathWithRect:dirtyRect];
[path setLineWidth:3];
CGFloat pattern[2] = {5, 5};
[path setLineDash:pattern count:2 phase:0];
CGFloat totalHeight = header.frame.origin.y - 10;
CGFloat sectionOffset = 0;
if([game getNumPlayers] == 2) {
    sectionOffset = totalHeight / 2;
} else if([game getNumPlayers] == 3) {
    sectionOffset = totalHeight / 3;
} else if([game getNumPlayers] == 4) {
    sectionOffset = totalHeight / 4;
}
for(int i = 0; i < [[game getPlayers] count]; i++) {
    [path moveToPoint:NSMakePoint(0, totalHeight - (sectionOffset * i))];
    [path lineToPoint:NSMakePoint(dirtyRect.size.width, totalHeight - (sectionOffset * i))];
}
[path stroke];

C'est contenue dans mon affichage personnalisé de la méthode drawRect, donc dirtyRect est un NSRect équivalent les limites de la vue.La variable de l'en-tête se réfère à un autre point de vue dans le superview, que je suis en fondant la localisation des lignes hors de.

Voici une capture d'écran de ce que ce code fait attire (à l'exception de l'étiquette évidemment):

Comme vous pouvez le voir, sauf si nous avons affaire à un très malheureux optiquement illusion, ce dont je doute, les diviseurs contenues dans la boîte semble être plus épais que le contour de la boîte.J'ai explicitement définir la largeur de raie du chemin d'accès d'objet à trois, donc je ne sais pas pourquoi.Je serais très reconnaissante à toutes les suggestions qui peuvent être fournis.

Était-ce utile?

La solution

OK, je pense que le problème, c'est que votre extérieur de la boîte est juste en train de coupé par les bords de son point de vue.Vous demandez une ligne de 3 points de large, donc, si votre dirtyRect est les réelles limites de la vue, puis de 1,5 point de la boîte englobante à l'extérieur la vue, de sorte que vous ne pourrez voir que de 1,5 point de la lignes de bord.

Les lignes intérieures sont montrant les 3 points d'épaisseur.

Vous pouvez résoudre ce problème en faisant quelque chose comme:

const CGFloat lineWidth = 3;
NSBezierPath *const path = [NSBezierPath bezierPathWithRect:NSInsetRect(dirtyRect, lineWidth/2, lineWidth/2)];
path.lineWidth = lineWidth;
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top