CABasicAnimation с 5 изображениями - PullRequest
0 голосов
/ 18 июня 2011

как изменить этот код, чтобы анимация выглядела следующим образом: image1 -> image2 ---> image3 ---> image4 ---> image 5 .. затем вернитесь обратно к image1 и так далее ...

код:

    UIImage *image1 = [UIImage imageNamed:@"1.jpg"];
UIImage *image2 = [UIImage imageNamed:@"2.jpg"];
UIImage *image3 = [UIImage imageNamed:@"3.jpg"];
UIImage *image4 = [UIImage imageNamed:@"4.jpg"];
UIImage *image5 = [UIImage imageNamed:@"5.jpg"];

NSArray *imageArray = [NSArray arrayWithObjects:image1.CGImage, image2.CGImage, image3.CGImage, nil];

//self.introImages.image = image1;

[self.view addSubview:self.introImages];


CABasicAnimation *crossFade = [CABasicAnimation animationWithKeyPath:@"contents"];
crossFade.autoreverses = YES;
crossFade.repeatCount = HUGE_VALF;
crossFade.duration = 1.0;
//self.introImages.layer.contents = image2.CGImage;

crossFade.fromValue = (id)image1.CGImage;
crossFade.toValue = (id)image5.CGImage;
[self.introImages.layer addAnimation:crossFade forKey:@"animateContents"];

1 Ответ

2 голосов
/ 19 июля 2011

Лучше поздний ответ, чем никто, я думаю.:)

В вашем коде есть несколько ошибок.

Прежде всего, если вы хотите использовать перекрестное затухание изображений, вы должны добавить анимацию в imageView, содержащий изображения, и просто переключаться между UIImages.

Второе: если вы хотите циклически проходить по нескольким изображениям, а не двум, вы должны либо использовать очередь анимаций с помощью методов обратного вызова animationDidFinish, либо вы должны использовать поле animationImages класса UIImageView, чтобы позволитьUIImageView выполняет всю работу.

В-третьих: если вы меняете слой изображения с image1 на image5, как вы можете ожидать, что компилятор узнает, что он должен поместить все остальные картинки между ними?

Попробуйте этот код:

UIImage *image1 = [UIImage imageNamed:@"1.jpg"];
UIImage *image2 = [UIImage imageNamed:@"2.jpg"];
UIImage *image3 = [UIImage imageNamed:@"3.jpg"];
UIImage *image4 = [UIImage imageNamed:@"4.jpg"];
UIImage *image5 = [UIImage imageNamed:@"5.jpg"];

NSArray *imageArray = [NSArray arrayWithObjects:image1.CGImage, image2.CGImage, image3.CGImage, nil];
//imageView to add the array of images you want to cycle through
iv_introImages.animationImages = imageArray;
//duration of the animation-cycle
iv_introImages.animationDuration = 1.0;
//how often you want the animation to repeat. 0 stands for endless repetition
iv_introImages.animationRepeatCount = 0;
//starts the animation
[iv_introImages startAnimating];

надеюсь, это поможет.Мав

...