     private var displayingFrameStarted: CFTimeInterval?
     // The current displaying frame index in its decoder.
     private var displayingFrameIndex = 0
+    // Returns the next frame to be rendered. If the current displaying frame is not the last, return index of the next
+    // frame. If the current displaying frame is the last one, returns 0 regardless whether there is another play or not.
     private var nextFrameIndex: Int {
         guard let image = _image else {
             return 0

    }
    
    open func startAnimating() {
        guard !isAnimating else {
            return
        }

        }
    }
    
    /// Set a static image for the image view. This is useful when you need to set some fallback image if the decoding
    /// of `APNGImage` results in a failure.
    ///
    /// A regular case is the input data is not a valid APNG image but a plain image, then you should revert to use the
    /// normal format, aka, `UIImage` to represent the image. Creating an `APNGImage` with such data throws a
    /// `APNGKitError.ImageError.normalImageDataLoaded` error. You can check the error's `normalImage` property and set
    /// it to this property as a fallback for wrong APNG images:
    ///
    /// ```swift
    /// do {
    ///     animatedImageView.image = try APNGImage(named: "some_apng_image")
    /// } catch {
    ///     animatedImageView.staticImage = error.apngError?.normalImage
    ///     print(error)
    /// }
    /// ```
    public var staticImage: UIImage? = nil {
        didSet { _imageView.image = staticImage }
    }
