개별적인 CALayer가있는 개별 사진을 많이 만들었으며 서로 다른 속도로 비동기 적으로 페이드 인 및 페이드 아웃해야합니다. 각각에는 배경 하위 계층과 채우기 하위 계층이 있습니다. 백그라운드에서 타이머가 실행되어 각 순간을 개별적으로 애니메이션으로 표시합니다. 프로그램의 현재 동작에 대해 각 개별 객체에 애니메이션을 적용하지 않고 대신 전체 화면을 애니메이션으로 표시합니다. 한 번에 하나의 이미지 만 애니메이션으로 만들 수 있도록 도와 주시겠습니까?CABasicAnimation은 하나의 애니메이션에만 애니메이션을 적용 할 때 모든 것을 애니메이션으로 만듭니다.
편집 : 내가 분명해야합니다. 타이밍은 문제가 아닙니다. CoreAnimation으로 전환하기 전에 이러한 이미지가 적절한 시간에 올바르게 애니메이션되었습니다. 하지만 여기서 가장 중요한 문제는 하나의 이미지에 애니메이션을 적용하면 모든 이미지 외부의 화면 배경 부분을 포함한 전체 화면이 애니메이션으로 표시된다는 것입니다.
다음 코드 세그먼트는 UIView 코드에서 계층 구조를 만들기위한 것입니다. 자체는 기본 UIView를 나타냅니다. 반환 값은 화면에 이러한 작은 이미지 중 하나를 나타내는 클래스에 대한 CALayer 멤버 변수를 설정하는 데 사용됩니다.
- (CALayer *) createImageLayer:(CGPoint)orig Center:(CGPoint)pos {
CALayer *parentLayer = [self layer];
CALayer *childLayer1 = [CALayer layer];
childLayer1.bounds = CGRectMake(0, 0, 40.0f, 40.0f);
childLayer1.position = pos;
CALayer *childLayer2 = [CALayer layer];
childLayer2.bounds = CGRectMake(0, 0, 40.0f, 40.0f);
childLayer2.position = pos;
float components[4] = {1.0, 1.0, 1.0, 1.0};
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGColorRef whiteColor = CGColorCreate(colorSpace, components);
childLayer1.backgroundColor = whiteColor;
childLayer2.backgroundColor = whiteColor;
UIImage *childImage = [UIImage imageNamed:@"back.png"];
UIImage *childImage2 = [UIImage imageNamed:@"fill.png"];
CGImageRef imageRef = [childImage CGImage];
CGImageRef imageRef2 = [childImage2 CGImage];
childLayer1.contents=(id)imageRef;
childLayer2.contents=(id)imageRef2;
[parentLayer addSublayer:childLayer1];
[parentLayer addSublayer:childLayer2];
CGColorSpaceRelease(colorSpace);
CGColorRelease(whiteColor);
return parentLayer;
}
애니메이션을 적용하도록 지정하는 코드. 이미지 객체는 해당 레이어 멤버에 애니메이션을 추가하라는 지시를받습니다.
- (void) fadeAnimation:(ImageClass *)image {
CABasicAnimation *theAnimation;
theAnimation=[CABasicAnimation animationWithKeyPath:@"opacity"];
theAnimation.duration=1.0; // fixed duration for now
theAnimation.repeatCount=1;
theAnimation.autoreverses=YES;
theAnimation.fromValue=[NSNumber numberWithFloat:1.0];
theAnimation.toValue=[NSNumber numberWithFloat:0.0];
[image.myLayer addAnimation:theAnimation forKey:@"animateOpacity"];
}
감사합니다. 내가 얻었던 주된 문제는 [self fadeAnimation : myImage]와 같은 각 개별 이미지에 페이드 애니메이션을 수행한다고 말하면 대신 애니메이션이 전체 화면에는 있지만 이미지에는 적용되지 않는다는 것입니다. 타이밍은 실제로 나에게는 문제가 아니지만 타이머보다 내 용도에 더 적합하다고 생각하므로 제안을 시도해 볼 수 있습니다. – William