Objective C中如何使用UIImage数组加载并动画展示Images.xcassets图片
问题解答
1. 是否可以加载Images.xcassets内的图片到数组实现序列动画
完全可以。你之前的写法有误,[UIImage imageNamed:@"FolderName"]传文件夹名只能加载该文件夹对应的单一资源(比如文件夹本身是图片集时才会返回单图),要加载序列帧需要你提前把24张图片在xcassets里改为统一前缀+连续序号的命名格式,比如anim_0、anim_1直到anim_23。
2. 序列动画用SVG是否更优
要看你的实际使用场景:
- 如果你的动画是矢量可无损缩放的场景,用SVG单文件做Lottie动画或者矢量帧动画更省包体积,也不需要做多倍率适配,比PNG序列的优势大很多
- 但如果你的动画本身是位图素材(比如实拍动效、带复杂纹理的效果),SVG反而会因为矢量描述文件过大、渲染性能不如预渲染的位图序列,这种场景用PNG序列更合适
- 注意:原生
UIImage不直接支持SVG矢量图的序列帧加载,如果你要使用SVG序列,需要接入第三方SVG解析库,或者直接用Lottie实现矢量动效,开发成本会比原生位图序列高一点
3. 加载图片数组的实现代码
确认你xcassets里的24张序列图已经重命名为统一前缀+数字序号的格式,示例里以frame_0到frame_23的命名规则为例,代码如下:
NSMutableArray *animationImages = [NSMutableArray array]; NSInteger totalFrameCount = 24; for (NSInteger i = 0; i < totalFrameCount; i++) { NSString *imageName = [NSString stringWithFormat:@"frame_%ld", (long)i]; UIImage *image = [UIImage imageNamed:imageName]; if (image) { [animationImages addObject:image]; } } // 配置动画到UIImageView UIImageView *animImageView = [[UIImageView alloc] init]; animImageView.animationImages = animationImages; animImageView.animationDuration = 1.0; // 整个动画播放一轮的时长,单位秒,可按需调整 animImageView.animationRepeatCount = 0; // 0代表无限循环,设置其他正整数为对应循环次数 [animImageView startAnimating];
注意:如果你的文件夹在xcassets里开启了「Provides Namespace」属性,那图片名需要加上文件夹前缀,比如文件夹名为
FolderName,imageName应该写为[NSString stringWithFormat:@"FolderName/frame_%ld", (long)i],否则会加载不到图片。
内容的提问来源于stack exchange,提问作者VinuIsNotUnix
相关产品推荐
相关产品推荐

