文档

渲染卡片

本文介绍了在 iOS 客户端渲染卡片的整体实现流程。

渲染卡片的流程分为四部分。第一步,组装卡片配置信息;第二步,根据配置信息请求卡片,获取卡片实例;第三步,通过卡片实例,使用卡片 View 去渲染;第四步,在整个业务完成后,在 destroy 声明周期中,释放卡片。具体流程如下:

  1. 组装卡片配置信息。

    创建配置信息,并设置各种参数。

    - (void)createCubeConfig {
                    // 设置卡片参数
        CubeCardConfig *cardConfig = [[CubeCardConfig alloc] init];
        // 卡片版本
        [cardConfig setVersion:@"1.0.0.0"];
        // 后台创建的卡片 ID
        [cardConfig setTemplteId:@"987654321"];
        // 预设宽度
        [cardConfig setWidth:MP_Screen_Width - 40];
        // 预设高度
        [cardConfig setHeight:CGFLOAT_MAX];
    }

  2. 请求卡片。

    根据组装好的卡片配置信息请求卡片,卡片引擎会去服务端获取卡片模板信息。可以使用 createCard 方法一次请求一个卡片,也可以使用 createCards 方法一次请求多个卡片。

    - (void)requestCard {
        // 加载单个卡片
        [[[CubeService sharedInstance] getEngine] createCard:cardConfig callback:self];
        
        NSMutableArray *cardArray = [NSMutableArray array];
        [cardArray addObject:cardConfig];
        [cardArray addObject:cardConfig];
    
        // 加载多个卡片
        [[[CubeService sharedInstance] getEngine] createCards:cardArray callback:self];
    }

  3. 渲染卡片。

    拿到卡片信息之后,生成卡片 View,然后在主线程中进行渲染。在此环节中需要进行异常判断,防止未顺利获取到卡片信息的情况发生。

    #pragma mark---CrystalCardCallback
    - (void)onLoaded:(CubeCard *)card cardType:(CCardType)cardType config:(CubeCardConfig *)config erroCode:(CubeCardResultCode)erroCode {
        if (!card) {
            NSString *errMsg = [NSString stringWithFormat:@"创建失败:templteId=%@,style=%d, error=%d", [config templteId], cardType, erroCode];
            NSLog(@"错误信息:%@", errMsg); 
            return;
        }
        
        NSLog(@"创建成功 succ %@ style %d error %d", [config templteId], cardType, erroCode);
    
        dispatch_async(dispatch_get_main_queue(), ^{        
            //主线程刷新UI操作
            CubeView *view = [[[CubeService sharedInstance] getEngine] createView];
            CGSize size = [card getSize];
            
            if (![view isEqual:[NSNull null]]) {
                [view setFrame:CGRectMake(0, 0, MP_Screen_Width - 40, size.height)];
                [card renderView:view];
            }
            
            [self.view addSubView:view];
        });
    }
  4. 释放卡片。

    卡片使用完成之后,需要释放卡片的内存资源,通常是在页面的 dealloc 生命周期里调用或者主动销毁。

    - (void)destoryCubeService {
        //销毁卡片引擎
        if (![[[CubeService sharedInstance] getEngine] isEqual:[NSNull null]]) {
            [[CubeService sharedInstance] destroyEngine];
        }
        
        //删除卡片视图
        [self.view removeAllSubviews];
    }
  • 本页导读 (0)
文档反馈