Ошибка 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
}