- 
          
 - 
                Notifications
    
You must be signed in to change notification settings  - Fork 3.8k
 
Open
Description
The following stacks are prone to stuck:
-[UIImage initWithContentsOfFile:cache:] + 72
Lottie.BundleImageProvider.imageForAsset(asset: Lottie.ImageAsset) -> __C.CGImageRef? (<compiler-generated>:0)
protocol witness for Lottie.AnimationImageProvider.imageForAsset(asset: Lottie.ImageAsset) -> __C.CGImageRef? in conformance Lottie.BundleImageProvider : Lottie.AnimationImageProvider in Lottie (<compiler-generated>:0)
Lottie.(CachedImageProvider in _8A1F1C74EB1392CC3FF40AE635A563B8).imageForAsset(asset: Lottie.ImageAsset) -> __C.CGImageRef? (CachedImageProvider.swift:27)
protocol witness for Lottie.AnimationImageProvider.imageForAsset(asset: Lottie.ImageAsset) -> __C.CGImageRef? in conformance Lottie.(CachedImageProvider in _8A1F1C74EB1392CC3FF40AE635A563B8) : Lottie.AnimationImageProvider in Lottie (<compiler-generated>:0)
Lottie.ImageLayer.setupImage(context: Lottie.LayerContext) -> () (ImageLayer.swift:42)
makeAnimationLayer (<compiler-generated>:0)
setupLayerHierarchy (CALayer+setupLayerHierarchy.swift:55)
Lottie.PreCompLayer.setup(context: Lottie.LayerContext) throws -> () (PreCompLayer.swift:60)
makeAnimationLayer (LayerModel+makeAnimationLayer.swift:38)
setupLayerHierarchy (CALayer+setupLayerHierarchy.swift:55)
Lottie.CoreAnimationLayer.(setupChildLayers in _5C367329EBD3162AE78388D54811A38B)() throws -> () (CoreAnimationLayer.swift:248)
The problem mainly appears in the following classes:
ImageLayer
ImageCompositionLayer
Code suggestions:
ImageLayer
func setupImage(context: LayerContext) {
    guard
      let imageAsset = context.animation.assetLibrary?.imageAssets[imageLayer.referenceID]
    else {
      self.imageAsset = nil
      contentsLayer.contents = nil
      return
    }
      
    DispatchQueue.global().async {
        guard
            let image = context.imageProvider.imageForAsset(asset: imageAsset)
        else {
          return
        }
        DispatchQueue.main.async {
            self.contentsLayer.contents = image
        }
    }
    self.imageAsset = imageAsset
    setNeedsLayout()
  }
Metadata
Metadata
Assignees
Labels
No labels