일부 드로잉 코드를 최적화하기 위해 iOS5에서 setNeedsDisplayInRect:
을 사용하려고합니다. 셋업은 간단합니다 : 버튼으로 작동하는 CGRect '핫스팟'배열이 있습니다. 터치가 감지되면 CGRect가 발생한 것을 발견하고 그 rect를 param으로 볼 때 setNeedsDisplayInRect:
을 호출합니다. 모든 CGRect는 뷰에 유효합니다.이 뷰는 초기 그리기 작업을 수행하는 데 사용되며 올바르게 출력됩니다.setNeedsDisplayInRect iOS5의 버그?
콘솔 덤프 (콘솔 덤프)에서 볼 수 있듯이 setNeedsDisplayInRect:
의 첫 번째 호출은 내가 지정한 rect가 아닌 rect로 뷰 프레임을 전달합니다. 후속 통화가 올바른 것입니다.
누구나 버그로 확인하거나 내가 잘못하고있는 것을 볼 수 있습니까? 모든 코드는 아래와 같습니다. -- 감사!
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
}