当前位置: 首页 > 工具软件 > YYKit > 使用案例 >

YYKit播放图片动画(gif/帧动画/精灵图动画)

酆君墨
2023-12-01

1、显示动画类型gif的图片

    #import <YYImage.h>

    #import <YYAnimatedImageView.h>

    YYImage *gifImage = [YYImage imageNamed:@"yygif.gif"];

    YYAnimatedImageView *imageView = [[YYAnimatedImageView alloc] initWithImage:gifImage];

//    imageView.contentMode = UIViewContentModeScaleAspectFit;

    imageView.frame = CGRectMake(50, 50, 50, 50);

    [self.view addSubview:imageView];

2、精灵图动画

    UIImage *spriteImage = [UIImage imageNamed:@"sprite.png"];//获取图片

    NSMutableArray *contentRectsAryM = [[NSMutableArray alloc] init];//精灵图每一小张的Rect(大小和位置)

    NSMutableArray *frameAnimationDuration = [[NSMutableArray alloc] init];//与rect数组对应,每一小张对应的动画时间

    NSInteger rowNum = 6.f;//一行上有几小张

    NSInteger colNum = 8.f;//一列上有几小张

    for (NSInteger i=0; i<rowNum; i++

        for (NSInteger j=0; j<colNum; j++

            CGRect rect = CGRectMake(i*spriteImage.size.width/rowNum, j*spriteImage.size.height/colNum, spriteImage.size.width/rowNum, spriteImage.size.height/colNum);

            NSValue *rectValue = [NSValue valueWithCGRect:rect];

            [contentRectsAryM addObject:rectValue];

            [frameAnimationDuration addObject:@(1/15.f)];

        }

    }

    YYSpriteSheetImage *yyspriteImage = [[YYSpriteSheetImage alloc] initWithSpriteSheetImage:spriteImage contentRects:contentRectsAryM frameDurations:frameAnimationDuration loopCount:0];//UIImage转为YYSpriteSheetImage

//    创建视图 加载YYSpriteSheetImage

    YYAnimatedImageView *spriteImageView = [[YYAnimatedImageView alloc] initWithImage:yyspriteImage];

    spriteImageView.frame = CGRectMake(50, 50+270*0.5+10, spriteImage.size.width/6.f, spriteImage.size.height/8.f);

    spriteImageView.clipsToBounds = YES;

    [self.view addSubview:spriteImageView];

3、帧动画,切换图片实现动画效果:

坑点:要获取到图片的路径,所以不要将图片放到类似images.xcasset里面,这里面的图片只能通过 ... imageName...获取到,要将图片直接放到工程目录,然后通过

[[NSBundle mainBundle] pathForResource:xxx ofType:nil]来获取图片路径

    NSMutableArray *imagePathsM = [NSMutableArray array];//存有图片路径的数组

    for (int p=0; p<8; p++) {

        NSString *path = [[NSBundle mainBundle] pathForResource:[NSString stringWithFormat:@"%d.png", p+1] ofType:nil];

        [imagePathsM addObject:path];

    }

    NSArray *times = @[@0.1, @0.2, @0.1, @0.1, @0.1, @0.1, @0.1, @0.1];//每张图的动画时间

    YYFrameImage *frameImage = [[YYFrameImage alloc] initWithImagePaths:imagePathsM frameDurations:times loopCount:0];//0为无限循环

    YYAnimatedImageView *imageViewFrame = [[YYAnimatedImageView alloc] initWithImage:frameImage];

    imageViewFrame.frame = CGRectMake(50, 50, 210, 100);

    [self.view addSubview:imageViewFrame];

4、进度控制:

YYImage//gif等其他

YYSpriteSheetImage//精灵图

YYFrameImage//帧动画

共有属性 animatedImageFrameCount 即图片张数

animatedImageFrameCount*progress//progress视为进度,再通过

YYAnimatedImageView的属性currentAnimatedImageIndex来控制动画的进度!

注意:在精灵图动画,控制进度有效的条件是动画必须在执行,如果动画停止了,进度就无法调整了

        imageView.currentAnimatedImageIndex = gifImage.animatedImageFrameCount*0.2;

        imageViewFrame.currentAnimatedImageIndex = frameImage.animatedImageFrameCount*0.2;

        spriteImageView.currentAnimatedImageIndex = yyspriteImage.animatedImageFrameCount*0.5;

YYAnimatedImageView autoPlayAnimatedImage属性控制图片动画是否自动播放

 类似资料: