您的位置:首页 > 产品设计 > UI/UE

UIImageView帧动画

2016-04-22 09:48 106 查看
我们在使用UIImageView帧动画时会碰到加载到内存的图片不会自动释放,占用很多的内存,这时我们可能使用 UIImage imageWithContentsOfFile 并配合 imageView.animationImages = nil; 来清理不用的缓存动画图片。具体如下:

UIImageView帧动画相关属性和方法:

需要播放的序列帧图片数组(里面都是UIImage对象,会按顺序显示里面的图片)

@property(nonatomic,copy) NSArray *animationImages;

帧动画的持续时间

@property(nonatomic) NSTimeInterval animationDuration;

帧动画的执行次数(默认是无限循环)

@property(nonatomic) NSInteger animationRepeatCount;

开始执行帧动画

- (void)startAnimating;

停止执行帧动画

- (void)stopAnimating;

是否正在执行帧动画

- (BOOL)isAnimating;

例:加载动画图片的方式

// 1.加载所有的动画图片

- (void)runAnimationWithCount:(int)count name:(NSString *)name

{

if (self.imageView.isAnimating) return;

// 1.加载所有的动画图片

NSMutableArray *images = [NSMutableArray array];

for (int i = 0; i

// 计算文件名

NSString *filename = [NSString stringWithFormat:@"%@_d.jpg", name, i];

// 加载图片

// imageNamed: 有内存缓存直到程序退出才释放(传入文件名)

// UIImage *image = [UIImage imageNamed:filename];

// imageWithContentsOfFile: 没有缓存,自动释放(传入文件的全路径)

NSBundle *bundle = [NSBundle mainBundle];

NSString *path = [bundle pathForResource:filename ofType:nil];

UIImage *image = [UIImage imageWithContentsOfFile:path];

// 添加图片到数组中

[images addObject:image];

}

self.imageView.animationImages = images;

// 2.设置播放次数(1次)

self.imageView.animationRepeatCount = 1;

// 3.设置播放时间

self.imageView.animationDuration = images.count * 0.05;

[self.imageViewstartAnimating];

// 4.动画放完1秒后清除内存

CGFloat delay = self.tom.animationDuration;

[self.tom performSelector:@selector(setAnimationImages:) withObject:nil afterDelay:delay];

}

- (IBAction)onButtonClickHandler:(id)sender
{

    

    UIImageView *heartImageView = [[UIImageViewalloc]initWithFrame:CGRectMake(100.0, 100.0, 50.0, 50.0)];

    [self.view addSubview:heartImageView];

    NSMutableArray *images = [[NSMutableArrayalloc]initWithCapacity:7];

    for (int i=1; i<=7; i++) {

        [images addObject:[UIImageimageNamed:[NSStringstringWithFormat:@"xxx%d.png",i]]];

    }

    

    heartImageView.animationImages = images;

    heartImageView.animationDuration = 0.4 ;

    heartImageView.animationRepeatCount = 1;

    [heartImageView startAnimating];

    [NSTimer scheduledTimerWithTimeInterval:heartImageView.animationDuration

                                     target:self

                                   selector:@selector(onFrameAnimationFinished:)

                                   userInfo:heartImageView

                                    repeats:NO];

}

- (void)onFrameAnimationFinished:(NSTimer *)timer{

    UIImageView * imageView = (UIImageView *)[timeruserInfo];

    [imageView removeFromSuperview];

}


UIImageView帧动画的使用以及缓存的问题

 (2015-02-24 13:57:18)


转载▼

标签: 


ios

 


mainbundle

 


nsbundle

 


uiimageview

 


缓存

分类: ios开发
//播放动画 

- (void)runAnimationWithCount:(int)count name:(NSString *)name

{

    if (self.tom.isAnimating) return;

    

    // 1.加载所有的动画图片

    NSMutableArray *images = [NSMutableArray array];

    

    for (int i = 0; i

        // 计算文件名

        NSString *filename = [NSString stringWithFormat:@"%@_d.jpg", name, i];

        // 加载图片

        //缓存就是

        // imageNamed: 有缓存机制(传入文件名);好处是快,坏处就是占内存

//        UIImage *image = [UIImage imageNamed:filename];

        

        // imageWithContentsOfFile: 没有缓存(传入文件的全路径)

        NSBundle *bundle = [NSBundle mainBundle];

        NSString *path = [bundle pathForResource:filename ofType:nil];

        UIImage *image = [UIImage imageWithContentsOfFile:path];

        

        // 添加图片到数组中

        [images addObject:image];

    }

    self.tom.animationImages = images;

    

    // 2.设置播放次数(1次)

    self.tom.animationRepeatCount = 1;

    

    // 3.设置播放时间

    self.tom.animationDuration = images.count * 0.05;

    

    [self.tom startAnimating];

    

    // 4.动画放完1秒后清除内存

    CGFloat delay = self.tom.animationDuration + 1.0;

    [self.tom performSelector:@selector(setAnimationImages:) withObject:nil afterDelay:delay];

//    [self performSelector:@selector(clearCache) withObject:nil afterDelay:delay];

}

//- (void)clearCache

//{

////    self.tom.animationImages = nil;

//    

//    [self.tom setAnimationImages:nil];

//}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: