setNeedsDisplayInRect error en iOS5?
Estoy tratando de usarsetNeedsDisplayInRect:
en iOS5 para optimizar algunos códigos de dibujo. La configuración es simple: tengo una serie de 'puntos calientes' de CGRect que funcionan como botones. Cuando se detecta un toque, encuentro el CGRect en el que ocurrió y llamo asetNeedsDisplayInRect:
en la vista con ese rectángulo como parámetro. Todos los CGRects son válidos para la vista: los usa para hacer su dibujo inicial y sale correctamente.
o que estoy viendo (como muestra el volcado de la consola a continuación) es que la primera llamada asetNeedsDisplayInRect:
pasa el marco de vista como rect, no el rect que especifiqué. Las llamadas posteriores son correctas.
¿Alguien puede confirmar esto como un error o ver que estoy haciendo algo incorrectamente aquí? Todo el código está abajo. -- ¡Gracias
WRONG -> drawRect with rect 0.000000 0.000000 70.000000 660.000000
drawRect with rect 15.000000 260.000000 40.000000 40.000000
drawRect with rect 15.000000 310.000000 40.000000 40.000000
drawRect with rect 15.000000 360.000000 40.000000 40.000000
drawRect with rect 15.000000 410.000000 40.000000 40.000000
drawRect with rect 15.000000 460.000000 40.000000 40.000000
drawRect with rect 15.000000 510.000000 40.000000 40.000000
drawRect with rect 15.000000 410.000000 40.000000 40.000000
drawRect with rect 15.000000 310.000000 40.000000 40.000000
drawRect with rect 15.000000 260.000000 40.000000 40.000000
drawRect with rect 15.000000 110.000000 40.000000 40.000000
drawRect with rect 15.000000 610.000000 40.000000 40.000000
drawRect with rect 15.000000 510.000000 40.000000 40.000000
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touch = [touches anyObject];
CGPoint point = [touch locationInView:self.view];
CGRect rect;
int cnt = self.barNoteArray.count;
for (int i = 0; i < cnt; i++) {
rect = [[self.barNoteArray objectAtIndex:i] cellRect];
if (CGRectContainsPoint(rect, point)) {
self.bar.highlightIndex = 1;
[self.bar setNeedsDisplayInRect:rect];
break;
}
}
}
- (void)drawRect:(CGRect)rect
{
if (highlightIndex){
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetFillColorWithColor(context, [UIColor greenColor].CGColor);
CGContextAddRect(context, rect);
CGContextFillPath(context);
highlightIndex = 0;
printf("drawRect with rect %f %f %f %f \n", rect.origin.x,
rect.origin.y,
rect.size.width,
rect.size.height);
} else {
// other drawing code
}