2013-08-17 4 views
5

하위 클래스에 이라는 부동 소수점이 있고 @dynamic으로 표시된 속성이 있습니다. 서브 클래스에 대해 actionForKey, initWithLayer, needsDisplayForKeydrawInContext 메소드를 구현했습니다. 어떻게 든 CABasicAnimation가 반환되는속성 변경에 애니메이션 적용되지 않는 CALayer 서브 클래스

myCASublayer.animAngle = 0.5f; 

제대로 계층 "animAngle"를 사용 할 수 없습니다 :

- (id<CAAction>)actionForKey:(NString *)event { 
    if([event isEqualToString:@"animAngle"]) { 
     return [self animationForKey:event]; 
    } 
    return [super actionForKey:event]; 
} 

그리고 Someother 클래스에서

- (CABasicAnimation *)animationForKey:(NSString *)key 
{ 
    NSString *animValue = [[self presentationLayer] valueForKey:key];// Logs as 0 
    CABasicAnimation *anim; 

    if([key isEqualToString:@"animAngle"]) { 
     anim = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"]; 
     anim.repeatCount = HUGE_VAL; 
     anim.autoreverses = YES; 
     //anim.fromValue = [[self presentationLayer] valueForKey:key]; // setting animation value from layer property as in here does not work. 
     anim.fromValue = [NSNumber numberWithFloat:0.5f];   // This works 
    } 
    anim.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]; 
    anim.duration = 0.11; 
    return anim; 
} 

을 다음과 같이 actionForKey에 대한 정의는 재산. 내가 여기서 잘못했을 가능성은 무엇입니까?

+0

하나라고는'다른'wiggleAngle' –

+0

@RobvanderVeer입니다 animAngle')

CALayers 그리 않습니다 싫어. 그것의 animAngle. – rawatm

+0

@ basstrekerk87, 다음 번에 더 나은 복사/붙여 넣기를 수행하면 오류가 저장됩니다! 실제로 코드를 들여 쓰기 할 필요가 없다는 것을 알고 계십니까? 버튼을 사용하거나 3 개의 역 따옴표 (')로 시작하십시오. –

답변

1

CocoaHeads Session: Rob Napier on Animating Custom Layer Properties은 맞춤 애니메이션에 대한 훌륭한 설명입니다. 죄송합니다 그게 오타했다 :

+0

덕분에 작동합니다. 반복 횟수가 무한대이면 애니메이션이 한 번만 제공됩니다. 반복 된 애니메이션에 drawInContext가 호출되지 않습니까? – rawatm

+0

@ basstrekker87 키에 대한 조치가 반복을 지원할 수 있는지 확실하지 않습니다. AFAIK는 이전 값에서 새 값으로의 암묵적인 애니메이션입니다. –

+0

CALayers가 싫어하는 경우가 있습니다 .-) – rawatm

1

animAngle@property 인 경우이 속성에 accessors을 지정해야합니다.
속성을 @dynamic으로 표시하면 런타임에 해당 메서드의 구현을 동적으로 제공한다는 것을 의미합니다. 따라서 속성에 접근자를 제공하지 않으면 액세스 할 수 없습니다.

+0

은 animAngle에 대한 접근 자 생성을 시도했지만 여전히 작동하지 않습니다. @dynamic은 속성 자체에 대한 구현을 제공하는 CALayer 하위 클래스에 필요합니다. 그러나 변경 사항은 여전히 ​​업데이트되지 않습니다. – rawatm

+0

CALayers에 대해서는 사실이 아닙니다. 그들은 ... "특별한";) –

+0

@ DavidRönnqvist : 사실이 아닐세. Lexandr의 대답이나 내가 덧붙인 설명. – rawatm