最近寫了動態(tài)的引導界面横辆。連續(xù)幀動畫。這里我用的就是利用系統(tǒng)自帶的UIImageView的屬性animationImages進行動畫。
先看一下效果圖吧
首先給大家看一下圖缕棵。
既然是引導頁動畫,肯定要支持滾動涉兽。動畫呢 肯定是滑動當前頁開始動畫招驴。
定義一個UIImageView對象和一個UIScrollView對象 ?繼承UIScrollViewDelegate
#import "IndingController.h"
@interface IndingController ()<UIScrollViewDelegate>
@property(nonatomic,strong) UIImageView *imagevView;
@property(nonatomic,strong) UIScrollView *scrolloeView;
{
//創(chuàng)建一個大數(shù)組底層圖片數(shù)組
NSMutableArray *bigArrayImg;
//創(chuàng)一個添加動態(tài)圖的數(shù)組
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];
//初始化數(shù)組 這個數(shù)組裝的是某一張的imagevView動畫加載完成的背景圖 如果沒有背景圖 ?動畫加載完畢就會顯示黑屏,
bigArrayImg = [NSMutableArray arrayWithObjects:@"guide0_29",@"guide1_29",@"guide2_29",@"guide3_29",@"guide4_29", nil];
///創(chuàng)建imageView動畫
寫一個調用方法
- (void)createPngAnimal
{
//scrolloeView上滑動的張數(shù)=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;
//初始化存儲動態(tài)圖每一幀的圖片數(shù)組
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數(shù)組
[arrayimg addObject:image];
}
//animationImages是UIImageView的屬性 它的返回值是裝UIImage對象的數(shù)組。
gifImageViewVCX.animationImages = arrayimg; //獲取Gif圖片列表
gifImageViewVCX.animationDuration = 1.5f;? ? //執(zhí)行一次完整動畫所需的時長
gifImageViewVCX.animationRepeatCount = 1;? //動畫重復次數(shù)
[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的代理方法執(zhí)行的 ?剛進入界面是沒有調用的丹允。
所以要根據你的tag值在viewdidload方法里再調用開始動畫這個方法
- (void)viewDidLoad
{
[super viewDidLoad];
//調用imageView
[self createPngAnimal];
//開始動畫 因為我第一組圖片的tag值是100 所以我傳了100。
[self playAnimation:100];
}
如有錯誤還請大神指點一二袋倔。