Ошибка setNeedsDisplayInRect в iOS5?

Я пытаюсь использоватьsetNeedsDisplayInRect: в iOS5 оптимизировать некоторый код для рисования. Настройка проста: у меня есть массив «горячих точек» CGRect, которые функционируют как кнопки. Когда обнаруживается касание, я нахожу CGRect, в котором оно произошло, и вызываюsetNeedsDisplayInRect: на вид с этим прямоугольником в качестве параметра. Все CGRects действительны для вида - он использует их для первоначального рисования, и это получается правильно.

То, что я вижу (как показывает дамп консоли ниже), это то, что первый вызовsetNeedsDisplayInRect: передает видовой кадр как прямоугольник, а не прямоугольник, который я указал. Последующие звонки верны.

Кто-нибудь может подтвердить это как ошибку или увидеть, что я здесь что-то делаю неправильно? Весь код ниже. -- Спасибо!

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


}

Ответы на вопрос(1)

Ваш ответ на вопрос