Pregunta

Ok, así que estoy tratando de dibujar una discontinua caja que se subdivide en secciones donde voy a poner el contenido.Aquí está mi código:

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];

Esto está dentro de mi vista personalizada del método drawRect, así dirtyRect es un NSRect equivalente a los límites de la vista.La variable encabezado se refiere a otro punto de vista en el superview, que me estoy basando la ubicación de las líneas de.

Aquí está una captura de pantalla de lo que este código dibuja (excepto la etiqueta obviamente):

Como se puede ver, a menos de que estemos tratando con un muy desafortunado ópticamente ilusión, que lo dudo, los divisores que figuran en el cuadro parecen ser más grueso que el contorno de la caja.He explícitamente establece el ancho de línea de la ruta de acceso del objeto a ser tres, así que no estoy seguro de por qué esto es.Me sería muy agradecidos de cualquier sugerencia de que puede ser proporcionada.

¿Fue útil?

Solución

OK, creo que el problema es que el exterior de la caja es simplemente recortar por los bordes de su vista.Pide una línea de 3 puntos de ancho, así que si tu dirtyRect es el de los límites de la visión, después de 1,5 puntos del cuadro adjunto se fuera de la vista, por lo que solo verás en 1,5 puntos de las líneas de borde.

Las líneas interiores mostrando la 3-punto de espesor.

Usted puede solucionar este problema por hacer algo como:

const CGFloat lineWidth = 3;
NSBezierPath *const path = [NSBezierPath bezierPathWithRect:NSInsetRect(dirtyRect, lineWidth/2, lineWidth/2)];
path.lineWidth = lineWidth;
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top