最近写了动态的引导界面。连续帧动画。这里我用的就是利用系统自带的UIImageView的属性animationImages进行动画。
先看一下效果图吧
首先给大家看一下图。
既然是引导页动画,肯定要支持滚动。动画呢 肯定是滑动当前页开始动画。
定义一个UIImageView对象和一个UIScrollView对象 继承UIScrollViewDelegate
#import "IndingController.h"
@interface IndingController ()
@property(nonatomic,strong) UIImageView *imagevView;
@property(nonatomic,strong) UIScrollView *scrolloeView;
{
//创建一个大数组底层图片数组
NSMutableArray *bigArrayImg;
//创一个添加动态图的数组
NSMutableArray *images;
}
初始化scrolloeView
self.scrolloeView = [[UIScrollView alloc]init];
self.scrolloeView.delegate = self;
self.scrolloeView.frame = self.view.bounds;
//设置滚动的内容尺寸
self.scrolloeView.contentSize=CGSizeMake(Main_Screen_Width*5, 0);
self.scrolloeView.showsHorizontalScrollIndicator=NO;
self.scrolloeView.pagingEnabled=YES;
self.scrolloeView.bounces=NO;
[self.view addSubview:self.scrolloeView];
//初始化数组 这个数组装的是某一张的imagevView动画加载完成的背景图 如果没有背景图 动画加载完毕就会显示黑屏,
bigArrayImg = [NSMutableArray arrayWithObjects:@"guide0_29",@"guide1_29",@"guide2_29",@"guide3_29",@"guide4_29", nil];
///创建imageView动画
写一个调用方法
- (void)createPngAnimal
{
//scrolloeView上滑动的张数=bigArrayImg.count。
for (int i = 0; i< bigArrayImg.count; i++)
{
gifImageViewVCX = [[UIImageView alloc] init];
gifImageViewVCX.frame = CGRectMake(i*Main_Screen_Width, 0, Main_Screen_Width, Main_Screen_Height);
///一定先给每张图设置好背景图片,不然动画加载完毕会黑屏
gifImageViewVCX.image = [UIImage imageNamed:bigArrayImg[i]];
//一定要给imageview设置tag值 方便滚动的时候能找到相对应的图片进行动画
gifImageViewVCX.tag = (i + 1) * 100;
//初始化存储动态图每一帧的图片数组
arrayimg = [[NSMutableArray alloc]init];
//因为我每个动画是30张图 所以直接<30.
for (int k = 0; k< 30; k++)
{
NSString *imageStr = [NSString stringWithFormat:@"guide%i_%i",i,k];
UIImage *image = [UIImage imageNamed:imageStr];
//将image对象存到arrayimg数组
[arrayimg addObject:image];
}
//animationImages是UIImageView的属性 它的返回值是装UIImage对象的数组。
gifImageViewVCX.animationImages = arrayimg; //获取Gif图片列表
gifImageViewVCX.animationDuration = 1.5f; //执行一次完整动画所需的时长
gifImageViewVCX.animationRepeatCount = 1; //动画重复次数
[self.scrolloeView addSubview:gifImageViewVCX];
}
}
上面只是赋好值了 并没有让它动画 真的动画的是在scrollview的代理方法里
//scrollView结束滚动的代理方法
-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
CGFloat offsetX = scrollView.contentOffset.x;
double page = offsetX/scrollView.frame.size.width;
//获取滚动视图的当前界面
self.pageControl.currentPage = page;
//将imageView的tag值与滚动视图的值相对应 这样就能找到滚动的是那个界面 应该哪个界面开始动画
NSInteger nsInteger = (NSInteger)((page + 1) * 100);
//调用开始动画方法
[self playAnimation:nsInteger];
}
//开始动画
-(void)playAnimation:(NSInteger)page
{
UIImageView *newImageView = [self.scrolloeView viewWithTag:page];
if (newImageView != nil)
{
//开始动画
[newImageView startAnimating];
}
}
这样还不行!因为动画是在scrollView的代理方法执行的 刚进入界面是没有调用的。
所以要根据你的tag值在viewdidload方法里再调用开始动画这个方法
- (void)viewDidLoad
{
[super viewDidLoad];
//调用imageView
[self createPngAnimal];
//开始动画 因为我第一组图片的tag值是100 所以我传了100。
[self playAnimation:100];
}
如有错误还请大神指点一二。