CALayer에 사용자 지정 속성의 애니메이션을 구현하려고합니다. 속성을 동적으로 설정했으며 대부분 작동합니다. 내 앱에는이 레이어의 인스턴스가 12 개 이상있을 수 있으며이 레이어는 모두 동시에 애니메이션을 적용해야합니다. 그러나 애니메이션이 트리거 될 때 일부 레이어는 애니메이션을 수행하지 않습니다. 그들은 간단히 최종 값으로 바로 이동합니다.CABasicAnimation에서 신뢰할 수없는 실행
문제를 디버그 할 때 애니메이션이 시작될 때 문제가있는 레이어가 애니메이션 속성의 최종 값으로 모델 레이어에서 다시 그려지는 것처럼 보입니다. 나머지 레이어는 애니메이션 속성의 일시적인 값만 사용하여 프레젠테이션 레이어에서 다시 그리기 만합니다. 대개 문제가있는 계층의 마지막이지만 가끔은 임의의 계층입니다.
너무 산발적이어서 다음에 어디를 볼 지 잘 모르겠습니다. 당신은 부품의 대부분을 가지고있는 것처럼
@dynamic aspectModeFraction;
- (id<CAAction>)actionForKey:(NSString *)key
{
if ([key isEqualToString:@"aspectModeFraction"])
{
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:key];
animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut];
animation.fromValue = @([[self presentationLayer] aspectModeFraction]);
animation.duration = 2.0f;
animation.delegate = self;
return animation;
}
return [super actionForKey:key];
}
+ (BOOL)needsDisplayForKey:(NSString *)key {
if ([@"fullRect" isEqualToString:key]) { return YES; }
if ([@"localRect" isEqualToString:key]) { return YES; }
if ([@"screens" isEqualToString:key]) { return YES; }
if ([@"aspectModeFraction" isEqualToString:key]) { return YES; }
return [super needsDisplayForKey:key];
}
어떻게 애니메이션을 요청합니까? 내 경험상, 키 - 값 코딩을 사용하면 항상 효과적입니다. 예를 들어 'myLayer.aspectModeFraction = whatever','[myLayer setValue : whatever forKey : @ "aspectModeFraction"]'라고 해보고 그 차이가 있는지 확인해보십시오. – matt