¿Cómo evitar la mezcla de colors mientras dibuja rectangularjs?

Mientras dibuja rectangularjs en una UIView para ios, sigo teniendo el mismo problema: los márgenes rectangulares combinan su color con el background. Probé varios methods de dibujo rectangulares con los mismos resultados, usando una ruta bezier, dibujando línea por línea, dibujando los márgenes y llenando el interior del rectángulo.

Los frameworks de la vista son siempre dibujados correctamente. Incluso he considerado utilizar vistas cada vez que necesito un rectángulo, pero esa no parece ser la manera correcta de hacer las cosas especialmente porque necesito dibujar muchas de ellas.

Aquí hay un ejemplo de mi problema. Para la comparación, estoy dibujando una vista verde rectangular con las mismas dimensiones:

CGRect horizontalBar = CGRectMake(2, 2, 10, 6); UIView* horizontalBarSubView = [[UIView alloc] initWithFrame:horizontalBar]; horizontalBarSubView.backgroundColor = [UIColor greenColor]; [self addSubview:horizontalBarSubView]; [horizontalBarSubView release]; 

Y para el rectángulo en sí:

 CGRect horizontalBar = CGRectMake(2, 20, 10, 6); UIBezierPath* horizontalBarPath = [UIBezierPath bezierPathWithRect:horizontalBar]; [[UIColor greenColor] set]; [horizontalBarPath fill]; 

Esto maneja el siguiente resultado (zoom de 10x):

10x zoom rectángulo de prueba

¿Qué está haciendo que se mezclen los colors?

¿Cómo puedo evitar esto?

@Almo está en lo cierto que su problema es antialiasing, pero ¿está seguro de que este es el código y los valores reales? Esto no debe ser alias, y mis testings muestran que no lo hace. Para get su resultado, debo cambiar su ruta a esto:

 CGRect horizontalBar = CGRectMake(2.5, 20.5, 10, 6); 

El relleno de una ruta en un píxel fraccionario le dará el efecto que está viendo. Además, al trazar una ruta en píxeles integrales con un ancho impar, se aligera de esta manera. (Todo en una pantalla que no es Retina; Retina es ligeramente diferente.)

Generalmente, no recomiendo desactivar el suavizado como sugiere @Almo. En cambio, solo necesita asegurarse de que sus routes dibujen o llenen píxeles integers.

Esto se cubre con más detalle en el Capítulo 6 de la Progtwigción de iOS 5, "Empujando los límites" , página 114.

¿Has intentado jugar con CGContext?

CGContextSetShouldAntialias

Mire las configuraciones de context de charts aquí:

http://www.apeth.com/iOSBook/ch15.html

"Cuando dibuja un context de charts, el dibujo obedece a las configuraciones actuales del context. Por lo tanto, el procedimiento siempre es configurar primero los ajustes del context y luego dibujar".

Desea un context que no tenga establecido el indicador CGContextSetShouldAntialias.

Aunque como se indica en los comentarios, esto llenará píxeles que de otro modo se combinarían con el color del rectángulo.