Reputation: 155
I'm wondering if there's anyway to animate an UIImage
.
I know that UIImageViews
are possible to animate but is there any way to do it directly in a UIImage
.
Maybe with Open GL ES or something?
Or are there any other ways you can animate an MPMediaItemArtwork
?
Thanks in advance!
Upvotes: 10
Views: 18283
Reputation: 1305
Swift 4 version:
let animationImages = [UIImage(named: "image1.png"), UIImage(named: "image2.png")]
imageView.animationImages = animationImages
imageView.animationDuration = 10
imageView.startAnimating()
Upvotes: 0
Reputation: 10608
Check UIImage's +animatedImageWithImages:duration:
and +animatedImageNamed:duration:
.
From UIImage Class Reference:
Creates and returns an animated image from an existing set of images.
This method loads a series of files by appending a series of numbers to the base file name provided in the name parameter. For example, if the name parameter had ‘image’ as its contents, this method would attempt to load images from files with the names ‘image0’, ‘image1’ and so on all the way up to ‘image1024’. All images included in the animated image should share the same size and scale.
Upvotes: 1
Reputation:
If you mean animation with a few images, use this code:
// 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];
Upvotes: 8
Reputation: 1558
You can use this.
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"];
Upvotes: 0
Reputation: 1247
Create a UIImageView
and set the property of animationImages
to an array of UIImage
s
Here is an example:
NSArray *animationFrames = [NSArray arrayWithObjects:
[UIImage imageWithName:@"image1.png"],
[UIImage imageWithName:@"image2.png"],
nil];
UIImageView *animatedImageView = [[UIImageView alloc] init];
animatedImageView.animationImages = animationsFrame;
[animatedImageView startAnimating];
If you're targeting iOS 5 you can do this directly in UIImage
without the UIImageView
using
+(UIImage *)animatedImageWithImages:(NSArray *)images duration:(NSTimeInterval)duration
for example,
[UIImage animatedImagesWithImages:animationFrames duration:10];
Upvotes: 13