2013-03-04 4 views
0

이 글에서 고생하고 있습니다. 애니메이션을 만들려고하는 사용자 지정 NSStatusItemView가 있습니다. 나는이 메서드를 호출 할 때NSStatusItemView 애니메이션하기

- (void)setAnimated 
{ 
    CABasicAnimation *anim = [CABasicAnimation animationWithKeyPath:@"opacity"]; 
    anim.duration = 1.0; 
    anim.repeatCount = HUGE_VALF; 
    anim.autoreverses = YES; 
    anim.fromValue=[NSNumber numberWithFloat:1.0]; 
    anim.toValue=[NSNumber numberWithFloat:0.0]; 
    [self.layer addAnimation: anim forKey: @"animateOpacity"]; 
    [self setWantsLayer:YES]; 
    [self setNeedsDisplay:YES]; 
} 

는, 아무 일도 발생하지 : 나는 애니메이션을 킥오프 내 상태 항목보기에 다음 코드를 추가했습니다. 그러나이 코드를 drawRect 메서드로 옮기면 시작시 뷰가 제대로 움직입니다. 사실 이후에 애니메이션을 시작하라고 말할 수 있도록하기 위해 내가해야 할 일이 무엇인지 확실히 모르겠지만 위의 방법은 그것을하지 않고 있으며 그 이유를 알지 못합니다! 어떤 아이디어?

답변

0

그래, 스스로 대답 해. 그래서 구글은 대답을 기록했다.

문제는 drawRect에 대한 이해 부족이었습니다. 내 setAnimated 메서드가 setNeedsDisplay를 호출하면 drawRect를 다시 호출하여 setAnimated 메서드에서 수행 된 작업을 효과적으로 취소합니다.

올바르게 수정 한 두 가지 사항이 있습니다. 먼저 setAnimated 메소드를 수정하여 BOOL 인수를 허용하고 뷰의 isAnimated 속성을 해당 값으로 설정합니다. 그런 다음 drawRect에서이 BOOL 값을 확인하고 YES로 설정된 경우 애니메이션을 수행합니다.

둘째,보기를 처음 그릴 때 [self setWantsLayer : YES]를 호출해야합니다. 그래서 drawRect를 처음 실행하면 나중에 애니메이션을 사용할 수 있습니다.