2022-10-28

OC调用 3.5.0 Swift版本 Lottie

//  LottieView.swift

//  Lottie-test

//

//  Created by Macmini on 2022/10/26.

//

因为Lottie 没有暴露方法属性给OC文件 所以需要我们自建Swift文件 集成Lottie供OC调用 

importUIKit

importLottie

// @objcMembers 暴露 所有方法 属性给OC文件

@objcMembers class LottieView: UIView {

    //加载 URL 地址

     func showAnimation(url:URL,completionBlock: LottieCompletionBlock? = nil) -> Void {

         let animation = LottieAnimationView.init(frame: self.bounds)

         animation.loopMode= .playOnce

         animation.contentMode = .scaleAspectFit

         self.addSubview(animation)

         LottieAnimation.loadedFrom(url: url , closure: { ani in

             animation.animation= ani

             animation.play(completion: { completionin

                 ifThread.isMainThread{

                     completionBlock!(completion)

                 }else{

                     DispatchQueue.main.async{

                         completionBlock!(completion)

                     }

                 }

                 self.removeFromSuperview()

             })

         },animationCache: LRUAnimationCache.sharedCache)

     }

 //    加载 本地JSON文件

     func show(name: String, completionBlock: LottieCompletionBlock? = nil) -> Void{

         let lota = LottieAnimationView.init(frame: self.bounds)

         lota.loopMode= .playOnce

         lota.contentMode = .scaleAspectFit

         self.addSubview(lota)

         let  animation =LottieAnimation.named(name,animationCache: LRUAnimationCache.sharedCache)

         lota.animation= animation

         lota.play{ completionin

             if Thread.isMainThread {

                 completionBlock!(completion)

             }else{

                 DispatchQueue.main.async{

                     completionBlock!(completion)

                 }

             }

             self.removeFromSuperview()

         }

     }

 //    加载文件路径

     func show(filePath:String, completionBlock: LottieCompletionBlock? = nil) -> Void {

         let lota = LottieAnimationView.init(frame: self.bounds)

         lota.loopMode= .playOnce

         lota.contentMode = .scaleAspectFit

         self.addSubview(lota)

         let  animation =LottieAnimation.filepath(filePath,animationCache: LRUAnimationCache.sharedCache)

         lota.animation= animation

         lota.play{ completionin

             if Thread.isMainThread {

                 completionBlock!(completion)

             }else{

                 DispatchQueue.main.async{

                     completionBlock!(completion)

                 }

             }

             self.removeFromSuperview()

         }

     }

}

以上为自建Swift文件内容 

OC调用

 LottieView * one = [[LottieView alloc]initWithFrame:CGRectMake(0,0,375,668)];

    [UIApplication.sharedApplication.keyWindow addSubview:one];

//            @"https://s3-lover-live.s3.ap-southeast-1.amazonaws.com/829e456bb72b8d09c7d1784d0edfe92f"

    if(sender.tag==1) {

        [one showAnimationWithUrl:[NSURL URLWithString:@"https://s3-lover-live.s3.ap-southeast-1.amazonaws.com/1c6592104bd4882793e54a9e53560f53"] completionBlock:^(BOOL completion) {

        }];

    }else //if (sender.tag == 2)

    {

        [one showWithName:@"data"completionBlock:^(BOOLcompletion) {


        }];

    }

你可能感兴趣的:(2022-10-28)