2012-01-21 2 views
0

UIView의 drawRect 메서드를 재정의하면 [myView setNeedsDisplay]를 호출 할 때마다 임의의 색상으로 화면에 새로운 임의의 원이 그려지도록 할 수 있습니다. 오래된 서클을 대체해서는 안됩니다. 그래서, 그것은 화면 전체에 겹쳐 쌓인 원들처럼 보일 것입니다.CGRect 및 setNeedsDisplay 사용

+1

'CGRect' 대신'drawRect'를 사용합니까? – barley

+0

네, 지적 해 주셔서 고맙습니다. 편집 됨. – CodeGuy

답변

1

이런 식으로 drawRect:을 사용할 수 없습니다. 그 자리에 전체보기를 그리기 위해 추가 된 볼뿐만 아니라 모든 볼을 한 번에 그려야합니다. drawRect가 호출 될 때마다 그리는 화면 영역이 이미 지워졌습니다.

초기 생각은 임의의 크기와 위치로 각 공에 대한보기를 만드는 것이 었습니다. 그러나 SonOfSillyBalls 예제 코드 (정확히 수행하려는 작업을 수행함)는 다른 접근 방식을 취합니다.

그런 다음 임의의 공을 그립니다, NSView 서브 클래스가 [self lockFocus]을하는 drawAnother: 방법을 발사 할 수있는 반복 타이머를 설정, 그리고 다음 [self unlockFocus] 그리기를 완료 할 수 있습니다. 마지막으로 [self.window flushWindow]을 호출하여 새 공을 화면에 표시합니다.

그렇습니다 때문에 정확히 당신이 아마 당신은 (여기서 도전이 점에서이다!)를 읽을해야 할 노력하고 있지만, SonOfSillyBalls에 대한 샘플 코드는 여기에 있습니다 : http://developer.apple.com/library/mac/#samplecode/SonOfSillyBalls/

당신은 수도 Mac OS X을 "Open Step"및 "Rhapsody"라고 지칭하는 곳에서는 오래된 문제에 대한 설명과 왜 현대 드로잉 API에 적합하지 않은지에 대해 읽어보십시오. "X"이름은 아직 발명되지 않았 음). Mac OS와 같은 클래식 Mac OS X

Silly Balls는 Apple의 가장 오래된 19 개 샘플 코드 중 하나입니다. 80 년대이지만이 버전은 Objective-C 2.0을 사용하기 위해 불과 6 개월 전에 업데이트 된 세 번째 버전입니다.

+1

'UIView'에는'lockFocus' 메소드 또는 동등한 것이 없습니다. –

+0

흠. 잘 잡았다. 나는 대안을 추측하고,'CALayer' (각 공에 대한 레이어 추가)를 사용하는 것일 것입니다. –