LOTAssetGroup.m 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. //
  2. // LOTAssetGroup.m
  3. // Pods
  4. //
  5. // Created by Brandon Withrow on 2/17/17.
  6. //
  7. //
  8. #import "LOTAssetGroup.h"
  9. #import "LOTAsset.h"
  10. @implementation LOTAssetGroup {
  11. NSMutableDictionary<NSString *, LOTAsset *> *_assetMap;
  12. NSDictionary<NSString *, NSDictionary *> *_assetJSONMap;
  13. }
  14. - (instancetype _Nonnull)initWithJSON:(NSArray * _Nonnull)jsonArray
  15. withAssetBundle:(NSBundle * _Nullable)bundle
  16. withFramerate:(NSNumber * _Nonnull)framerate {
  17. self = [super init];
  18. if (self) {
  19. _assetBundle = bundle;
  20. _assetMap = [NSMutableDictionary dictionary];
  21. NSMutableDictionary *assetJSONMap = [NSMutableDictionary dictionary];
  22. for (NSDictionary<NSString *, NSString *> *assetDictionary in jsonArray) {
  23. NSString *referenceID = assetDictionary[@"id"];
  24. if (referenceID) {
  25. assetJSONMap[referenceID] = assetDictionary;
  26. }
  27. }
  28. _assetJSONMap = assetJSONMap;
  29. }
  30. return self;
  31. }
  32. - (void)buildAssetNamed:(NSString *)refID
  33. withFramerate:(NSNumber * _Nonnull)framerate {
  34. if ([self assetModelForID:refID]) {
  35. return;
  36. }
  37. NSDictionary *assetDictionary = _assetJSONMap[refID];
  38. if (assetDictionary) {
  39. LOTAsset *asset = [[LOTAsset alloc] initWithJSON:assetDictionary
  40. withAssetGroup:self
  41. withAssetBundle:_assetBundle
  42. withFramerate:framerate];
  43. _assetMap[refID] = asset;
  44. }
  45. }
  46. - (void)finalizeInitializationWithFramerate:(NSNumber * _Nonnull)framerate {
  47. for (NSString *refID in _assetJSONMap.allKeys) {
  48. [self buildAssetNamed:refID withFramerate:framerate];
  49. }
  50. _assetJSONMap = nil;
  51. }
  52. - (LOTAsset *)assetModelForID:(NSString *)assetID {
  53. return _assetMap[assetID];
  54. }
  55. - (void)setRootDirectory:(NSString *)rootDirectory {
  56. _rootDirectory = rootDirectory;
  57. [_assetMap enumerateKeysAndObjectsUsingBlock:^(NSString * _Nonnull key, LOTAsset * _Nonnull obj, BOOL * _Nonnull stop) {
  58. obj.rootDirectory = rootDirectory;
  59. }];
  60. }
  61. @end