Направих куп малки отделни снимки, всяка с отделен CALayer, и те трябва да избледняват и избледняват асинхронно с различни скорости. Всеки има фонов подслой и запълващ подслой. Таймер работи във фонов режим, за да анимира всеки поотделно в определени моменти. За текущото поведение на програмата, вместо да анимира всеки отделен, вместо това анимира целия екран около него. Бихте ли ми помогнали да направя така, че да анимира само едно изображение наведнъж?
РЕДАКТИРАНЕ: Трябваше да съм по-ясен. Времето не е проблем. Преди да премина към CoreAnimation, тези изображения се анимираха правилно в подходящите моменти. Но основният проблем тук е, че когато кажа на едно изображение да анимира, целият екран, включително фоновата част на екрана извън всички изображения, се анимира.
Следният кодов сегмент е за създаване на слоеста структура в кода на UIView. Self се отнася до основния 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"];
}