내보기에 몇백 개의 선과 원을 그려야하며 뷰를 업데이트하기 위해 [myView setNeedsDisplay]라고하는 타이머 함수를 계속 움직입니다.iPhone에서 몇 줄과 원을 그릴 때 CGContextStrokePath 성능이 좋지 않습니다.
나는 UIView의에서 (MYVIEW) 서브 클래스 화해, 다음을 수행의 drawRect 함수를 구현 ...
-(void) drawRect:(CGRect)rect {
CGContextRef context = UIGraphicsGetCurrentContext();
CGFloat red[4] = { 1, 0, 0, 1};
CGContextSetLineWidth(context, 1);
CGContextSetShouldAntialias(context, NO);
CGContextSetLineCap(context, kCGLineCapSquare);
CGContextSetStrokeColor(context, red);
// rects is an array of CGRect of size ~200
for (int i = 0; i < N; i++) {
CGContextAddEllipseInRect(context, rects[i]);
}
// points is an array of CGPoint of size ~100
CGContextAddLines(context, points, N);
CGContextStrokePath(context, color);
}
을하지만이 개 느립니다. 내가 여기서 누락 된 것이 있습니까? 하나의 완전한 그림을 그리는 데 거의 1 초가 걸립니다.
빠른 답장을 보내 주신 Brad에게 감사드립니다. 그러나 여기에서 내 문제는 각 반복에서 알고리즘이 임의의 기하학적 도형을 반환 할 수 있기 때문에 사전에 그려서 주변을 이동하는 것이 어렵다는 것입니다. 나는 그럴 수있는 방법이있을 것이라고 확신합니다. 하지만 지금은 해결 방법을 찾았습니다. 모든 내용을 원시 메모리 버퍼에 저장하고 UIImage로 변환하여 표시합니다. 그것은 훨씬 빨라 보인다. – Abix
@Abix : 해결 방법이 아니라 실제 해결책이라고 생각합니다. Brad은 문제를 해결할 수있는 방법을 제안하는 것이 아니라 Quartz만으로도 자신의 업무에 잘못된 도구라고 설명합니다. –