欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解iOS如何讓Lottie使用網(wǎng)絡(luò)資源做動畫的實現(xiàn)

 更新時間:2023年02月03日 08:35:22   作者:QYizhong  
這篇文章主要為大家介紹了iOS如何讓Lottie使用網(wǎng)絡(luò)資源做動畫實現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

背景

手上有需求需要使用CDN資源來讓Lottie做動畫,但由于動畫需要加載圖片,而Lottie提供的初始化接口只能加載json配置,Github上的issues也沒人回答,因此特地寫下本文記錄一下方案。

為了實現(xiàn)這個功能還把Lottie看了一遍也是醉了。。。

方案

首先需要明確的一個點是如果你的Lottie資源帶圖片,那么直接使用LOTAnimationView的initWithContentsOfURL:方法是無法自動加載圖片資源的。因為加載圖片需要為LOTComposition設(shè)置baseURL,但通過url初始化animatonView時,由于json配置需要異步加載,所以該view的sceneModel為空,你無法直接設(shè)置,而view內(nèi)部又沒有加載完成的回調(diào),因此只能通過監(jiān)聽sceneModel設(shè)置或者生成一個sceneModel傳入這兩種方式來實現(xiàn)Lottie圖片資源加載。

以下介紹實現(xiàn)方式。

1. 實現(xiàn)LOTAnimationDelegate代理

首先需要實現(xiàn)LOTAnimationView的圖片請求代理方法。Lottie內(nèi)部不會自行請求圖片,而是通過代理方法的形式將圖片請求拋到外部實現(xiàn)。

- (void)animationView:(LOTAnimationView *)animationView fetchResourceWithURL:(NSURL *)url completionHandler:(LOTResourceCompletionHandler)completionHandler {
    [CDNService requestLottieImageWithURL:url completion:^(UIImage * _Nullable image, NSError * _Nullable error) {
        if (completionHandler) {
            completionHandler(image, error);
        }
    }];

}

2. 生成LOTComposition

其次,由于外部業(yè)務(wù)無法直接感知LOTAnimationView內(nèi)部生成的LOTComposition的時機(jī),因此可以選擇自己生成它,并設(shè)置baseURL。

+ (void)requestLottieModelWithURL:(NSURL *)url completion:(void(^)(LOTComposition * _Nullable sceneModel,  NSError * _Nullable error))completion {
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(void) {
        NSData *animationData = [NSData dataWithContentsOfURL:url];
        if (!animationData) {
            return;
        }
        NSError *error;
        NSDictionary *animationJSON = [NSJSONSerialization JSONObjectWithData:animationData options:0 error:&error];
        if (error || !animationJSON) {
            if (completion) {
                completion(nil, error);
            }
            return;
        }
        LOTComposition *model = [[LOTComposition alloc] initWithJSON:animationJSON withAssetBundle:[NSBundle mainBundle]];
        dispatch_async(dispatch_get_main_queue(), ^(void) {
            [[LOTAnimationCache sharedCache] addAnimation:model forKey:url.absoluteString];
            //注意,這里的baseURL是你的請求path,需要根據(jù)你的業(yè)務(wù)情況自行設(shè)置
            model.baseURL = @"https://os.xxx.cn/lottie/animation/";
            model.cacheKey = url.absoluteString;
            if (completion) {
                completion(model, nil);
            }
        });
    });
}

需要注意的是LOTComposition的baseURL設(shè)置,不僅需要查看Lottie的json配置文件,還需要關(guān)注服務(wù)端存儲Lottie文件的路徑。

假設(shè)你有一個叫animation的Lottie資源,那么請先打開配置json觀察assets.u的值。這里假設(shè)assets.u為"images/",則你需要在服務(wù)端存儲的文件結(jié)構(gòu)如下:

- animation
    - data.json
    - images
        - img_0.png
        - img_1.png

此時,如果json的請求url是os.xxx.cn/lottie/anim… ,那么需要給LOTComposition的baseURL設(shè)置為os.xxx.cn/lottie/anim… 。

3. 初始化LOTAnimationView

最后只需要請求資源并傳給LOTAnimationView即可。

- (LOTAnimationView *)animationView {
    if (!_animationView) {
        //注意,如果想先初始化view再請求資源,不要使用new或者init來初始化
        _animationView = [[LOTAnimationView alloc] initWithFrame:CGRectZero];
        _animationView.animationDelegate = self;
        NSURL *url = [NSURL URLWithString:@"https://os.xxx.cn/lottie/animation/data.json"];
        //請求json配置,生成LOTComposition后傳給view
        @weakify(self);
        [CCDNService requestLottieModelWithURL:url completion:^(LOTComposition * _Nullable sceneModel, NSError * _Nullable error) {
            @strongify(self);
            self.animationView.sceneModel = sceneModel;
        }];
    }
    return _animationView;
}

以上就是iOS如何讓Lottie使用網(wǎng)絡(luò)資源做動畫的詳細(xì)內(nèi)容,更多關(guān)于iOS Lottie網(wǎng)絡(luò)資源做動畫的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • iOS應(yīng)用開發(fā)中使UITextField實現(xiàn)placeholder屬性的方法

    iOS應(yīng)用開發(fā)中使UITextField實現(xiàn)placeholder屬性的方法

    這篇文章主要介紹了iOS應(yīng)用開發(fā)中使UITextField實現(xiàn)placeholder屬性的方法,示例代碼為傳統(tǒng)的Objective-C語言,需要的朋友可以參考下
    2016-04-04
  • ios利用 AFN 上傳相冊或者拍照圖片

    ios利用 AFN 上傳相冊或者拍照圖片

    這篇文章主要介紹了ios利用 AFN 上傳相冊或者拍照圖片的相關(guān)資料,非常具有實用價值,需要的朋友可以參考下
    2017-06-06
  • iOS制作framework靜態(tài)庫圖文教程

    iOS制作framework靜態(tài)庫圖文教程

    這篇文章主要為大家詳細(xì)介紹了iOS制作framework靜態(tài)庫圖文教程,感興趣的小伙伴們可以參考一下
    2016-08-08
  • iOS push側(cè)滑返回功能實現(xiàn)方法

    iOS push側(cè)滑返回功能實現(xiàn)方法

    這篇文章主要為大家詳細(xì)介紹了iOS push側(cè)滑返回功能實現(xiàn)方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • Nib文件是什么?Nib文件打開方法

    Nib文件是什么?Nib文件打開方法

    這篇文章主要介紹了Nib文件是什么?Nib文件打開方法,nib文件是Cocoa App的界面資源,這種文件直接用xcode是不能被打開的,要修改后才能打開,本文就講解了修改方法,需要的朋友可以參考下
    2015-04-04
  • IOS 中 new 和 alloc init 的對比

    IOS 中 new 和 alloc init 的對比

    這篇文章主要介紹了IOS 中 new 和 alloc init 的區(qū)別的相關(guān)資料,需要的朋友可以參考下
    2017-02-02
  • iOS實現(xiàn)裁剪框和圖片剪裁功能

    iOS實現(xiàn)裁剪框和圖片剪裁功能

    這篇文章主要為大家詳細(xì)介紹了iOS實現(xiàn)裁剪框和圖片剪裁功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-03-03
  • iOS功能實現(xiàn)之列表的橫向刷新加載

    iOS功能實現(xiàn)之列表的橫向刷新加載

    現(xiàn)今已有越來越多的APP需要橫向刷新的需求,而橫向刷新加載的控件卻寥寥無幾,即使有也是集成起來非常的麻煩,恰巧最近項目中又用到了這個功能,所以干脆自己來造個輪子,方便大家使用。
    2016-08-08
  • 淺談關(guān)于如何檢測iOS14本地網(wǎng)絡(luò)權(quán)限的一些思路

    淺談關(guān)于如何檢測iOS14本地網(wǎng)絡(luò)權(quán)限的一些思路

    這篇文章主要介紹了淺談關(guān)于如何檢測iOS14本地網(wǎng)絡(luò)權(quán)限的一些思路,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • 淺析Objective-C中分類Category的使用

    淺析Objective-C中分類Category的使用

    這篇文章主要介紹了淺析Objective-C中分類Category的使用,使用Category對類進(jìn)行擴(kuò)展可以訪問原始類的實例變量,需要的朋友可以參考下
    2016-03-03

最新評論