onevcat / APNGKit

High performance and delightful way to play with APNG format in iOS.
MIT License
2.21k stars 201 forks source link

Missed frame for image #135

Closed zhudi12358 closed 1 year ago

zhudi12358 commented 1 year ago

[APNGKit] Missed frame for image APNGKit.APNGImage[APNGKit] Missed frame for image APNGKit.APNGImage: target index: 24, while displaying the current frame index: 23

我不理解为啥会报这个错,有大佬指点一下吗?以下是我代码:

lazy var consultionImageView: APNGImageView = { let imgV = APNGImageView(frame: CGRect(x: 10, y: 0, width: 30, height: 38)) if let url = Bundle.main.url(forResource: "consultion", withExtension: "png", subdirectory: nil) { let img = try? APNGImage(fileURL: url) imgV.image = img } imgV.isUserInteractionEnabled = false return imgV }()

onevcat commented 1 year ago

在后台解码器没有能在一帧的时间内解码出下一帧时,会报告这个错误。一般是因为帧率过高,或者CPU在忙着做其他事情,导致解码速度不足,为了不卡住界面,APNGKit 默认的处理方式是丢帧。这个是基于性能限制和体验的一种trade off。如果每一帧都很重要的话,建议使用 .preRenderAllFrames 来确保所有帧都预先处理,不过这需要预支CPU资源和更多的内存占用。

let img = try? APNGImage(fileURL: url, decodingOptions: [.preRenderAllFrames])
zhudi12358 commented 1 year ago

非常感谢大佬解惑。 我添加了decodingOptions: [.preRenderAllFrames]后,依然会有偶现的这个报错,频次比之前降低很多。 我的动画只是一个按钮,只是丢帧的话不影响效果,就先这样吧。 祝大佬前程似锦!