2011-01-27 2 views
2

화면에 무작위로 배치되는 일련의 레이어가 있습니다. 각 레이어가 추가되면 다른 모든 레이어 위에 레이어가 배치됩니다.CALayer가 다른 CALayers에 완전히 적용되는지 어떻게 결정합니까?

결국 레이어는 다른 레이어로 완전히 덮여 있습니다. 이 시점에서 메모리에서 레이어를 제거하고 싶습니다.

다른 레이어에서 레이어를 덮는 경우 (100 % 또는 일부 분수)를 알 수있는 방법이 있습니까?

각 레이어에는 회전 변환이 적용되어 있으므로 모든 레이어의 프레임을 정확하게 비교할 수 없습니다.

답변

3

알아보기 위해 픽셀 테스트를 수행 할 수 있습니다. iOS가 실제로 그 구성을 지원하는지 모르겠지만 가능한 경우, 단지 1 비트 일 필요가 있습니다. 검은 색 영역을 채 웁니다. 레이어가 흰색으로 덮는 영역을 채 웁니다. 레이어의 변형을 가져 와서 CTM으로 설정 한 다음 레이어의 사각형을 채울 수 있습니다. 그런 다음 검정색으로 다시 채우는 것을 제외하고는 다른 모든 레이어를 반복하고 동일한 작업을 수행합니다. 완료되면 컨텍스트의 모든 픽셀을 스캔하여 그 중 하나가 흰색인지 확인합니다. 흰색 픽셀을 발견하면 레이어가 계속 표시됩니다. 그렇지 않으면 그렇지 않습니다.

당연히 모든 계층이 완전히 불투명하고 전체 경계를 채우고 있다고 가정합니다.

+0

감사합니다. Kevin - 귀하의 답을 따라 뭔가를 구현하기 시작했지만 계산이 너무 비싸 (느린) 것으로 나타났습니다. 감사. – TomH

+0

주기적으로 수행 할 수 있습니다. 10 개의 새로운 레이어마다 한 번 말해봐. 8 비트 그레이 스케일 컨텍스트를 사용하면 더 많은 정보를 인코딩 할 수 있습니다 (예 : 새로운 레이어를 약간 더 하얀 값으로 그린다. 이렇게하면 한 번에 아래에서 여러 레이어를 트리밍 할 수 있습니다. –

+0

아 - 매우 근사합니다. 나는 그것을 다시 볼 것이다. 감사. – TomH

관련 문제