0

나는 응용 프로그램의 기본보기 내에서 drawRect 화재 NSTimer 사용하고 있습니다. drawRect는 몇 개의 이미지를 그리고 kCGBlendModeScreen을 사용하여 블렌드합니다 (절대적으로 필요함). 그러나 drawRect는 원하는 것보다 조금 더 오래 걸리므로 타이머가 항상 원하는 속도로 실행되는 것은 아닙니다 (절반 이상).그리기/별도의 스레드 내에서 UIView 렌더링 NSTimer 항상 적시에 적시

가능한 한 많이 사용하는 그래픽을 최적화했습니다. 그래서 새로운 뷰를 생성하여 드로잉을 "아웃소싱"할 수 있는지, 내부에서 생성 된 스레드 내에서 뷰의 drawRect를 호출 할 수 있는지 궁금합니다. 타이머의 콜백 메소드 (즉, [someNewView setNeedsDisplay] ...와 같은 새 뷰의 drawRect에 호출을 스레드합니다.

그렇다면 어떻게 코드에 접근 할 수 있습니까?

...

내가 코어 애니메이션을 사용하는 것입니다,하지만 난 그게 알파 혼합 모드를 지원하지 않았다 읽는 기억한다. 내가 틀렸다면 별도의 변환 (예 : 각 이미지의 개별 회전)에서 모든 이미지의 애니메이션을 허용하는 예제 코드를 볼 수 있으며 현재 구현중인 kCGBlendModeScreen을 사용하여 블렌딩 할 수 있습니다. .

팁 주셔서 감사합니다!

답변

1

대답은 "아니오"입니다. 보조 스레드에서 드로잉 (또는 UIKit을 사용하는 모든 작업)을 수행해서는 안됩니다. 성능 문제가 발생하면 드로잉 이전에 다른 스레드에서 모든 계산을 수행해야만 드로잉에 소요되는 시간이 최소화됩니다.

+0

확실히 시간이 걸리는 계산은 아닙니다. 그리기 자체입니다. 그렇다면 CA에 관한 내 질문은 어떻습니까? 나는 약간의 결정적인 결과 (코드 와이즈)로 주제를 연구했지만 어쩌면 올바른 키워드를 검색하지 않고있는 것일까? – steganous

+0

아쉽게도 CA를 사용하면 성능이 향상되지 않습니다. 'kCGBlendModeScreen'으로 이미지를 그리는 것이 전부라면, 왜 CA가 더 빨라지는지 알 수 없습니다. 미리 렌더링 할 수있는 방법이 있습니까? – Mike

+0

아니요, 수십만 개의 이미지를 미리 렌더링해야했습니다. 하지만 CA는 OpenGL을 사용하기 때문에 약간 속도가 빨라지더라도 조금 속도를 올릴 것으로 예상됩니다. – steganous

관련 문제