2010-06-28 5 views
2

애니메이션 처리하지 않고 슈퍼 레이어에서 CALayer를 제거하고 싶습니다. 여기서 일어나는 일은 레이어가 애니메이션 위치에서 움직이는 것입니다. 애니메이션은 멈추었을 때이 코드가 실행되어 레이어를 시작 위치로 되돌리고 페이드 아웃합니다. 아마도 슈퍼 레이어에서 제거 될 것입니다. -removeFromSuperlayer의 애니메이션을 어떻게 멈출 수 있습니까? 여기에 나열된 코드는 주석 처리되지 않고 주석 처리되지 않은 포함 된 주석의 모든 변형에 대해 동일한 동작을합니다 (트랜잭션 또는 트랜잭션 없음). 내가 뭘 놓치고 있니?CALayer >> removeFromSuperlayer 애니메이션을 사용 중지 할 수 없습니다.

- (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag 
{ 
    //[self setHidden: YES]; 

    //[CATransaction flush]; 
    [CATransaction begin]; 
    [CATransaction setValue:(id)kCFBooleanTrue 
        forKey:kCATransactionDisableActions]; 
    //[CATransaction setDisableActions: YES]; 
    //[CATransaction setAnimationDuration: 0]; 
    [self removeFromSuperlayer]; 
    [CATransaction commit]; 
} 

나는이 코드를 탐색 해왔다.이 코드는 내가 찾은 것과 다르지 않다. 또한 레이어의가 (하지 오버라이드 (override) 할 필요가 있습니다

NSMutableDictionary *newActions = [[NSMutableDictionary alloc] initWithObjectsAndKeys:[NSNull null], @"sublayers", nil]; 
superlayer.actions = newActions; 
[newActions release]; 

: 당신은 작업을 설정하여 암시 적 애니메이션을 사용하지 않도록 설정할 수 있습니다

답변

3

는 (내 대답 here 유사한) 하위 계층을 포함하는 애니메이션에 null을 반환 할 superlayer에 사전을 superlayer의) onOrderOut 액션을 방지합니다. 나는 연결된 대답에서 그것을하는 방법을 보여줍니다.

+0

우수! 지금까지 액션에 대해 전혀 몰랐습니다. 고마워요! 이제 레이어가 초기 위치로 돌아 오지 않고 페이딩 (ficker, 'sublayers'와 'onOrderOut'을 추가 한 것) 만 초기 위치로 잠시 돌아갑니다. 여기에 또 다른 질문을 추가 할 수 있습니까? 애니메이션을 만든 후에 레이어가 어떻게 끝나야합니까? 다시 감사드립니다! ~ (투표 할 수 있다면 투표하십시오) – humasect

+1

@humasect - 애니메이션의 fillMode를 kCAFillModeForwards로 설정하고 removedOnCompletion을 NO로 설정해보십시오. –

+1

와우, 애니메이션 작업을 마친 후 일부 레이어를 제거하는 작업입니다. 그러나 기본값이 더 일반적인 작업에 더 좋다고 가정하고 완벽하게 작동합니다. 감사합니다! +1 – humasect

관련 문제