drawInContext()를 통해 CALayer 서브 클래스에서 간단한 선 그리기 (중간에 텍스트가있는 줄)를 렌더링합니다. 사용자가 setNeedsDisplay를 호출하여 제스처를 수행 할 때이 레이어를 업데이트합니다. 내가보고있는 효과는 이중 버퍼링이 없다면 기대할 수있는 것입니다. 즉, 새로운 렌더링 부분이 오래된 렌더링 부분을 겹쳐서 보게됩니다. 업데이트를 중단하면 (제스처 완료) 시스템이 "catch up"하고 올바른 최종 결과가 항상 표시되지만 업데이트 중에 일관성없는 결과가 표시됩니다 ...이 효과는 미묘하지 않고 때로는 극단적입니다. 계속 업데이트를 계속하면 그림의 오래된 부분을 화면에 초 동안 유지할 수 있습니다 ...Quartz가 내 drawInContext()를 이중 버퍼링하지 않는 이유는 무엇입니까?
전혀 이해가 가지 않습니다. Quartz가 버퍼링을하고 있다면 화면 전체에 결과를 블리 팅하지 않거나 영향을받는 영역을 오산하고있는 것으로 보입니다.
것들 나는 시도했다 :
1) 내가 암시 애니메이션을 비활성화하고 내 도면에서 실수를하지 오전 CATransaction
2) 내에서 도면을 모두하고있는 중이 야 ... 그건 말 그대로 사이에 몇 개의 텍스트가있는 단지 두 줄 ... 중간 인공물을 렌더링하는 방법은 없습니다.
3) 업데이트 속도를 제한하려고 시도했지만 그 중 대부분은 건너 뜁니다 ...하지만 더 낮은 속도에서도 업데이트를 중지하고 시스템을 따라 잡을 때까지 아티팩트가 표시됩니다.
4) 이것은 시뮬레이터와 장치 (iPad)에서 동일하게 발생합니다.
오프 스크린 버퍼로 직접 그려 넣고 전체 화면으로 복사해야합니까? 나는 Quartz가 나를 위해 이것을한다는 것을 읽었을 것이라고 생각했다.
업데이트 : 평상시처럼 벽에 머리를 대고 몇 시간 만 지나면 질문을 게시 한 후 5 분 후에 답변을 찾을 수 있습니다. 나는 레이어를 다시 렌더링하기 위해 CATiledLayer를 사용하고 있다는 것을 깨달았습니다. 다시 정상 CALayer로 전환하면 결함이 사라집니다. 그래서 나는 분리 된 타일 렌더링의 인공물을보고있는 것 같아요. 지금은 그래서
문제를 재현하기 위해 간단한 샘플 코드를 만들 수 있습니까? –