iOS 프로젝트의 경우 실시간 대화 형 UIImageView에서 폴리 라인을 렌더링하려고합니다. 즉, 사용자는 줄의 아무 지점에서나 핸들을 터치하여 드래그하여 모양을 바꿀 수 있습니다.UIView (Core Graphics? OpenGL?)에서 대화식 폴리 라인 그리기
Core Graphics에서 선을 그릴 수 있는데 드래그하려고하면 제스처 인식기가 메모리를 경고하고 충돌하는 원인이 될 정도로 자주 호출합니다 (setNeedsDisplay
). Xcode는 "메모리 부족 때문에 종료되었습니다."라고 Xcode에 알려줍니다.
저는이 같은 선을 그리지 만 여러 세그먼트의 for 루프를 사용합니다. 그러나 그것은 drawRect
의 내용이 문제가 아닌 것 같습니다. 내용을 모두 주석으로 처리하더라도 setNeedsDisplay
을 자주 호출하면 성능에 큰 영향을 미칩니다.
- (void)drawRect:(CGRect)rect
{
CGContextRef ctx = UIGraphicsGetCurrentContext();
CGContextSaveGState(ctx);
CGContextBeginPath(ctx);
CGContextSetStrokeColorWithColor(ctx, [[UIColor blueColor] CGColor]);
CGContextSetLineWidth(ctx, 6.0);
CGContextSetAlpha(ctx, 1.0);
CGContextMoveToPoint(ctx, pointA.x, pointA.y);
CGContextAddLineToPoint(ctx, pointB.x, pointB.y);
CGContextStrokePath(ctx);
CGContextRestoreGState(ctx);
}
저는 둘러 보았고지도 키트에서이 작업을 수행하기위한 자습서 만보고 있습니다. 이 일을 처리 할 수있는 방법이 있어야합니다. 아마도 Core Graphics가 최선의 방법이 아닐까요?
편집 : UIImageView는 UIScrollView에서 고해상도 이미지 (iPhone 카메라에서 가져옴)입니다. 그 크기를보기 위해 setNeedsDisplay
을 호출하는 것이 많은 리소스를 필요로한다고 생각합니다.
내가 그와 함께 주위를 연주했는데, 문제가 반대 것 같다 :
여기 발견. 즉, 짧은 팬 제스처에서 제스처 인식기는 한 번에 40 번 이상 'setNeedsDisplay'를 호출 할 수 있습니다. 아마도 UIView의 크기 때문일 수 있지만, 메모리가 300MB 이상으로 증가한 것 같습니다. 어떤 아이디어 나 다른 아이디어 @ Jef? – Jaimeson