获取app所在路径 设置到JSonViewController中去
根据路径找到bundle文件
找到bundle文件中横屏和竖屏的JSON文件 : viewStruct_landScape.json viewStruct_portrait.json
解析JSON文件:[self constructViewWithJsonPath:jsonpath];
读取JSON文件中所有的数据
NSString * json = [NSString stringWithContentsOfFile:jsonpath encoding:NSUTF8StringEncoding error:&error];
用SBJsonParser解析:
SBJsonParser * jsonParser = [SBJsonParser new];
id repr = [jsonParser objectWithString:json];
if (!repr){
NSLog(@"-JSONValue failed. Error trace is: %@", [jsonParser errorTrace]);
[jsonParser release];}
repr是个容器 可能是Dictionary 或者 Array
所以要判断repr的类型:
if ([item isKindOfClass:[NSDictionary class]])
{// 解析
}
else if ([item isKindOfClass:[NSArray class]])
{
// 解析
}
进行解析:
取出 class ,frame,propertyList,content,subViews五个类型
class :判断是否以结尾Controller,也就是判断是否这个类是个UIViewController,还是UIView,如果是Controller,则。。。。。。
frame
propertyList:这个结构比较复杂,里面可能会嵌套了N个{ class ,frame,propertyList,content,subViews}
content
subViews
class中为什么要区分是UIView还是UIViewController呢?因为后面需要对这个类进行初始化,这两个类需要的初始化信息是不一样的。
在解析这两个类的时候,也要区分是UIView还是UIViewController,因为这两个不同的class决定了下面解析的属性,各自按各自的规则去解析属性
[ { "class":"SalmonFlipView", "frame":"{{0, 0}, {768, 1024}}", "propertyList":{ "frontView":{ "class":"SalmonFlipViewSubViewWithButton", "frame":"{{0, 0}, {768,1024}}", "propertyList":{ "flipViewButton":{ "class":"SalmonButton", "frame":"{{134, 437}, {512, 512}}", "propertyList":{ "backgroundColor":{ "UIColor":{ "r":0, "g":0, "b":255, "a":1 } }, "animations":{ "animation":[ { "class":"CABasicAnimation", "propertyList":{ "fromValue":{ "float":"0" }, "toValue":{ "float":"1" }, "keyPath":{ "string":"opacity" }, "duration":{ "float":"4" } } } ] } }, "subViews":[ ], "content":"" } }, "subViews":[ { "class":"UIImageView", "frame":"{{0, 0}, {461, 593}}", "propertyList":{ "backgroundColor":{ "UIColor":{ "r":51, "g":51, "b":0, "a":1 } }, "animations":{ "animation":[ { "class":"CABasicAnimation", "propertyList":{ "fromValue":{ "rect":"{{100, 100}, {0, 0}}" }, "toValue":{ "rect":"{{0, 0}, {461, 593}}" }, "keyPath":{ "string":"frame" }, "duration":{ "float":"2" } } } ] } }, "subViews":[ ], "content":"" } ] }, "backgroundView":{ "class":"SalmonFlipMoviePlayerView", "frame":"{{107, 173}, {541, 572}}", "propertyList":{ "contentURL":{ "URL":"http:\/\/manager.mediapad.cn\/26\/page_1220.bundle\/1.mp4" }, "sandBoxContentURL":{ "URL":"http:\/\/manager.mediapad\/1\/26\/page_1220.bundle\/1.mp4" }, "closeButton":{ "class":"SalmonButton", "frame":"{{497, 0}, {44, 44}}", "propertyList":[ ], "subViews":[ ], "content":"moviePlayerCloseButton.png" } }, "subViews":[ ] } }, "subViews":[ ] } ]