一:首先我们看一下这个运行时的主界面,程序一启动就要呈现的的图片需要放在Assets.xcassets里,
用于动画帧的图片放在supporting Files里
1.里面的小图片都是Button,还有在肚子上和头上的隐藏的Button;
2.底部是一个ImageView,放着一张Tom的图片
imageView和Button直接在storyboard中拖过去,不要忘记建立连线(很初学者不明白为什么有的需要连线,有的不需要,在这里解释一下,如果你在代码中需要更改,或是用 到控件的属性时,就需要建立连线,创建可用对象)
二:下面我们来看看代码
以drink为例:drink_%02d.jpg 表示存放的drink_01~drink_81,大家也可以用其他的图片素材试试看
IBAction)drinkButton:(id)sender {
//首先创建一个数组存放图片对象
NSMutableArray * Array1=[NSMutableArrayarray];
//使用for循环加载图片
for(int i=0;i<81;i++)
{
//获取文件名
NSString *fileName = [NSStringstringWithFormat:@"drink_%02d.jpg",i];
//获取文件目录
NSString*path=[[NSBundlemainBundle]pathForResource:fileNameofType:nil];
//获取图片对象
UIImage*image=[UIImageimageWithContentsOfFile:path];
//把图片插到可变数组
addObject:image];
}
//动画
//设置图片动画
self.mainPhotoView.animationImages=Array1;
//设置动画播放的次数
self.mainPhotoView.animationRepeatCount =1;
//设置动画播放时长
self.mainPhotoView.animationDuration =self.mainPhotoView.animationImages.count *0.07;
//开始播放
[self.mainPhotoViewstartAnimating];
//计算动画时间
CGFloat time=self.mainPhotoView.animationDuration+0.1;
//释放内存,延时执行
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(time * NSEC_PER_SEC)),dispatch_get_main_queue(), ^{
self.mainPhotoView.animationImages=nil;
});
}
其他的功能实现和这个类似,所以我们只需要把上面的代码复制,粘贴在其他的Button里,更改一下图片名和数量就可以实现其他功能,但是这样显得程序代码繁杂,代码数量大,所以此时我们需要封装一下,将其写在一个方法里,然后调用就好了
方法如下:(把name和count图片数量变成了可传递的参数)
void)PAimageName:(NSString*) name imageCount:(int) count{
if ([self.mainPhotoViewisAnimating]) {
return;
}
//首先创建一个数组存放图片对象
NSMutableArray * Array1=[NSMutableArrayarray];
//使用for循环加载图片
for(int i=0;i<count;i++)
{
//获取文件名
NSString *fileName = [NSStringstringWithFormat:@"%@_%02d.jpg",name,i];
//获取文件目录
NSString*path=[[NSBundlemainBundle]pathForResource:fileNameofType:nil];
//获取图片对象
UIImage*image=[UIImageimageWithContentsOfFile:path];
//把图片插到可变数组
addObject:image];
}
//动画
//设置图片动画
self.mainPhotoView.animationImages=Array1;
//设置动画播放的次数
self.mainPhotoView.animationRepeatCount =1;
//设置动画播放时长
self.mainPhotoView.animationDuration =self.mainPhotoView.animationImages.count *0.07;
//开始播放
[self.mainPhotoViewstartAnimating];
//计算动画时间
CGFloat time=self.mainPhotoView.animationDuration+0.1;
//释放内存,延时执行
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(time * NSEC_PER_SEC)),dispatch_get_main_queue(), ^{
self.mainPhotoView.animationImages=nil;
});
}
然后把这个方法在Button里执行就好了
还是很有意思的,主要都是通过Button实现的