2009-08-13 6 views
6

CATiledLayer가 지원하는 UIView 하나의 하위 뷰가있는 UIScrollView가 있습니다. 한 가지 예외를 제외하면 모두 잘 작동합니다. 이미지를 하나씩 변경하면 CATiledLayer는 이전 이미지의 줌 레벨을 캐시합니다. 스크롤하면 업데이트 된 이미지가로드되기 전에 이전 이미지가 1 초 동안 표시됩니다.이미지를 변경할 때 CATiledLayers 캐시를 지우십시오.

이전 이미지가 표시되지 않도록 CATiledLayer의 캐시를 완전히 지울 수있는 방법이 있습니까? CATiledLayer는 새로운 타일에 대한 대리인에게 요청하기 때문에지지 이미지가 변경되었음을 분명히 알고 있습니다 ...

답변

23

나는 이것이 당신이 필요로하는 것보다 조금 더 복잡하다고 생각합니다. 나는 당신이해야 할 일은 CATiledLayer의 내용을 nil로 설정하는 것이라고 생각합니다.

myCATiledlayer.contents = nil. 
+13

오른쪽에있는 soca에서는 CATiledLayers 내용을 수정하면 효과적으로 일반 CALayer로 바뀌고 제대로 작동한다는 것을 경고합니다. 그러나 Apple 직원은 나에게 트릭을 말해주었습니다. 최근에 변환 된 CALayer-CATiledLayer에서 setNeedsDisplay를 호출하면 CATiledLayer로 다시 돌아갈 것입니다. – prime31

+0

Tyne 먼저 혼자 읽어야합니다 : "바로 문서에서 ..." – prime31

+3

나는 prime31과 같은 문제가 있었고,이 솔루션은 훌륭하게 작동했습니다! [myCATiledlayer setNeedsDisplay]를 호출하기 전에 myCATiledlayer.contents = nil을 호출하고 작업을 수행했습니다. 예! – aslisabanci

2
-(void)invalidate 
{ 
    CATiledLayer *tiledLayer = (CATiledLayer *)[self layer]; 

    tiledLayer.tileSize = CGSizeMake(93,93);//Set a different tile size 
    tiledLayer.tileSize = CGSizeMake(92,92);//Restore original tile size 
} 

이 나를 위해 작동합니다.

관련 문제