Можно ли анимировать UIImage? - PullRequest
9 голосов
/ 17 декабря 2011

Мне интересно, есть ли способ анимировать UIImage.

Я знаю, что UIImageViews можно анимировать, но есть ли способ сделать это напрямую в UIImage.

Может быть, с Open GL ES или что-то?

Или есть ли другие способы анимации MPMediaItemArtwork?

Заранее спасибо!

Ответы [ 5 ]

13 голосов
/ 17 декабря 2011

Создайте UIImageView и установите для свойства animationImages массив UIImage s

Вот пример:

NSArray *animationFrames = [NSArray arrayWithObjects:
  [UIImage imageWithName:@"image1.png"],
  [UIImage imageWithName:@"image2.png"], 
  nil];

UIImageView *animatedImageView = [[UIImageView alloc] init];
animatedImageView.animationImages = animationsFrame;
[animatedImageView startAnimating];

Если вы ориентируетесь на iOS5 вы можете сделать это непосредственно в UIImage без UIImageView, используя

    +(UIImage *)animatedImageWithImages:(NSArray *)images duration:(NSTimeInterval)duration 

, например,

    [UIImage animatedImagesWithImages:animationFrames duration:10];
8 голосов
/ 17 декабря 2011

Если вы имеете в виду анимацию с несколькими изображениями, используйте этот код:

   // create the view that will execute our animation
 UIImageView* YourImageView = [[UIImageView alloc] initWithFrame:self.view.frame];

 // load all the frames of our animation
 YourImageView.animationImages = [NSArray arrayWithObjects:    
                             [UIImage imageNamed:@"01.gif"],
                             [UIImage imageNamed:@"02.gif"],
                             [UIImage imageNamed:@"03.gif"],
                             [UIImage imageNamed:@"04.gif"],
                             [UIImage imageNamed:@"05.gif"],
                             [UIImage imageNamed:@"06.gif"],
                             [UIImage imageNamed:@"07.gif"],
                             [UIImage imageNamed:@"08.gif"],
                             [UIImage imageNamed:@"09.gif"],
                             [UIImage imageNamed:@"10.gif"],
                             [UIImage imageNamed:@"11.gif"],
                             [UIImage imageNamed:@"12.gif"],
                             [UIImage imageNamed:@"13.gif"],
                             [UIImage imageNamed:@"14.gif"],
                             [UIImage imageNamed:@"15.gif"],
                             [UIImage imageNamed:@"16.gif"],
                             [UIImage imageNamed:@"17.gif"], nil];

 // all frames will execute in 1.75 seconds
 YourImageView.animationDuration = 1.75;
 // repeat the animation forever
 YourImageView.animationRepeatCount = 0;
 // start animating
 [YourImageView startAnimating];
 // add the animation view to the main window 
 [self.view addSubview:YourImageView];

Источник

1 голос
/ 27 мая 2016

Проверьте UIImage +animatedImageWithImages:duration: и +animatedImageNamed:duration:.

Из UIImage Ссылка на класс :

Создает и возвращает анимированное изображение из существующего набора изображений.

Этот метод загружает ряд файлов, добавляя ряд чисел к базовому имени файла, указанному в параметре name. Например, если параметр name имеет «image» в качестве своего содержимого, этот метод будет пытаться загрузить изображения из файлов с именами «image0», «image1» и т. Д. Вплоть до «image1024». Все изображения, включенные в анимированное изображение, должны иметь одинаковый размер и масштаб.

0 голосов
/ 13 апреля 2018

Swift 4 версия:

let animationImages = [UIImage(named: "image1.png"), UIImage(named: "image2.png")]
imageView.animationImages = animationImages
imageView.animationDuration = 10
imageView.startAnimating()
0 голосов
/ 08 мая 2013

Вы можете использовать это.

arrayOfImages=[[NSMutableArray alloc]init];
for(int i=1;i<=54;i++)
{
NSString *nameResources=@"haKsequence.png";
NSString *changedString= [NSString stringWithFormat:@"%d", i];
NSString *stringWithoutSpaces = [nameResources     stringByReplacingOccurrencesOfString:@"K" withString:changedString];
[arrayOfImages addObject:(id)[UIImage imageNamed:stringWithoutSpaces].CGImage];
}


self.view.userInteractionEnabled=NO;
i1.hidden=YES;
image1=[[UIImageView alloc]init];
image1.backgroundColor=[UIColor clearColor];
image1.frame = button.frame;//i1 is obshaped buttion
[self.view addSubview:image1];
CAKeyframeAnimation *animation = [CAKeyframeAnimation animationWithKeyPath:@"contents"];
animation.calculationMode = kCAAnimationDiscrete;
animation.duration = 1;
animation.values   = arrayOfMonkeyImages;
[animation setDelegate:self];
animation.repeatCount=3;
[animation setRemovedOnCompletion:YES];
[image1.layer addAnimation:animation forKey:@"animation"];
...