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


}

Respuestas a la pregunta(2)

Su respuesta a la pregunta