2012-06-18 4 views
9

나는 CATiledLayer 배경 화면이 있습니다. 이 CATiledLayer UIView에서 보이는 타일을 가져 와서 CALayer 백업으로 다른보기에 추가하여 CATiledLayer를 사용하지 않는 다른 UIView에서 보이는 이미지를 다시 만들고 싶습니다.CATiledLayer to CALayer

내가 이것을하고 싶은 이유는이 두 번째 UIView를 사용하여 CATiledLayer가 UIView를 업데이트하는 효과를 마스크한다는 것입니다. 현재 모든 타일이 다시로드 될 때 깜박임이 발생합니다.

문제는 내가 어떻게 이런 짓을 할 것인가에 대해 완전히 확신 할 수 없다는 것입니다. 어떤 아이디어?

+1

그래서 당신이 의도적으로 타일 뷰를 타고 타일 뷰를 숨길 수있는 기본보기를 만들고 싶어 ...? 어쩌면 미친 질문 일지 몰라도 왜 시작해서 기와에 올랐을까요? –

+0

@PauldeLange - 타일링 된 뷰를 다시로드 할 때 타일이 다시 그려지면서 '깜박임'합니다. 위의 타일을 직접 복사하는 타일링 된 뷰 아래에는 UIView가 있습니다. 그런 다음 타일을 다시로드하면 타일이 다시로드 될 때 아래쪽보기가 잠깐 동안 표시되어 깜박임 효과가 중지됩니다. 그래픽 프로그램의 경우 그래픽 버퍼를 사용하여 위의 새로운 내용을 렌더링 할 때의 영향을 부드럽게 할 수 있습니다. –

+0

배경보기를 타일보다 빠르게 렌더링 할 수 있다면 타일이 왜 있습니까? 영향 -> 효과. –

답변

3

CATiledLayer 비동기 다중 상세 수준 캐시 잠재적 층 콘텐츠의 타일을 제공 하는 방법을 제공하고있는 CALayer의 서브 클래스이다.

당신과 함께 CGContextRef로 레이어에서 볼 일을 렌더링 할 수

:

- (void)renderInContext:(CGContextRef)ctx 

그리고 설정하여 대리자를 다른 레이어를 업데이트하려면이 옵션을 사용하여 구현

- (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)context 

ss 여기에 표시 http://www.raywenderlich.com/2502/introduction-to-calayers-tutorial

하지만 솔직히 나는 이것이 효율적이라고 생각하지 않습니다.

+0

답변 해 주셔서 감사합니다. 당신은 그것이 효율적이지 않다고 말합니다. 내 깜박임 문제를 해결하는 데 도움이되는 다른 아이디어가 있습니까? –

+0

@Luis'renderInContext'는'CATALAYLayer'에서'CALayer'가 작동하지 않는 것처럼 보입니다. 타일은 전혀 렌더링되지 않습니다. 어떤 아이디어? – Tim

0

여기 실제 문제는 깜박입니다. 이가 문제의 세트를 고정

- (void) display { 
    self.contents = nil; 
    [super display]; 
} 

: 다음과 같은 방법을 당신의 CALayer의 사용자 지정 하위 클래스를 생성 및 구현 :이 솔루션의 일부, 그것을 백업 사용자 정의의 CALayer과 함께보기에 비슷한 문제가 있었다 나,하지만 당신을 위해 그것을 고칠 수 없습니다. 당신을위한 대안은 업데이트하면서 거래를 비활성화 할 수 있습니다 : setDisableActions

CATransaction Class Reference에서 : 행동이 억제되어이 트랜잭션 그룹 내에서 속성 변경의 결과로 트리거 설정 여부를 지정합니다.

그래서 이것을 사용하기 :

[CATransaction begin]; 
[CATransaction setDisableActions:YES]; 
// do updating/flickering stuff 
[self doFlickeringThing]; 
[CATransaction commit];