2012-04-01 5 views
0

을 액세스 할 수 없으므로 화면에 그린 각 경로에 해당하는 UIBezierPaths가있는 [NSMutableArray * paths]가 있습니다. 또한 경로에 해당하는 색상을 포함하는 또 다른 NSMutable 배열 색상이 있습니다. 내가 겪고있는 문제는 두 개의 배열이 변이되어 있고 둘 다 올라가고있는 횟수를 볼 수 있지만 다음 drawRect 메서드는 배열의 마지막 경로 만 그릴 것입니다. 나는 많은 질문을 훑어 보았고 내가 지금까지 읽은 것을 토대로이 매우 문제가 우리를 초보자로 생각하고 유형 불일치 때문에 주로 발생하는 것으로 보인다. 나는 심지어 리턴 캐스트를 시도했는데 그것은 쓸데 없었습니다. 다음은의 drawRectNSMutable 배열의 UIBezierPath에

int cnt = paths.count; 

if (cnt != 0) 
{ 
    for(int i = 0; i < cnt; i++) 
    { 
     NSLog(@"Drawing path:%i", i); 

     UIColor *color; 

     color = [colors objectAtIndex:i]; 
     [color setStroke]; 


     UIBezierPath *path = [paths objectAtIndex:i]; 
     path.lineWidth = 2; 

     [path stroke]; 
    } 
} 

내가 [자기 setNeedsDisplay]는 지워 버리고 내 전체 화면을 호출 할 때마다에서 내 코드입니다.

내가 내

UIBezierPath *path = [paths objectAtIndex:i]; 

잘 처리하고 있지 않다 가정에서 내가 수정 있습니까?

대단히 감사드립니다.

UPDATE :

좀 더 코드를 통해 뒤지고되고 ARC 내 NSMutable 배열의 내용을 풀어 놓고 또 다른 가능성이있다처럼 지금은 거의 같습니다. 나는 다음을 시도하고 컴파일러 오류가 발생했습니다. 각 그릴 Afer 즉 당신이 당신의 경로 배열에 경로를 추가 Besure

[paths retain]; 
+0

글쎄, 나는 오전 완고한 사람이되고, 나는 어떤 의미에서, 나는에 대한 NSMutable 배열을 사용할 필요가 없다고 깨달았다

- (void)drawRect:(CGRect)rect { [brushPattern setStroke]; UIBezierPath *drawPath = [UIBezierPath bezierPath]; drawPath.lineCapStyle = kCGLineCapRound; drawPath.miterLimit = 0; drawPath.lineWidth = thisLineWidth; for (UIBezierPath *path in pathArray) [drawPath appendPath:path]; UIBezierPath *path = [self pathForCurrentLine]; if (path) [drawPath appendPath:path]; [drawPath stroke]; } - (UIBezierPath*)pathForCurrentLine { UIBezierPath *path = [UIBezierPath bezierPath]; [path moveToPoint:startPoint]; [path addLineToPoint:endPoint]; return path; } 
내가 뭘하려고했는지. "Undo 기능"을 구현해야 할 때까지 세 개의 UIBezierPaths (빨강, 파랑 및 녹색) 및 세 개의 점 중 하나를 가리키는 currentPath 포인터가 있습니다. 이렇게하면 그리는 시간이되면 각 경로가 nil인지 여부를 확인하고 경로를 그립니다. 메모리를 더 쉽게 사용하려면 필터를 구현하여 마지막 렌더링 이후에 경로가 변경된 경우에만 경로를 다시 그려야합니다. – Khanal

답변

관련 문제