灯光场景 UI 业务包

更新时间:2023-07-13 07:14:39下载pdf

灯光场景是针对同一个家庭中的全部灯具进行场景设置的功能,帮助您打造丰富的面板色盘样式,支持多样的场景库,能快捷方便地设置家庭灯光场景。

功能介绍

灯光场景 UI 业务包支持的具体能力包括:

  • 创建灯光场景
  • 编辑灯光场景,包括修改场景图标、场景名称、所有设备的情景修改
  • 预览单设备的自定义情景,包括 1 路白光、2 路白光、3 路彩光、1+3 路混光、2+3 路混光
  • 预览单设备的模式情景、炫彩情景、闪烁情景
  • 预览某个灯光场景
  • 单设备亮度调节、色温调节、色相调节
  • 整体亮度调节、整体色温调节

快速集成

在工程的 Podfile 文件中添加灯光场景业务包组件,并执行 pod update 命令:

source 'https://github.com/tuya/tuya-private-specs.git'
source 'https://cdn.cocoapods.org/'
platform :ios, '11.0'

target 'your_target_name' do
  # 添加灯光场景业务包
  pod 'ThingSmartLightSceneBizBundle'
end

服务协议

灯光场景业务包实现 ThingLightSceneProtocolThingLightSceneBizProtocol 以提供服务。

  • ThingLightSceneProtocol.h 协议文件内容为:

    @class ThingLightSceneModel;
    
    @protocol ThingLightSceneProtocol <NSObject>
    
    /// 跳转至「创建灯光场景页」
    - (void)createNewLightScene;
    
    /// 跳转至「编辑灯光场景页」
    - (void)editLightScene:(ThingLightSceneModel *)scene;
    
    @end
    
  • ThingLightSceneBizProtocol.h 协议文件内容为:

    @class ThingLightSceneModel;
    
    @protocol ThingLightSceneBizProtocol <NSObject>
    
    @optional
    
    /// 执行灯光场景
    - (void)executeLightScene:(ThingLightSceneModel *)sceneModel
                    success:(void(^)(BOOL success))success
                    failure:(void(^)(NSError * _Nonnull error))failure;
    
    /// 获取灯光场景列表
    - (void)getLightSceneListWithSuccess:(void(^)(NSArray<ThingLightSceneModel *> * _Nonnull scenes))success
                                failure:(void(^)(NSError * _Nonnull error))failure;
    
    @end
    

依赖服务

调用灯光场景业务包之前,您需要实现以下协议:

  • 协议一:ThingFamilyProtocol

    提供灯光场景组件所需的当前家庭 ID。

    /// 返回当前家庭 ID
    - (long long)currentFamilyId;
    

    如果同时引入了家庭业务包和场景业务包,使用方法请参考 家庭管理 UI 业务包

  • 协议二(已废弃):ThingSmartHomeDataProtocol

    提供灯光场景组件所需的当前家庭信息。

    建议实现 ThingFamilyProtocol 协议方法来提供当前家庭 ID。

    /**
    查询当前的家庭,当前没有家庭的时候,返回 nil。
    
    @return ThingSmartHome
    */
    - (ThingSmartHome *)getCurrentHome;
    
  • 协议三:ThingSmartHouseIndexProtocol

    提供场景组件所需的管理员身份信息。如果非管理员也允许编辑场景,返回 YES 即可。

    /**
    * 是否是当前家庭的管理员。
    *
    * @return YES 代表是管理员
    */
    - (BOOL)homeAdminValidation;
    

接口协议

注意事项

  • 任何接口调用之前,务必确认用户已登录。

  • 调用场景业务包逻辑前,要先实现:

    • ThingFamilyProtocol 中的协议方法 currentFamilyId
    • ThingSmartHouseIndexProtocol 中的协议方法 homeAdminValidation
    #import <ThingSmartBizCore/ThingSmartBizCore.h>
    #import <ThingModuleServices/ThingModuleServices.h>
    #import <ThingSmartDeviceKit/ThingSmartDeviceKit.h>
    
    - (void)registerProtocol {
        // 注册要实现的协议
        [[ThingSmartBizCore sharedInstance] registerService:@protocol(ThingSmartHomeDataProtocol) withInstance:self];
        [[ThingSmartBizCore sharedInstance] registerService:@protocol(ThingSmartHouseIndexProtocol) withInstance:self];
        [[ThingSmartBizCore sharedInstance] registerService:@protocol(ThingFamilyProtocol) withInstance:self];
    }
    
    // 实现对应的协议方法
    - (ThingSmartHome *)getCurrentHome {
        ThingSmartHome *home = [ThingSmartHome homeWithHomeId:@"当前家庭 ID"];
        return home;
    }
    
    - (BOOL)homeAdminValidation {
        //可根据实际用户身份返回,也可直接返回 YES 允许所有用户编辑
        return YES;
    }
    
    /// 返回当前家庭 ID
    - (long long)currentFamilyId {
        return [ThingDemoSmartHomeManager sharedInstance].currentHomeModel.homeId;
    }
    

新增灯光场景

#import <ThingSmartBizCore/ThingSmartBizCore.h>
#import <ThingModuleServices/ThingLightSceneProtocol.h>

- (void)addLightScene {
    id<ThingLightSceneProtocol> impl = [[ThingSmartBizCore sharedInstance] serviceOfProtocol:@protocol(ThingLightSceneProtocol)];
    [impl createNewLightScene];
}

编辑灯光场景

#import <ThingSmartBizCore/ThingSmartBizCore.h>
#import <ThingModuleServices/ThingLightSceneProtocol.h>
#import <ThingLightSceneKit/ThingLightSceneModel.h>

- (void)editLightScene:(ThingLightSceneModel *)scene {
    id<ThingLightSceneProtocol> impl = [[ThingSmartBizCore sharedInstance] serviceOfProtocol:@protocol(ThingLightSceneProtocol)];
    [impl editLightScene:scene];
}

灯光场景列表

#import <ThingSmartBizCore/ThingSmartBizCore.h>
#import <ThingModuleServices/ThingLightSceneBizProtocol.h>

- (void)getLightSceneList {
    id<ThingLightSceneBizProtocol> impl = [[ThingSmartBizCore sharedInstance] serviceOfProtocol:@protocol(ThingLightSceneBizProtocol)];
    [impl getAllLightSceneListWithSuccess:^(NSArray<ThingLightSceneModel *> * _Nonnull scenes) {
      } failure:^(NSError * _Nonnull error) {
    }];
}

执行灯光场景

#import <ThingSmartBizCore/ThingSmartBizCore.h>
#import <ThingModuleServices/ThingLightSceneBizProtocol.h>

- (void)executeLightScene:(ThingLightSceneModel *)scene {
    ThingLightSceneModel *sceneModel = self.sceneList[indexPath.row];
    id<ThingLightSceneBizProtocol> impl = [[ThingSmartBizCore sharedInstance] serviceOfProtocol:@protocol(ThingLightSceneBizProtocol)];
    [impl executeLightScene:scene success:^(BOOL success) {
    } failure:^(NSError * _Nonnull error) {
    }];
}

通知中心

建议在以下事件中发送通知(kNotificationLightSceneListUpdate):

  • 添加灯光场景成功
  • 编辑灯光场景成功
  • 删除灯光场景成功
// 监听到灯光场景变化,通知刷新列表
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(loadSceneList) name:@"kNotificationLightSceneListUpdate" object:nil];