代码改变世界

ios-序列帧动画核心代码简单介绍以及封装

2016-03-24 00:33  菜鸟Alex  阅读(990)  评论(0编辑  收藏  举报
  • imageView的属性,isAnimating在这里用来当正执行;一个动画的时候,禁止开启其他动画.
  • UIImage imageNamed这个方法加载的图片是有缓存的,它是把所有的图片先加载到内存中,再执行动画
    • 优点是: 执行动画效率高,启动时间短.
    • 缺点: 内存可能占用过大,造成程序闪退
  • UIImage imageWithContentsOfFile 这种方式是通过加载图片的路径的方式加载图片.添加到可变数组的是图片的路径.在执行动画的时候是根据图片的路径来加载图片到内存中的.
- (void)beginAnimationWithImageCount:(int)count imageName:(NSString *)imageName {
    
    // 如果当前的图片框正在执行一个动画, 那么不开启一个新的动画
    if (self.imgView1.isAnimating) return;
    
    // 1. 把要执行动画的图片设置UIImageView(图片框)
    NSMutableArray *arrayM = [NSMutableArray array];
    for (int i = 0; i < count; i++) {
        NSString *imgName = [NSString stringWithFormat:@"%@%03d", imageName, i + 1];
        
        // 通过+ imageNamed:这个方法加载的图片, 是有缓存的
        // UIImage *img = [UIImage imageNamed:imgName];
        
        // 没有缓存的加载图片的方式:
        // 1》 确定图片的完整路径
        NSString *img_path = [[NSBundle mainBundle] pathForResource:imgName ofType:@"png"];
        // 2》通过调用imageWithContentsOfFile:方法来加载图片
        UIImage *img = [UIImage imageWithContentsOfFile:img_path];
        
        
        // 把图片对象添加到数组中
        [arrayM addObject:img];
    }
    // 把要执行动画的图片设置给图片框
    self.imgView1.animationImages = arrayM;
    
    
    // 2. 设置动画的持续时间
    self.imgView1.animationDuration = 0.1 * self.imgView1.animationImages.count;
    
    
    // 3. 设置动画的重复次数
    self.imgView1.animationRepeatCount = 1;
    
    
    // 4. 启动动画
    [self.imgView1 startAnimating];
    
    
    // 清除图片内存
    // self.imgView1.animationImages = nil;
    // [self.imgView1 setAnimationImages:nil];
    
    // 等待动画执行完毕后, 再清除内存
    [self.imgView1 performSelector:@selector(setAnimationImages:) withObject:nil afterDelay:self.imgView1.animationDuration];

}