2014-02-23 5 views
0

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을 호출하는 것이 많은 리소스를 필요로한다고 생각합니다.

답변

0

그림 코드는 문제가 없습니다. 제스처 인식자를 사용할 때 내재적 인 지연과 오버 헤드가 있습니다. 제 생각에는 문제가 있습니다 (제 의견으로는). - (void) 터치를 구현해야합니다 ... 대신 이벤트 (그 중 네 개가 있습니다)

+0

내가 그와 함께 주위를 연주했는데, 문제가 반대 것 같다 :

여기 발견. 즉, 짧은 팬 제스처에서 제스처 인식기는 한 번에 40 번 이상 'setNeedsDisplay'를 호출 할 수 있습니다. 아마도 UIView의 크기 때문일 수 있지만, 메모리가 300MB 이상으로 증가한 것 같습니다. 어떤 아이디어 나 다른 아이디어 @ Jef? – Jaimeson

관련 문제