更新时间 : 2023-07-18 09:32:20
//stream中可能出现的数据类型
typedef enum : NSUInteger {
SXStreamData_NO_DATA,
SXStreamData_ThreeD_SPATIAL, //三维数据,如[x,y,z] (NSArray<NSNumber *>)
SXStreamData_ThreeD, //三维数据,如[x,y,z] (NSArray<NSNumber *>)
SXStreamData_TwoD_SPATIAL, //二维数据,如[x,y] (NSArray<NSNumber *>)
SXStreamData_TwoD, //二维数据,如[x,y] (NSArray<NSNumber *>)
SXStreamData_OneD, //一维数据 (NSNumber)
SXStreamData_COLOR, //颜色类型数据,如[r,g,b,a] (NSArray<NSNumber *>)
SXStreamData_STRING = 60 //字符串类型数据
} SXStreamDataType;
SXKeyframeData
关键帧对象,可以读取到当前关键帧中的值,控制点,以及插值类型。
若关键帧插值类型为SXKeyFrameOptionsPath,则有控制点数据。
SXStreamData
数据流对象,可以读取属性相应数据的类型,默认值,以及关键帧。
若无关键帧,则属性表现为默认值,若有关键帧,属性的表现根据关键帧计算。
获取设计师设置的可编辑属性列表,其中包含属性和属性组。
/**
* 获取可修改属性组
* json中对应key "editable_props"
* @return 所有可修改属性
*/
-(NSArray<SXEditableMember *> *)getEditablePropertys;
根据路径获取对应的数据流
通过 getStreamsOfLayerWithUIKey 方法获取到的路径可以使用当前方法获取数据流对象,读取到当前值。
/**
根据路径获取对应的数据流
@warning 该接口只有在commit之后调用有效
@param path 数据流路径
@return 数据流对象
*/
-(SXStreamData *)getStreamDataWithPath:(NSString *)path;
/**
根据路径设置数据流的默认值
@param value 默认值
@param path 数据流路径
@return 设置是否成功
*/
-(BOOL)setStreamDefaulValue:(id)value withPath:(NSString )path;
/**
添加关键帧帧动画数据,如已存在对应关键帧则会修改对应的关键帧数据
@param path 数据流路径
@param mill 相对于start time的局部关键帧时间,单位为毫秒
@param value 关键帧数据,不同类型的关键帧拥有不同的数据类型
@param options 插值类型,影响自身与下一个关键帧之间的插值
@return 数据类型错误返回false
*/
-(BOOL)addKeyframe:(NSString )path time:(int64_t)mill value:(id)value options:(SXKeyFrameOptions)options;
/**
添加关键帧帧动画数据,如已存在对应关键帧则会修改对应的关键帧
@param path 数据流路径
@param mill 相对于start time的局部关键帧时间,单位为毫秒
@param value 关键帧数据,不同类型的关键帧拥有不同的数据类型
@param inTangent 插值曲线的结束点(1,1)的控制点,影响当前帧与上一帧间的插值
@param outTangent 插值曲线的起始点(0,0)的控制点,影响当前帧与下一帧间的插值
@return 数据类型错误返回false
*/
-(BOOL)addKeyframe:(NSString )path time:(int64_t)mill value:(id)value inTangent:(CGPoint)inTangent outTangent:(CGPoint)outTangent;
/**
修改关键帧动画数据
@param path 数据流路径
@param mill 相对于start time的局部关键帧时间,单位为毫秒
@param value 关键帧数据,不同类型的关键帧拥有不同的数据类型
@return 数据类型错误或不存在对应关键帧返回false
*/
-(BOOL)setKeyframe:(NSString )path time:(int64_t)mill value:(id)value;
/**
获取对应时间的插值比例x,当前数据为(a * (1 - x) + bx),a代表前一关键帧数据,b代表后一关键帧数据
@param path 数据流路径
@param mill 时间
* @return 字典中包含的key @"ratio":插值比例x, @"a":前一关键帧数据, @"b":b代表后一关键帧数据
*/
-(NSDictionary<NSString *, id> *)keyframeInterpolateRatio:(NSString *)path time:(int64_t)mill;
/**
移除关键帧
@param path 数据流路径
@param mill 相对于start time的局部关键帧时间,单位为毫秒
*/
-(void)removeKeyframe:(NSString )path time:(int64_t)mill;
/**
清除某一类型所有关键帧
@param path 数据流路径
*/
-(void)clearKeyFrames:(NSString *)path;
NSArray *array = [_mTemplate getEditablePropertys];
for (SXEditableMember *member in array) {
if ([member isKindOfClass:[SXEditableProp class]]) {
SXStreamData *data = [_mTemplate getStreamDataWithPath:((SXEditableProp *)member).streamPath];
if ([path hasSuffix:@"ADBE Position"]) {
NSLog(@"ADBE Position Default :%@", data.defaultValue);
}else if ([path hasSuffix:@"ADBE Rotate Z"]) {
NSLog(@"ADBE Rotate Z Default :%@", data.defaultValue);
[_mTemplate setStreamDefaulValue:@(20) withPath:path];
}else if ([path hasSuffix:@"ADBE Scale"]) {
NSLog(@"ADBE Scale Default :%@", data.defaultValue);
[_mTemplate addKeyframe:path time:0 value:@[@(50), @(50), @(100)] options:SXKeyFrameOptionsLinear];
[_mTemplate addKeyframe:path time:3 * 1000 value:@[@(150), @(150), @(100)] options:SXKeyFrameOptionsLinear];
}
}else if ([member isKindOfClass:[SXEditableGroup class]]) {
//组内成员属性与上面相同,分组由设计师模板中指定
// for (SXEditableMember *member in ((SXEditableGroup *)member).editableMembers) {
// }
}
}
//stream中可能出现的数据类型
typedef enum : NSUInteger {
SXStreamData_NO_DATA,
SXStreamData_ThreeD_SPATIAL, //三维数据,如[x,y,z] (NSArray<NSNumber *>)
SXStreamData_ThreeD, //三维数据,如[x,y,z] (NSArray<NSNumber *>)
SXStreamData_TwoD_SPATIAL, //二维数据,如[x,y] (NSArray<NSNumber *>)
SXStreamData_TwoD, //二维数据,如[x,y] (NSArray<NSNumber *>)
SXStreamData_OneD, //一维数据 (NSNumber)
SXStreamData_COLOR, //颜色类型数据,如[r,g,b,a] (NSArray<NSNumber *>)
SXStreamData_STRING = 60 //字符串类型数据
} SXStreamDataType;
SXKeyframeData
关键帧对象,可以读取到当前关键帧中的值,控制点,以及插值类型。
若关键帧插值类型为SXKeyFrameOptionsPath,则有控制点数据。
SXStreamData
数据流对象,可以读取属性相应数据的类型,默认值,以及关键帧。
若无关键帧,则属性表现为默认值,若有关键帧,属性的表现根据关键帧计算。
获取设计师设置的可编辑属性列表,其中包含属性和属性组。
/**
* 获取可修改属性组
* json中对应key "editable_props"
* @return 所有可修改属性
*/
-(NSArray<SXEditableMember *> *)getEditablePropertys;
根据路径获取对应的数据流
通过 getStreamsOfLayerWithUIKey 方法获取到的路径可以使用当前方法获取数据流对象,读取到当前值。
/**
根据路径获取对应的数据流
@warning 该接口只有在commit之后调用有效
@param path 数据流路径
@return 数据流对象
*/
-(SXStreamData *)getStreamDataWithPath:(NSString *)path;
/**
根据路径设置数据流的默认值
@param value 默认值
@param path 数据流路径
@return 设置是否成功
*/
-(BOOL)setStreamDefaulValue:(id)value withPath:(NSString )path;
/**
添加关键帧帧动画数据,如已存在对应关键帧则会修改对应的关键帧数据
@param path 数据流路径
@param mill 相对于start time的局部关键帧时间,单位为毫秒
@param value 关键帧数据,不同类型的关键帧拥有不同的数据类型
@param options 插值类型,影响自身与下一个关键帧之间的插值
@return 数据类型错误返回false
*/
-(BOOL)addKeyframe:(NSString )path time:(int64_t)mill value:(id)value options:(SXKeyFrameOptions)options;
/**
添加关键帧帧动画数据,如已存在对应关键帧则会修改对应的关键帧
@param path 数据流路径
@param mill 相对于start time的局部关键帧时间,单位为毫秒
@param value 关键帧数据,不同类型的关键帧拥有不同的数据类型
@param inTangent 插值曲线的结束点(1,1)的控制点,影响当前帧与上一帧间的插值
@param outTangent 插值曲线的起始点(0,0)的控制点,影响当前帧与下一帧间的插值
@return 数据类型错误返回false
*/
-(BOOL)addKeyframe:(NSString )path time:(int64_t)mill value:(id)value inTangent:(CGPoint)inTangent outTangent:(CGPoint)outTangent;
/**
修改关键帧动画数据
@param path 数据流路径
@param mill 相对于start time的局部关键帧时间,单位为毫秒
@param value 关键帧数据,不同类型的关键帧拥有不同的数据类型
@return 数据类型错误或不存在对应关键帧返回false
*/
-(BOOL)setKeyframe:(NSString )path time:(int64_t)mill value:(id)value;
/**
获取对应时间的插值比例x,当前数据为(a * (1 - x) + bx),a代表前一关键帧数据,b代表后一关键帧数据
@param path 数据流路径
@param mill 时间
* @return 字典中包含的key @"ratio":插值比例x, @"a":前一关键帧数据, @"b":b代表后一关键帧数据
*/
-(NSDictionary<NSString *, id> *)keyframeInterpolateRatio:(NSString *)path time:(int64_t)mill;
/**
移除关键帧
@param path 数据流路径
@param mill 相对于start time的局部关键帧时间,单位为毫秒
*/
-(void)removeKeyframe:(NSString )path time:(int64_t)mill;
/**
清除某一类型所有关键帧
@param path 数据流路径
*/
-(void)clearKeyFrames:(NSString *)path;
NSArray *array = [_mTemplate getEditablePropertys];
for (SXEditableMember *member in array) {
if ([member isKindOfClass:[SXEditableProp class]]) {
SXStreamData *data = [_mTemplate getStreamDataWithPath:((SXEditableProp *)member).streamPath];
if ([path hasSuffix:@"ADBE Position"]) {
NSLog(@"ADBE Position Default :%@", data.defaultValue);
}else if ([path hasSuffix:@"ADBE Rotate Z"]) {
NSLog(@"ADBE Rotate Z Default :%@", data.defaultValue);
[_mTemplate setStreamDefaulValue:@(20) withPath:path];
}else if ([path hasSuffix:@"ADBE Scale"]) {
NSLog(@"ADBE Scale Default :%@", data.defaultValue);
[_mTemplate addKeyframe:path time:0 value:@[@(50), @(50), @(100)] options:SXKeyFrameOptionsLinear];
[_mTemplate addKeyframe:path time:3 * 1000 value:@[@(150), @(150), @(100)] options:SXKeyFrameOptionsLinear];
}
}else if ([member isKindOfClass:[SXEditableGroup class]]) {
//组内成员属性与上面相同,分组由设计师模板中指定
// for (SXEditableMember *member in ((SXEditableGroup *)member).editableMembers) {
// }
}
}