Commit b5319f5fd7aeb550b87aa10ae5270c97d3e98ca7

Authored by 张旭
2 parents bb5212da 3069e376

Merge branch 'master' of bj.gitlab.cnlive.com:ios-team/LiveVideoCloud

Showing 72 changed files with 895 additions and 73 deletions
LiveVideoCloud.xcodeproj/project.pbxproj
... ... @@ -99,6 +99,7 @@
99 99 8178D46B1F021ED800AA78A4 /* LVCTelevisionModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 8178D46A1F021ED800AA78A4 /* LVCTelevisionModel.m */; };
100 100 8178D46E1F0225E500AA78A4 /* LVCTelevisionCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 8178D46D1F0225E500AA78A4 /* LVCTelevisionCell.m */; };
101 101 8178D4711F0239AD00AA78A4 /* LVCPlayerLoadingView.m in Sources */ = {isa = PBXBuildFile; fileRef = 8178D4701F0239AD00AA78A4 /* LVCPlayerLoadingView.m */; };
  102 + 8181D53C1F134A7C00959E3D /* LVCBgmView.m in Sources */ = {isa = PBXBuildFile; fileRef = 8181D53B1F134A7C00959E3D /* LVCBgmView.m */; };
102 103 81A483081E88B6140097A80A /* UIView+ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 81A483071E88B6140097A80A /* UIView+ViewController.m */; };
103 104 81F1C8401E8BC5CC0085C2B8 /* NSArray+Safety.m in Sources */ = {isa = PBXBuildFile; fileRef = 81F1C83F1E8BC5CC0085C2B8 /* NSArray+Safety.m */; };
104 105 81FB5B3C1E7A6FFC00F98E1D /* SevenSwitch.m in Sources */ = {isa = PBXBuildFile; fileRef = 81FB5B3B1E7A6FFC00F98E1D /* SevenSwitch.m */; };
... ... @@ -498,6 +499,8 @@
498 499 8178D46D1F0225E500AA78A4 /* LVCTelevisionCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LVCTelevisionCell.m; sourceTree = "<group>"; };
499 500 8178D46F1F0239AD00AA78A4 /* LVCPlayerLoadingView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LVCPlayerLoadingView.h; sourceTree = "<group>"; };
500 501 8178D4701F0239AD00AA78A4 /* LVCPlayerLoadingView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LVCPlayerLoadingView.m; sourceTree = "<group>"; };
  502 + 8181D53A1F134A7C00959E3D /* LVCBgmView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LVCBgmView.h; sourceTree = "<group>"; };
  503 + 8181D53B1F134A7C00959E3D /* LVCBgmView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LVCBgmView.m; sourceTree = "<group>"; };
501 504 81A483061E88B6140097A80A /* UIView+ViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIView+ViewController.h"; sourceTree = "<group>"; };
502 505 81A483071E88B6140097A80A /* UIView+ViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIView+ViewController.m"; sourceTree = "<group>"; };
503 506 81F1C83E1E8BC5CC0085C2B8 /* NSArray+Safety.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSArray+Safety.h"; sourceTree = "<group>"; };
... ... @@ -998,6 +1001,8 @@
998 1001 8156A7B31F0F8FCC007EE146 /* LVCAERootView.m */,
999 1002 8156A7B51F0F93AA007EE146 /* LVCAECommonView.h */,
1000 1003 8156A7B61F0F93AA007EE146 /* LVCAECommonView.m */,
  1004 + 8181D53A1F134A7C00959E3D /* LVCBgmView.h */,
  1005 + 8181D53B1F134A7C00959E3D /* LVCBgmView.m */,
1001 1006 8156A7B81F0F9541007EE146 /* AECommonCell.h */,
1002 1007 8156A7B91F0F9541007EE146 /* AECommonCell.m */,
1003 1008 );
... ... @@ -2380,6 +2385,7 @@
2380 2385 D2029CBF1E6EADE10027CD92 /* UIButton+WebCache.m in Sources */,
2381 2386 D2575C7E1E76A4F300E3A8FC /* NHPlaneViews.m in Sources */,
2382 2387 4B45CE761EB86A590079AFB7 /* BeingAnchorController.m in Sources */,
  2388 + 8181D53C1F134A7C00959E3D /* LVCBgmView.m in Sources */,
2383 2389 D2029CC51E6EADE10027CD92 /* UIView+WebCacheOperation.m in Sources */,
2384 2390 D260E6101F0CE8690095E49D /* praiseModel.m in Sources */,
2385 2391 D2029CAB1E6EADE10027CD92 /* MJRefreshBackNormalFooter.m in Sources */,
... ...
LiveVideoCloud.xcodeproj/xcuserdata/iOS.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist
... ... @@ -13,5 +13,37 @@
13 13 stopOnStyle = "0">
14 14 </BreakpointContent>
15 15 </BreakpointProxy>
  16 + <BreakpointProxy
  17 + BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
  18 + <BreakpointContent
  19 + shouldBeEnabled = "Yes"
  20 + ignoreCount = "0"
  21 + continueAfterRunningActions = "No"
  22 + filePath = "LiveVideoCloud/Classes/Sections/Mine/Views/LVCVideoMgrButton.m"
  23 + timestampString = "521361420.44809"
  24 + startingColumnNumber = "9223372036854775807"
  25 + endingColumnNumber = "9223372036854775807"
  26 + startingLineNumber = "21"
  27 + endingLineNumber = "21"
  28 + landmarkName = "-initWithFrame:left:"
  29 + landmarkType = "7">
  30 + </BreakpointContent>
  31 + </BreakpointProxy>
  32 + <BreakpointProxy
  33 + BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
  34 + <BreakpointContent
  35 + shouldBeEnabled = "Yes"
  36 + ignoreCount = "0"
  37 + continueAfterRunningActions = "No"
  38 + filePath = "LiveVideoCloud/Classes/Sections/Mine/Views/LVCVideoMgrButton.m"
  39 + timestampString = "521361430.079111"
  40 + startingColumnNumber = "9223372036854775807"
  41 + endingColumnNumber = "9223372036854775807"
  42 + startingLineNumber = "46"
  43 + endingLineNumber = "46"
  44 + landmarkName = "-setVideoMgrState:"
  45 + landmarkType = "7">
  46 + </BreakpointContent>
  47 + </BreakpointProxy>
16 48 </Breakpoints>
17 49 </Bucket>
... ...
LiveVideoCloud/Classes/Sections/Mine/Controllers/LVCMineViewController.m
... ... @@ -203,8 +203,10 @@
203 203 if (indexPath.row == 0) {
204 204 [self pushVC:[MineSettingViewController new]];
205 205 } else if (indexPath.row == 1) {
206   - LVCShortVideoController *shortVideoVC = [[LVCShortVideoController alloc] init];
207   - [self presentViewController:shortVideoVC animated:YES completion:NULL];
  206 + dispatch_async(dispatch_get_main_queue(), ^{
  207 + LVCShortVideoController *shortVideoVC = [[LVCShortVideoController alloc] init];
  208 + [self presentViewController:shortVideoVC animated:YES completion:NULL];
  209 + });
208 210 }
209 211  
210 212 // if(indexPath.row == 0)
... ...
LiveVideoCloud/Classes/Sections/Mine/Controllers/LVCShortVideoController.m
... ... @@ -28,7 +28,7 @@
28 28  
29 29 [self.view addSubview:self.previewView];
30 30 [self.view addSubview:self.aeRootView];
31   -
  31 +//
32 32 [self p_setupPreViewEvent];
33 33  
34 34 }
... ... @@ -133,8 +133,8 @@
133 133 {
134 134 if (!_aeRootView){
135 135 _aeRootView = [[LVCAERootView alloc] initWithFrame:kAERootViewHideFrame];
136   - [(UIView *)[_aeRootView valueForKey:@"decalBtn"] setHidden:YES];
137   - [(UIView *)[_aeRootView valueForKey:@"textDecalBtn"] setHidden:YES];
  136 +// [(UIView *)[_aeRootView valueForKey:@"decalBtn"] setHidden:YES];
  137 +// [(UIView *)[_aeRootView valueForKey:@"textDecalBtn"] setHidden:YES];
138 138 _aeRootView.userInteractionEnabled = YES;
139 139  
140 140 }
... ...
LiveVideoCloud/Classes/Sections/Mine/Model/AEModelTemplate.h
... ... @@ -14,7 +14,7 @@
14 14  
15 15 @property(nonatomic, assign)NSUInteger idx;
16 16  
17   -@property(nonatomic, strong)UIImage *image;
  17 +@property(nonatomic, strong)NSString *image;
18 18  
19 19 @property(nonatomic, strong)NSString *txt;
20 20  
... ...
LiveVideoCloud/Classes/Sections/Mine/Views/AECommonCell.m
... ... @@ -56,8 +56,13 @@
56 56  
57 57 - (void)setModel:(AEModelTemplate *)model
58 58 {
59   - _thumb.image = model.image;
60   - _tips.text = model.txt;
  59 + _thumb.image = [UIImage imageNamed:model.image];
  60 + if (![model.txt isEqualToString:@"nil"]) {
  61 + _tips.text = model.txt;
  62 + } else {
  63 + _tips.text = @"";
  64 + }
  65 +
61 66 if (!model.txt || model.txt.length == 0){
62 67 _tips.hidden = YES;
63 68 _isOrigin = YES;
... ...
LiveVideoCloud/Classes/Sections/Mine/Views/LVCAECommonView.h
... ... @@ -11,6 +11,9 @@
11 11  
12 12 @interface LVCAECommonView : UIView
13 13  
14   -- (instancetype)initWithFrame:(CGRect)frame type:(NSUInteger)type data:(NSArray<__kindof AEModelTemplate *> *)dataSource;
  14 +@property (nonatomic, copy)void(^FuncBlock)(AEModelTemplate *model);
  15 +
  16 +- (instancetype)initWithFrame:(CGRect)frame type:(NSUInteger)type data:(NSArray *)dataSource;
  17 +
15 18  
16 19 @end
... ...
LiveVideoCloud/Classes/Sections/Mine/Views/LVCAECommonView.m
... ... @@ -13,18 +13,25 @@
13 13 @interface LVCAECommonView ()<UICollectionViewDelegate, UICollectionViewDataSource>
14 14  
15 15 @property (nonatomic, strong) UICollectionView *collectionView;
16   -@property (nonatomic, strong) NSArray<__kindof AEModelTemplate *> *dataArray;
  16 +@property (nonatomic, strong) NSMutableArray *dataArray;
17 17  
18 18 @end
19 19  
20 20 @implementation LVCAECommonView
21 21  
22   -- (instancetype)initWithFrame:(CGRect)frame type:(NSUInteger)type data:(NSArray<__kindof AEModelTemplate *> *)dataSource {
  22 +- (instancetype)initWithFrame:(CGRect)frame type:(NSUInteger)type data:(NSArray*)dataSource {
23 23  
24 24 self = [super initWithFrame:frame];
25 25 if (self) {
26 26  
27   - _dataArray = dataSource;
  27 + _dataArray = [[NSMutableArray alloc] init];
  28 +
  29 + for (NSDictionary *dic in dataSource) {
  30 + AEModelTemplate *model = [AEModelTemplate mj_objectWithKeyValues:dic];
  31 + [_dataArray addObject:model];
  32 + }
  33 +
  34 + [self addSubview:self.collectionView];
28 35  
29 36 }
30 37 return self;
... ... @@ -46,21 +53,27 @@
46 53 _collectionView.backgroundColor = [UIColor clearColor];
47 54 _collectionView.showsHorizontalScrollIndicator = NO;
48 55 _collectionView.scrollsToTop = YES;
  56 +
  57 + [self.collectionView registerClass:[AECommonCell class] forCellWithReuseIdentifier:@"cell"];
  58 +
  59 +
49 60 }
50 61 return _collectionView;
51 62 }
52 63  
53 64 - (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
54 65 {
55   - static NSString *identifier = @"AECommonCell";
56   - AECommonCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:identifier forIndexPath:indexPath];
  66 +// static NSString *identifier = @"AECommonCell";
  67 + AECommonCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"cell" forIndexPath:indexPath];
57 68 cell.model = self.dataArray[indexPath.row];
58 69 return cell;
59 70 }
60 71  
61 72 - (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath
62 73 {
63   -
  74 + if (self.FuncBlock) {
  75 + self.FuncBlock(_dataArray[indexPath.row]);
  76 + }
64 77 }
65 78  
66 79 - (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
... ... @@ -68,12 +81,10 @@
68 81 return self.dataArray.count;
69 82 }
70 83  
71   -
72   -
73   -- (NSArray<AEModelTemplate *> *)dataArray
  84 +- (NSMutableArray *)dataArray
74 85 {
75 86 if (!_dataArray){
76   - _dataArray = [[NSArray alloc] init];
  87 + _dataArray = [[NSMutableArray alloc] init];
77 88 }
78 89 return _dataArray;
79 90 }
... ...
LiveVideoCloud/Classes/Sections/Mine/Views/LVCAERootView.h
... ... @@ -7,6 +7,7 @@
7 7 //
8 8  
9 9 #import <UIKit/UIKit.h>
  10 +#import "AEModelTemplate.h"
10 11  
11 12 typedef NS_ENUM(NSInteger, CNLiveSelectorType){
12 13 CNLiveSelectorType_Reverb, // 混响
... ... @@ -23,4 +24,9 @@ typedef NS_ENUM(NSUInteger, kAEStatus){
23 24 kAEShow,
24 25 };
25 26  
  27 +@property (nonatomic, copy) void(^BgmVolumeBlock)(float origin, float dub); //音量回调
  28 +@property (nonatomic, copy) void(^BgmBlock)(AEModelTemplate *model);
  29 +@property (nonatomic, copy) void(^AEBlock)(AEModelTemplate *model);
  30 +@property (nonatomic, copy) void(^DEBlock)(AEModelTemplate *model);
  31 +
26 32 @end
... ...
LiveVideoCloud/Classes/Sections/Mine/Views/LVCAERootView.m
... ... @@ -9,10 +9,11 @@
9 9 #import "LVCAERootView.h"
10 10 #import "LVCAECommonView.h"
11 11 #import "AEModelTemplate.h"
  12 +#import "LVCBgmView.h"
12 13  
13 14 @interface LVCAERootView ()
14 15 {
15   - NSMutableArray *_dataArray;
  16 + NSArray *_dataArray;
16 17 }
17 18  
18 19 @property (nonatomic, strong) UIButton *bgmBtn; //背景音乐
... ... @@ -21,7 +22,7 @@
21 22 @property (nonatomic, strong) UIButton *decalBtn; //贴纸
22 23 @property (nonatomic, strong) UIButton *textDecalBtn; //字幕
23 24  
24   -@property (nonatomic, strong) LVCAECommonView *bgmView;
  25 +@property (nonatomic, strong) LVCBgmView *bgmView;
25 26 @property (nonatomic, strong) LVCAECommonView *aeView;
26 27 @property (nonatomic, strong) LVCAECommonView *reverbView;
27 28 @property (nonatomic, strong) LVCAECommonView *decalView;
... ... @@ -36,27 +37,42 @@
36 37 self = [super initWithFrame:frame];
37 38 if (self) {
38 39 self.backgroundColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:1.0];
  40 +
  41 + NSString* plistfile1 = [[NSBundle mainBundle]pathForResource:@"ShortVideoData" ofType:@"plist"];
  42 + _dataArray = [[NSArray alloc] initWithContentsOfFile:plistfile1];
  43 +
39 44 [self addSubview:self.bgmBtn];
40 45 [self addSubview:self.aeBtn];
41 46 [self addSubview:self.reverbBtn];
42 47 [self addSubview:self.decalBtn];
43 48 [self addSubview:self.textDecalBtn];
  49 + [self addSubview:self.bgmView];
44 50  
45   - _dataArray = [[NSMutableArray alloc] init];
46   - NSString* plistfile1 = [[NSBundle mainBundle]pathForResource:@"ShortVideoData" ofType:@"plist"];
47   - NSArray *dataArr = [[NSArray alloc] initWithContentsOfFile:plistfile1];
48   - //打印出字典里的数据
49   -// NSLog(@"%@",dataArr);
50   - for (NSDictionary *dic in dataArr) {
51   - AEModelTemplate *model = [AEModelTemplate mj_objectWithKeyValues:dic];
52   - [_dataArray addObject:model];
53   - }
54   -
55   - NSLog(@"-------%@", _dataArray);
56 51 }
57 52 return self;
58 53 }
59 54  
  55 +#pragma mark -
  56 +#pragma mark - setter
  57 +- (void)setBgmBlock:(void (^)(AEModelTemplate *))BgmBlock
  58 +{
  59 + self.bgmView.bgmView.FuncBlock = BgmBlock;
  60 +}
  61 +
  62 +- (void)setBgmVolumeBlock:(void (^)(float, float))BgmVolumeBlock
  63 +{
  64 + self.bgmView.BgmVolumeBlock = BgmVolumeBlock;
  65 +}
  66 +
  67 +- (void)setAEBlock:(void (^)(AEModelTemplate *))AEBlock {
  68 + self.aeView.FuncBlock = AEBlock;
  69 +}
  70 +
  71 +- (void)setDEBlock:(void (^)(AEModelTemplate *))DEBlock {
  72 + self.decalView.FuncBlock = DEBlock;
  73 + self.textDecalView.FuncBlock = DEBlock;
  74 +}
  75 +
60 76 - (void)onSelectBgm:(id)sender
61 77 {
62 78 self.aeBtn.selected = NO;
... ... @@ -64,43 +80,80 @@
64 80 self.reverbBtn.selected = NO;
65 81 self.decalBtn.selected = NO;
66 82 self.textDecalBtn.selected = NO;
67   -
  83 +
  84 + self.bgmView.hidden = NO;
  85 + self.aeView.hidden = YES;
  86 + self.reverbView.hidden = YES;
  87 + self.decalView.hidden = YES;
  88 + self.textDecalView.hidden = YES;
68 89 }
69 90  
70 91 - (void)onSelectAe:(id)sender
71 92 {
  93 + [self addSubview:self.aeView];
  94 +
72 95 self.aeBtn.selected = YES;
73 96 self.bgmBtn.selected = NO;
74 97 self.reverbBtn.selected = NO;
75 98 self.decalBtn.selected = NO;
  99 +
  100 + self.bgmView.hidden = YES;
  101 + self.aeView.hidden = NO;
  102 + self.reverbView.hidden = YES;
  103 + self.decalView.hidden = YES;
  104 + self.textDecalView.hidden = YES;
76 105 }
77 106  
78 107 - (void)onSelectReverb:(id)sender
79 108 {
  109 + [self addSubview:self.reverbView];
  110 +
80 111 self.reverbBtn.selected = YES;
81 112 self.aeBtn.selected = NO;
82 113 self.bgmBtn.selected = NO;
83 114 self.decalBtn.selected = NO;
84 115 self.textDecalBtn.selected = NO;
  116 +
  117 + self.bgmView.hidden = YES;
  118 + self.aeView.hidden = YES;
  119 + self.reverbView.hidden = NO;
  120 + self.decalView.hidden = YES;
  121 + self.textDecalView.hidden = YES;
85 122  
86 123 }
87 124  
88   -- (void)onSelectDecel:(id)sender{
  125 +- (void)onSelectDecel:(id)sender
  126 +{
  127 + [self addSubview:self.decalView];
  128 +
89 129 self.reverbBtn.selected = NO;
90 130 self.aeBtn.selected = NO;
91 131 self.bgmBtn.selected = NO;
92 132 self.decalBtn.selected = YES;
93 133 self.textDecalBtn.selected = NO;
94 134  
  135 + self.bgmView.hidden = YES;
  136 + self.aeView.hidden = YES;
  137 + self.reverbView.hidden = YES;
  138 + self.decalView.hidden = NO;
  139 + self.textDecalView.hidden = YES;
95 140 }
96 141  
97   -- (void)onSelectTextDecal:(UIButton *)btn{
  142 +- (void)onSelectTextDecal:(UIButton *)btn
  143 +{
  144 + [self addSubview:self.textDecalView];
  145 +
98 146 self.reverbBtn.selected = NO;
99 147 self.aeBtn.selected = NO;
100 148 self.bgmBtn.selected = NO;
101 149 self.decalBtn.selected = NO;
102 150 self.textDecalBtn.selected = YES;
103 151  
  152 + self.bgmView.hidden = YES;
  153 + self.aeView.hidden = YES;
  154 + self.reverbView.hidden = YES;
  155 + self.decalView.hidden = YES;
  156 + self.textDecalView.hidden = NO;
104 157 }
105 158  
106 159 #pragma mark -
... ... @@ -178,19 +231,19 @@
178 231 return _textDecalBtn;
179 232 }
180 233  
181   -//- (BgmSelectorView *)bgmView
182   -//{
183   -// if (!_bgmView){
184   -// _bgmView = [[BgmSelectorView alloc] initWithFrame:CGRectMake(0, 30, KScreenWidth, 172)];
185   -// }
186   -// return _bgmView;
187   -//}
  234 +- (LVCBgmView *)bgmView
  235 +{
  236 + if (!_bgmView){
  237 + _bgmView = [[LVCBgmView alloc] initWithFrame:CGRectMake(0, 30, KScreenWidth, 172) type:CNLiveSelectorType_BGM data:_dataArray[4]];
  238 + }
  239 + return _bgmView;
  240 +}
188 241  
189 242  
190 243 - (LVCAECommonView *)aeView
191 244 {
192 245 if (!_aeView){
193   - _aeView = [[LVCAECommonView alloc] initWithFrame:CGRectMake(0, 40, KScreenWidth, 172) type:CNLiveSelectorType_AE data:@[]];
  246 + _aeView = [[LVCAECommonView alloc] initWithFrame:CGRectMake(0, 40, KScreenWidth, 172) type:CNLiveSelectorType_AE data:_dataArray[2]];
194 247 _aeView.frame = CGRectMake(0, 40, KScreenWidth, 172);
195 248 }
196 249 return _aeView;
... ... @@ -199,7 +252,7 @@
199 252 - (LVCAECommonView *)reverbView
200 253 {
201 254 if (!_reverbView){
202   - _reverbView = [[LVCAECommonView alloc] initWithFrame:CGRectMake(0, 40, KScreenWidth, 172) type:CNLiveSelectorType_Reverb data:@[]];
  255 + _reverbView = [[LVCAECommonView alloc] initWithFrame:CGRectMake(0, 40, KScreenWidth, 172) type:CNLiveSelectorType_Reverb data:_dataArray[3]];
203 256 }
204 257 return _reverbView;
205 258 }
... ... @@ -207,7 +260,7 @@
207 260 - (LVCAECommonView *)decalView
208 261 {
209 262 if (!_decalView){
210   - _decalView = [[LVCAECommonView alloc] initWithFrame:CGRectMake(0, 40, KScreenWidth, 172) type:CNLiveSelectorType_Decal data:@[]];
  263 + _decalView = [[LVCAECommonView alloc] initWithFrame:CGRectMake(0, 40, KScreenWidth, 172) type:CNLiveSelectorType_Decal data:_dataArray[1]];
211 264 }
212 265 return _decalView;
213 266 }
... ... @@ -215,7 +268,7 @@
215 268 - (LVCAECommonView *)textDecalView
216 269 {
217 270 if (!_textDecalView){
218   - _textDecalView = [[LVCAECommonView alloc] initWithFrame:CGRectMake(0, 40, KScreenWidth, 172) type:CNLiveSelectorType_TextDecal data:@[]];
  271 + _textDecalView = [[LVCAECommonView alloc] initWithFrame:CGRectMake(0, 40, KScreenWidth, 172) type:CNLiveSelectorType_TextDecal data:_dataArray[0]];
219 272 }
220 273 return _textDecalView;
221 274 }
... ...
LiveVideoCloud/Classes/Sections/Mine/Views/LVCBgmView.h 0 → 100644
  1 +//
  2 +// LVCBgmView.h
  3 +// LiveVideoCloud
  4 +//
  5 +// Created by iOS on 2017/7/10.
  6 +// Copyright © 2017年 cnlive. All rights reserved.
  7 +//
  8 +
  9 +#import <UIKit/UIKit.h>
  10 +#import "LVCAECommonView.h"
  11 +
  12 +@interface LVCBgmView : UIView
  13 +
  14 +@property (nonatomic, strong) LVCAECommonView *bgmView;
  15 +@property (nonatomic, copy) void(^BgmVolumeBlock)(float origin, float dub);
  16 +
  17 +- (instancetype)initWithFrame:(CGRect)frame type:(NSUInteger)type data:(NSArray *)dataSource;
  18 +
  19 +@end
... ...
LiveVideoCloud/Classes/Sections/Mine/Views/LVCBgmView.m 0 → 100644
  1 +//
  2 +// LVCBgmView.m
  3 +// LiveVideoCloud
  4 +//
  5 +// Created by iOS on 2017/7/10.
  6 +// Copyright © 2017年 cnlive. All rights reserved.
  7 +//
  8 +
  9 +#import "LVCBgmView.h"
  10 +#import "LVCAERootView.h"
  11 +
  12 +@interface LVCBgmView ()
  13 +{
  14 + NSArray *_bgmArr;
  15 +}
  16 +
  17 +@property (nonatomic, strong) UISlider *originVolumeSlider;
  18 +@property (nonatomic, strong) UISlider *dubVolumeSlider;
  19 +
  20 +@end
  21 +
  22 +@implementation LVCBgmView
  23 +
  24 +- (instancetype)initWithFrame:(CGRect)frame type:(NSUInteger)type data:(NSArray *)dataSource
  25 +{
  26 + self = [super initWithFrame:frame];
  27 + if (self) {
  28 + _bgmArr = dataSource;
  29 +
  30 + [self addSubview:self.bgmView];
  31 + [self addSubview:self.originVolumeSlider];
  32 + [self addSubview:self.dubVolumeSlider];
  33 + }
  34 + return self;
  35 +}
  36 +
  37 +#pragma mark -
  38 +#pragma mark - Action
  39 +- (void)sliderValueChanged:(UISlider *)slider
  40 +{
  41 + if (self.BgmVolumeBlock){
  42 + self.BgmVolumeBlock(self.originVolumeSlider.value, self.dubVolumeSlider.value);
  43 + }
  44 +}
  45 +
  46 +#pragma mark -
  47 +#pragma mark - getter
  48 +- (LVCAECommonView *)bgmView
  49 +{
  50 + if (!_bgmView) {
  51 + _bgmView = [[LVCAECommonView alloc] initWithFrame:self.bounds type:CNLiveSelectorType_BGM data:_bgmArr];
  52 + }
  53 + return _bgmView;
  54 +}
  55 +
  56 +- (UISlider *)originVolumeSlider
  57 +{
  58 + if (!_originVolumeSlider){
  59 + _originVolumeSlider = [self createSlider:@"原声"];
  60 + _originVolumeSlider.frame = CGRectMake(60, self.bounds.size.height-50, self.bounds.size.width-60-24, 20);
  61 + _originVolumeSlider.tag = 0;
  62 + }
  63 + return _originVolumeSlider;
  64 +
  65 +}
  66 +
  67 +- (UISlider *)dubVolumeSlider
  68 +{
  69 + if (!_dubVolumeSlider){
  70 + _dubVolumeSlider = [self createSlider:@"配音"];
  71 + _dubVolumeSlider.frame = CGRectMake(60, self.bounds.size.height-20, self.bounds.size.width-60-24, 20);
  72 + _dubVolumeSlider.tag = 1;
  73 + _dubVolumeSlider.enabled = NO;
  74 + }
  75 + return _dubVolumeSlider;
  76 +}
  77 +
  78 +- (UISlider *)createSlider:(NSString *)title
  79 +{
  80 + UISlider *slider = [[UISlider alloc] init];
  81 + slider.minimumValue = 0;
  82 + slider.maximumValue = 1;
  83 +
  84 + slider.thumbTintColor = [UIColor colorWithHexString:@"#ff2c53"];
  85 + slider.maximumTrackTintColor = [UIColor colorWithHexString:@"#999999"];
  86 + slider.minimumTrackTintColor = [UIColor colorWithHexString:@"#ff2c53"];
  87 + [slider setThumbImage:[UIImage imageNamed:@"thumb"] forState:UIControlStateNormal];
  88 + [slider setThumbImage:[UIImage imageNamed:@"thumb"] forState:UIControlStateHighlighted];
  89 + [slider addTarget:self action:@selector(sliderValueChanged:) forControlEvents:UIControlEventValueChanged];
  90 +
  91 + UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(-35, 4, 30, 20)];
  92 + label.font = [UIFont systemFontOfSize:14];
  93 + label.text = title;
  94 + label.textColor = [UIColor colorWithHexString:@"#999999"];
  95 + [label sizeToFit];
  96 +
  97 + [slider addSubview:label];
  98 +
  99 + return slider;
  100 +}
  101 +
  102 +
  103 +/*
  104 +// Only override drawRect: if you perform custom drawing.
  105 +// An empty implementation adversely affects performance during animation.
  106 +- (void)drawRect:(CGRect)rect {
  107 + // Drawing code
  108 +}
  109 +*/
  110 +
  111 +@end
... ...
LiveVideoCloud/Classes/Sections/Mine/Views/LVCPreviewView.h
... ... @@ -33,7 +33,7 @@ typedef NS_ENUM(NSUInteger, PreViewSubViewIdx){
33 33 @property (nonatomic, strong) UIButton *recordBtn; //录制
34 34 @property (nonatomic, strong) LVCVideoMgrButton *effectsBtn; //动态贴纸
35 35 @property (nonatomic, strong) UILabel *recordTimeLabel; //时间
36   -@property (nonatomic, strong) UIButton *nextBtn; //next
  36 +@property (nonatomic, strong) LVCVideoMgrButton *nextBtn; //next
37 37 @property (nonatomic, strong) UIButton *funcBtn; //更多功能
38 38 @property (nonatomic, strong) UIButton *localBtn; //更多功能
39 39 @property (nonatomic, strong) UIView *previewView;
... ...
LiveVideoCloud/Classes/Sections/Mine/Views/LVCPreviewView.m
... ... @@ -108,14 +108,12 @@
108 108 return _funcBtn;
109 109 }
110 110  
111   -- (UIButton *)nextBtn
  111 +- (LVCVideoMgrButton *)nextBtn
112 112 {
113 113 if (!_nextBtn){
114   - _nextBtn = [UIButton buttonWithType:UIButtonTypeCustom];
115   - _nextBtn.frame = CGRectMake(KScreenWidth-BOTTOM_ICON_WIDTH-50, KScreenHeight-BOTTOM_ICON_WIDTH-50, BOTTOM_ICON_WIDTH, BOTTOM_ICON_WIDTH);
116   - _nextBtn.tag = PreViewSubViewIdx_Next;
  114 + _nextBtn = [[LVCVideoMgrButton alloc] initWithFrame:CGRectMake(KScreenWidth-BOTTOM_ICON_WIDTH-50, KScreenHeight-BOTTOM_ICON_WIDTH-50, BOTTOM_ICON_WIDTH, BOTTOM_ICON_WIDTH) left:NO];
  115 + _nextBtn.videoMgrState = kLocalSelect;
117 116 [_nextBtn addTarget:self action:@selector(onClick:) forControlEvents:UIControlEventTouchUpInside];
118   - [_nextBtn setImage:[UIImage imageNamed:@"对勾 (2)"] forState:UIControlStateNormal];
119 117 }
120 118 return _nextBtn;
121 119 }
... ... @@ -137,7 +135,7 @@
137 135 - (LVCVideoMgrButton *)effectsBtn
138 136 {
139 137 if (!_effectsBtn){
140   - _effectsBtn = [[LVCVideoMgrButton alloc] initWithFrame:CGRectMake(50, KScreenHeight-BOTTOM_ICON_WIDTH-50, BOTTOM_ICON_WIDTH, BOTTOM_ICON_WIDTH)];
  138 + _effectsBtn = [[LVCVideoMgrButton alloc] initWithFrame:CGRectMake(50, KScreenHeight-BOTTOM_ICON_WIDTH-50, BOTTOM_ICON_WIDTH, BOTTOM_ICON_WIDTH) left:YES];
141 139 _effectsBtn.videoMgrState = kEffectsState;
142 140 [_effectsBtn addTarget:self action:@selector(onClick:) forControlEvents:UIControlEventTouchUpInside];
143 141 }
... ...
LiveVideoCloud/Classes/Sections/Mine/Views/LVCVideoMgrButton.h
... ... @@ -12,11 +12,14 @@ enum {
12 12 kEffectsState = (1 << 16), //导入视频状态
13 13 kDeleteState = (1 << 17), //删除状态
14 14 kBackSelect = (1 << 18), //回退状态(回退->删除->导入)
  15 + kLocalSelect = (1 << 19),
  16 + kNextSelect = (1 << 20),
15 17 };
16 18  
17 19 @interface LVCVideoMgrButton : UIButton
18 20  
19 21 @property (nonatomic, assign) NSUInteger videoMgrState;
20 22  
  23 +- (instancetype)initWithFrame:(CGRect)frame left:(BOOL)left;
21 24  
22 25 @end
... ...
LiveVideoCloud/Classes/Sections/Mine/Views/LVCVideoMgrButton.m
... ... @@ -11,22 +11,31 @@
11 11  
12 12 @implementation LVCVideoMgrButton
13 13  
14   -- (instancetype)initWithFrame:(CGRect)frame
  14 +- (instancetype)initWithFrame:(CGRect)frame left:(BOOL)left
15 15 {
16 16 self = [super initWithFrame:frame];
17 17 if (self){
18 18  
19 19 self.backgroundColor = [UIColor blackColor];
20 20  
21   - [self setImage:[UIImage imageNamed:@"美颜设置-角色"] forState:kEffectsState];
22   - [self setImage:[UIImage imageNamed:@"美颜设置-角色"] forState:(kEffectsState | UIControlStateHighlighted )];
23   - [self setImage:[UIImage imageNamed:@"美颜设置-角色"] forState:(kEffectsState | UIControlStateDisabled )];
24   - [self setImage:[UIImage imageNamed:@"delete"] forState:kDeleteState];
25   - [self setImage:[UIImage imageNamed:@"delete"] forState:(kDeleteState | UIControlStateHighlighted)];
26   - [self setImage:[UIImage imageNamed:@"delete"] forState:(kDeleteState | UIControlStateDisabled )];
27   - [self setImage:[UIImage imageNamed:@"revoke"] forState:kBackSelect];
28   - [self setImage:[UIImage imageNamed:@"revoke"] forState:(kBackSelect | UIControlStateHighlighted)];
29   - [self setImage:[UIImage imageNamed:@"revoke"] forState:(kBackSelect | UIControlStateDisabled )];
  21 + if (left) {
  22 + [self setImage:[UIImage imageNamed:@"美颜设置-角色"] forState:kEffectsState];
  23 + [self setImage:[UIImage imageNamed:@"美颜设置-角色"] forState:(kEffectsState | UIControlStateHighlighted )];
  24 + [self setImage:[UIImage imageNamed:@"美颜设置-角色"] forState:(kEffectsState | UIControlStateDisabled )];
  25 + [self setImage:[UIImage imageNamed:@"delete"] forState:kDeleteState];
  26 + [self setImage:[UIImage imageNamed:@"delete"] forState:(kDeleteState | UIControlStateHighlighted)];
  27 + [self setImage:[UIImage imageNamed:@"delete"] forState:(kDeleteState | UIControlStateDisabled )];
  28 + [self setImage:[UIImage imageNamed:@"revoke"] forState:kBackSelect];
  29 + [self setImage:[UIImage imageNamed:@"revoke"] forState:(kBackSelect | UIControlStateHighlighted)];
  30 + [self setImage:[UIImage imageNamed:@"revoke"] forState:(kBackSelect | UIControlStateDisabled )];
  31 + } else {
  32 + [self setImage:[UIImage imageNamed:@"相册"] forState:kLocalSelect];
  33 + [self setImage:[UIImage imageNamed:@"相册"] forState:(kLocalSelect | UIControlStateHighlighted )];
  34 + [self setImage:[UIImage imageNamed:@"相册"] forState:(kLocalSelect | UIControlStateDisabled )];
  35 + [self setImage:[UIImage imageNamed:@"对勾 (2)"] forState:kNextSelect];
  36 + [self setImage:[UIImage imageNamed:@"对勾 (2)"] forState:(kNextSelect | UIControlStateHighlighted)];
  37 + [self setImage:[UIImage imageNamed:@"对勾 (2)"] forState:(kNextSelect | UIControlStateDisabled )];
  38 + }
30 39  
31 40 }
32 41 return self;
... ... @@ -36,11 +45,16 @@
36 45 {
37 46 if (videoMgrState == kEffectsState){
38 47 self.tag = PreViewSubViewIdx_Effects;
39   - }else if (videoMgrState == kDeleteState){
  48 + } else if (videoMgrState == kDeleteState){
40 49 self.tag = PreViewSubViewIdx_Delete;
41   - }else if (videoMgrState == kBackSelect){
  50 + } else if (videoMgrState == kBackSelect){
42 51 self.tag = PreViewSubViewIdx_Revoke;
  52 + } else if (videoMgrState == kLocalSelect) {
  53 + self.tag = PreViewSubViewIdx_LocalVideo;
  54 + } else if (videoMgrState == kNextSelect) {
  55 + self.tag = PreViewSubViewIdx_Next;
43 56 }
  57 +
44 58 _videoMgrState = videoMgrState;
45 59  
46 60 [self setNeedsLayout];
... ...
LiveVideoCloud/ShortVideoData.plist
... ... @@ -57,7 +57,7 @@
57 57 <array>
58 58 <dict>
59 59 <key>image</key>
60   - <string>decal_0_icon</string>
  60 + <string>decal_0</string>
61 61 <key>txt</key>
62 62 <string>nil</string>
63 63 <key>idx</key>
... ... @@ -67,7 +67,7 @@
67 67 </dict>
68 68 <dict>
69 69 <key>image</key>
70   - <string>decal_1_icon</string>
  70 + <string>decal_1</string>
71 71 <key>txt</key>
72 72 <string>nil</string>
73 73 <key>idx</key>
... ... @@ -77,7 +77,7 @@
77 77 </dict>
78 78 <dict>
79 79 <key>image</key>
80   - <string>decal_2_icon</string>
  80 + <string>decal_2</string>
81 81 <key>txt</key>
82 82 <string>nil</string>
83 83 <key>idx</key>
... ... @@ -87,7 +87,7 @@
87 87 </dict>
88 88 <dict>
89 89 <key>image</key>
90   - <string>decal_3_icon</string>
  90 + <string>decal_3</string>
91 91 <key>txt</key>
92 92 <string>nil</string>
93 93 <key>idx</key>
... ... @@ -97,7 +97,7 @@
97 97 </dict>
98 98 <dict>
99 99 <key>image</key>
100   - <string>decal_4_icon</string>
  100 + <string>decal_4</string>
101 101 <key>txt</key>
102 102 <string>nil</string>
103 103 <key>idx</key>
... ... @@ -107,7 +107,7 @@
107 107 </dict>
108 108 <dict>
109 109 <key>image</key>
110   - <string>decal_5_icon</string>
  110 + <string>decal_5</string>
111 111 <key>txt</key>
112 112 <string>nil</string>
113 113 <key>idx</key>
... ... @@ -117,7 +117,7 @@
117 117 </dict>
118 118 <dict>
119 119 <key>image</key>
120   - <string>decal_6_icon</string>
  120 + <string>decal_6</string>
121 121 <key>txt</key>
122 122 <string>nil</string>
123 123 <key>idx</key>
... ... @@ -127,7 +127,7 @@
127 127 </dict>
128 128 <dict>
129 129 <key>image</key>
130   - <string>decal_7_icon</string>
  130 + <string>decal_7</string>
131 131 <key>txt</key>
132 132 <string>nil</string>
133 133 <key>idx</key>
... ...
LiveVideoCloud/animation.xcassets/ShortVideo/ae/Contents.json 0 → 100644
  1 +{
  2 + "info" : {
  3 + "version" : 1,
  4 + "author" : "xcode"
  5 + }
  6 +}
0 7 \ No newline at end of file
... ...
LiveVideoCloud/animation.xcassets/ShortVideo/ae/Frozen.imageset/Contents.json 0 → 100644
  1 +{
  2 + "images" : [
  3 + {
  4 + "idiom" : "universal",
  5 + "filename" : "Frozen.png",
  6 + "scale" : "1x"
  7 + },
  8 + {
  9 + "idiom" : "universal",
  10 + "scale" : "2x"
  11 + },
  12 + {
  13 + "idiom" : "universal",
  14 + "scale" : "3x"
  15 + }
  16 + ],
  17 + "info" : {
  18 + "version" : 1,
  19 + "author" : "xcode"
  20 + }
  21 +}
0 22 \ No newline at end of file
... ...
LiveVideoCloud/animation.xcassets/ShortVideo/ae/Frozen.imageset/Frozen.png 0 → 100644

217 KB

LiveVideoCloud/animation.xcassets/ShortVideo/ae/See You Again.imageset/Contents.json 0 → 100644
  1 +{
  2 + "images" : [
  3 + {
  4 + "idiom" : "universal",
  5 + "filename" : "See You Again.png",
  6 + "scale" : "1x"
  7 + },
  8 + {
  9 + "idiom" : "universal",
  10 + "scale" : "2x"
  11 + },
  12 + {
  13 + "idiom" : "universal",
  14 + "scale" : "3x"
  15 + }
  16 + ],
  17 + "info" : {
  18 + "version" : 1,
  19 + "author" : "xcode"
  20 + }
  21 +}
0 22 \ No newline at end of file
... ...
LiveVideoCloud/animation.xcassets/ShortVideo/ae/See You Again.imageset/See You Again.png 0 → 100644

243 KB

LiveVideoCloud/animation.xcassets/ShortVideo/ae/Stay.imageset/Contents.json 0 → 100644
  1 +{
  2 + "images" : [
  3 + {
  4 + "idiom" : "universal",
  5 + "filename" : "Stay.png",
  6 + "scale" : "1x"
  7 + },
  8 + {
  9 + "idiom" : "universal",
  10 + "scale" : "2x"
  11 + },
  12 + {
  13 + "idiom" : "universal",
  14 + "scale" : "3x"
  15 + }
  16 + ],
  17 + "info" : {
  18 + "version" : 1,
  19 + "author" : "xcode"
  20 + }
  21 +}
0 22 \ No newline at end of file
... ...
LiveVideoCloud/animation.xcassets/ShortVideo/ae/Stay.imageset/Stay.png 0 → 100644

86.9 KB

LiveVideoCloud/animation.xcassets/ShortVideo/ae/closeef.imageset/Contents.json 0 → 100644
  1 +{
  2 + "images" : [
  3 + {
  4 + "idiom" : "universal",
  5 + "filename" : "关闭效果@2x.png",
  6 + "scale" : "1x"
  7 + },
  8 + {
  9 + "idiom" : "universal",
  10 + "filename" : "关闭效果@3x.png",
  11 + "scale" : "2x"
  12 + },
  13 + {
  14 + "idiom" : "universal",
  15 + "scale" : "3x"
  16 + }
  17 + ],
  18 + "info" : {
  19 + "version" : 1,
  20 + "author" : "xcode"
  21 + }
  22 +}
0 23 \ No newline at end of file
... ...
LiveVideoCloud/animation.xcassets/ShortVideo/ae/closeef.imageset/关闭效果@2x.png 0 → 100644

2.36 KB

LiveVideoCloud/animation.xcassets/ShortVideo/ae/closeef.imageset/关闭效果@3x.png 0 → 100644

4.18 KB

LiveVideoCloud/animation.xcassets/ShortVideo/ae/concert.imageset/Contents.json 0 → 100644
  1 +{
  2 + "images" : [
  3 + {
  4 + "idiom" : "universal",
  5 + "filename" : "concert.png",
  6 + "scale" : "1x"
  7 + },
  8 + {
  9 + "idiom" : "universal",
  10 + "scale" : "2x"
  11 + },
  12 + {
  13 + "idiom" : "universal",
  14 + "scale" : "3x"
  15 + }
  16 + ],
  17 + "info" : {
  18 + "version" : 1,
  19 + "author" : "xcode"
  20 + }
  21 +}
0 22 \ No newline at end of file
... ...
LiveVideoCloud/animation.xcassets/ShortVideo/ae/concert.imageset/concert.png 0 → 100644

58.9 KB

LiveVideoCloud/animation.xcassets/ShortVideo/ae/ktv.imageset/Contents.json 0 → 100644
  1 +{
  2 + "images" : [
  3 + {
  4 + "idiom" : "universal",
  5 + "filename" : "ktv.png",
  6 + "scale" : "1x"
  7 + },
  8 + {
  9 + "idiom" : "universal",
  10 + "scale" : "2x"
  11 + },
  12 + {
  13 + "idiom" : "universal",
  14 + "scale" : "3x"
  15 + }
  16 + ],
  17 + "info" : {
  18 + "version" : 1,
  19 + "author" : "xcode"
  20 + }
  21 +}
0 22 \ No newline at end of file
... ...
LiveVideoCloud/animation.xcassets/ShortVideo/ae/ktv.imageset/ktv.png 0 → 100644

42.1 KB

LiveVideoCloud/animation.xcassets/ShortVideo/ae/man.imageset/Contents.json 0 → 100644
  1 +{
  2 + "images" : [
  3 + {
  4 + "idiom" : "universal",
  5 + "filename" : "man.png",
  6 + "scale" : "1x"
  7 + },
  8 + {
  9 + "idiom" : "universal",
  10 + "scale" : "2x"
  11 + },
  12 + {
  13 + "idiom" : "universal",
  14 + "scale" : "3x"
  15 + }
  16 + ],
  17 + "info" : {
  18 + "version" : 1,
  19 + "author" : "xcode"
  20 + }
  21 +}
0 22 \ No newline at end of file
... ...
LiveVideoCloud/animation.xcassets/ShortVideo/ae/man.imageset/man.png 0 → 100644

30.4 KB

LiveVideoCloud/animation.xcassets/ShortVideo/ae/robot.imageset/Contents.json 0 → 100644
  1 +{
  2 + "images" : [
  3 + {
  4 + "idiom" : "universal",
  5 + "filename" : "robot.png",
  6 + "scale" : "1x"
  7 + },
  8 + {
  9 + "idiom" : "universal",
  10 + "scale" : "2x"
  11 + },
  12 + {
  13 + "idiom" : "universal",
  14 + "scale" : "3x"
  15 + }
  16 + ],
  17 + "info" : {
  18 + "version" : 1,
  19 + "author" : "xcode"
  20 + }
  21 +}
0 22 \ No newline at end of file
... ...
LiveVideoCloud/animation.xcassets/ShortVideo/ae/robot.imageset/robot.png 0 → 100644

62.6 KB

LiveVideoCloud/animation.xcassets/ShortVideo/ae/solemn.imageset/Contents.json 0 → 100644
  1 +{
  2 + "images" : [
  3 + {
  4 + "idiom" : "universal",
  5 + "filename" : "solemn.png",
  6 + "scale" : "1x"
  7 + },
  8 + {
  9 + "idiom" : "universal",
  10 + "scale" : "2x"
  11 + },
  12 + {
  13 + "idiom" : "universal",
  14 + "scale" : "3x"
  15 + }
  16 + ],
  17 + "info" : {
  18 + "version" : 1,
  19 + "author" : "xcode"
  20 + }
  21 +}
0 22 \ No newline at end of file
... ...
LiveVideoCloud/animation.xcassets/ShortVideo/ae/solemn.imageset/solemn.png 0 → 100644

37.1 KB

LiveVideoCloud/animation.xcassets/ShortVideo/ae/studio.imageset/Contents.json 0 → 100644
  1 +{
  2 + "images" : [
  3 + {
  4 + "idiom" : "universal",
  5 + "filename" : "studio.png",
  6 + "scale" : "1x"
  7 + },
  8 + {
  9 + "idiom" : "universal",
  10 + "scale" : "2x"
  11 + },
  12 + {
  13 + "idiom" : "universal",
  14 + "scale" : "3x"
  15 + }
  16 + ],
  17 + "info" : {
  18 + "version" : 1,
  19 + "author" : "xcode"
  20 + }
  21 +}
0 22 \ No newline at end of file
... ...
LiveVideoCloud/animation.xcassets/ShortVideo/ae/studio.imageset/studio.png 0 → 100644

26 KB

LiveVideoCloud/animation.xcassets/ShortVideo/ae/woman.imageset/Contents.json 0 → 100644
  1 +{
  2 + "images" : [
  3 + {
  4 + "idiom" : "universal",
  5 + "filename" : "woman.png",
  6 + "scale" : "1x"
  7 + },
  8 + {
  9 + "idiom" : "universal",
  10 + "scale" : "2x"
  11 + },
  12 + {
  13 + "idiom" : "universal",
  14 + "scale" : "3x"
  15 + }
  16 + ],
  17 + "info" : {
  18 + "version" : 1,
  19 + "author" : "xcode"
  20 + }
  21 +}
0 22 \ No newline at end of file
... ...
LiveVideoCloud/animation.xcassets/ShortVideo/ae/woman.imageset/woman.png 0 → 100644

53.4 KB

LiveVideoCloud/animation.xcassets/ShortVideo/ae/woodwing.imageset/Contents.json 0 → 100644
  1 +{
  2 + "images" : [
  3 + {
  4 + "idiom" : "universal",
  5 + "filename" : "woodwing.png",
  6 + "scale" : "1x"
  7 + },
  8 + {
  9 + "idiom" : "universal",
  10 + "scale" : "2x"
  11 + },
  12 + {
  13 + "idiom" : "universal",
  14 + "scale" : "3x"
  15 + }
  16 + ],
  17 + "info" : {
  18 + "version" : 1,
  19 + "author" : "xcode"
  20 + }
  21 +}
0 22 \ No newline at end of file
... ...
LiveVideoCloud/animation.xcassets/ShortVideo/ae/woodwing.imageset/woodwing.png 0 → 100644

40.5 KB

LiveVideoCloud/animation.xcassets/ShortVideo/decals/Contents.json 0 → 100644
  1 +{
  2 + "info" : {
  3 + "version" : 1,
  4 + "author" : "xcode"
  5 + }
  6 +}
0 7 \ No newline at end of file
... ...
LiveVideoCloud/animation.xcassets/ShortVideo/decals/decal_0.imageset/Contents.json 0 → 100644
  1 +{
  2 + "images" : [
  3 + {
  4 + "idiom" : "universal",
  5 + "scale" : "1x"
  6 + },
  7 + {
  8 + "idiom" : "universal",
  9 + "filename" : "decal_0.png",
  10 + "scale" : "2x"
  11 + },
  12 + {
  13 + "idiom" : "universal",
  14 + "scale" : "3x"
  15 + }
  16 + ],
  17 + "info" : {
  18 + "version" : 1,
  19 + "author" : "xcode"
  20 + }
  21 +}
0 22 \ No newline at end of file
... ...
LiveVideoCloud/animation.xcassets/ShortVideo/decals/decal_0.imageset/decal_0.png 0 → 100644

88.1 KB

LiveVideoCloud/animation.xcassets/ShortVideo/decals/decal_1.imageset/Contents.json 0 → 100644
  1 +{
  2 + "images" : [
  3 + {
  4 + "idiom" : "universal",
  5 + "scale" : "1x"
  6 + },
  7 + {
  8 + "idiom" : "universal",
  9 + "filename" : "decal_1.png",
  10 + "scale" : "2x"
  11 + },
  12 + {
  13 + "idiom" : "universal",
  14 + "scale" : "3x"
  15 + }
  16 + ],
  17 + "info" : {
  18 + "version" : 1,
  19 + "author" : "xcode"
  20 + }
  21 +}
0 22 \ No newline at end of file
... ...
LiveVideoCloud/animation.xcassets/ShortVideo/decals/decal_1.imageset/decal_1.png 0 → 100644

107 KB

LiveVideoCloud/animation.xcassets/ShortVideo/decals/decal_2.imageset/Contents.json 0 → 100644
  1 +{
  2 + "images" : [
  3 + {
  4 + "idiom" : "universal",
  5 + "scale" : "1x"
  6 + },
  7 + {
  8 + "idiom" : "universal",
  9 + "filename" : "decal_2.png",
  10 + "scale" : "2x"
  11 + },
  12 + {
  13 + "idiom" : "universal",
  14 + "scale" : "3x"
  15 + }
  16 + ],
  17 + "info" : {
  18 + "version" : 1,
  19 + "author" : "xcode"
  20 + }
  21 +}
0 22 \ No newline at end of file
... ...
LiveVideoCloud/animation.xcassets/ShortVideo/decals/decal_2.imageset/decal_2.png 0 → 100644

119 KB

LiveVideoCloud/animation.xcassets/ShortVideo/decals/decal_3.imageset/Contents.json 0 → 100644
  1 +{
  2 + "images" : [
  3 + {
  4 + "idiom" : "universal",
  5 + "scale" : "1x"
  6 + },
  7 + {
  8 + "idiom" : "universal",
  9 + "filename" : "decal_3.png",
  10 + "scale" : "2x"
  11 + },
  12 + {
  13 + "idiom" : "universal",
  14 + "scale" : "3x"
  15 + }
  16 + ],
  17 + "info" : {
  18 + "version" : 1,
  19 + "author" : "xcode"
  20 + }
  21 +}
0 22 \ No newline at end of file
... ...
LiveVideoCloud/animation.xcassets/ShortVideo/decals/decal_3.imageset/decal_3.png 0 → 100644

68.9 KB

LiveVideoCloud/animation.xcassets/ShortVideo/decals/decal_4.imageset/Contents.json 0 → 100644
  1 +{
  2 + "images" : [
  3 + {
  4 + "idiom" : "universal",
  5 + "scale" : "1x"
  6 + },
  7 + {
  8 + "idiom" : "universal",
  9 + "filename" : "decal_4.png",
  10 + "scale" : "2x"
  11 + },
  12 + {
  13 + "idiom" : "universal",
  14 + "scale" : "3x"
  15 + }
  16 + ],
  17 + "info" : {
  18 + "version" : 1,
  19 + "author" : "xcode"
  20 + }
  21 +}
0 22 \ No newline at end of file
... ...
LiveVideoCloud/animation.xcassets/ShortVideo/decals/decal_4.imageset/decal_4.png 0 → 100644

37 KB

LiveVideoCloud/animation.xcassets/ShortVideo/decals/decal_5.imageset/Contents.json 0 → 100644
  1 +{
  2 + "images" : [
  3 + {
  4 + "idiom" : "universal",
  5 + "scale" : "1x"
  6 + },
  7 + {
  8 + "idiom" : "universal",
  9 + "filename" : "decal_5.png",
  10 + "scale" : "2x"
  11 + },
  12 + {
  13 + "idiom" : "universal",
  14 + "scale" : "3x"
  15 + }
  16 + ],
  17 + "info" : {
  18 + "version" : 1,
  19 + "author" : "xcode"
  20 + }
  21 +}
0 22 \ No newline at end of file
... ...
LiveVideoCloud/animation.xcassets/ShortVideo/decals/decal_5.imageset/decal_5.png 0 → 100644

40.1 KB

LiveVideoCloud/animation.xcassets/ShortVideo/decals/decal_6.imageset/Contents.json 0 → 100644
  1 +{
  2 + "images" : [
  3 + {
  4 + "idiom" : "universal",
  5 + "scale" : "1x"
  6 + },
  7 + {
  8 + "idiom" : "universal",
  9 + "filename" : "decal_6.png",
  10 + "scale" : "2x"
  11 + },
  12 + {
  13 + "idiom" : "universal",
  14 + "scale" : "3x"
  15 + }
  16 + ],
  17 + "info" : {
  18 + "version" : 1,
  19 + "author" : "xcode"
  20 + }
  21 +}
0 22 \ No newline at end of file
... ...
LiveVideoCloud/animation.xcassets/ShortVideo/decals/decal_6.imageset/decal_6.png 0 → 100644

33.4 KB

LiveVideoCloud/animation.xcassets/ShortVideo/decals/decal_7.imageset/Contents.json 0 → 100644
  1 +{
  2 + "images" : [
  3 + {
  4 + "idiom" : "universal",
  5 + "scale" : "1x"
  6 + },
  7 + {
  8 + "idiom" : "universal",
  9 + "filename" : "decal_7.png",
  10 + "scale" : "2x"
  11 + },
  12 + {
  13 + "idiom" : "universal",
  14 + "scale" : "3x"
  15 + }
  16 + ],
  17 + "info" : {
  18 + "version" : 1,
  19 + "author" : "xcode"
  20 + }
  21 +}
0 22 \ No newline at end of file
... ...
LiveVideoCloud/animation.xcassets/ShortVideo/decals/decal_7.imageset/decal_7.png 0 → 100644

26.1 KB

LiveVideoCloud/animation.xcassets/ShortVideo/decals/decal_t_0.imageset/Contents.json 0 → 100644
  1 +{
  2 + "images" : [
  3 + {
  4 + "idiom" : "universal",
  5 + "scale" : "1x"
  6 + },
  7 + {
  8 + "idiom" : "universal",
  9 + "filename" : "decal_t_0.png",
  10 + "scale" : "2x"
  11 + },
  12 + {
  13 + "idiom" : "universal",
  14 + "scale" : "3x"
  15 + }
  16 + ],
  17 + "info" : {
  18 + "version" : 1,
  19 + "author" : "xcode"
  20 + }
  21 +}
0 22 \ No newline at end of file
... ...
LiveVideoCloud/animation.xcassets/ShortVideo/decals/decal_t_0.imageset/decal_t_0.png 0 → 100644

37.6 KB

LiveVideoCloud/animation.xcassets/ShortVideo/decals/decal_t_1.imageset/Contents.json 0 → 100644
  1 +{
  2 + "images" : [
  3 + {
  4 + "idiom" : "universal",
  5 + "scale" : "1x"
  6 + },
  7 + {
  8 + "idiom" : "universal",
  9 + "filename" : "decal_t_1.png",
  10 + "scale" : "2x"
  11 + },
  12 + {
  13 + "idiom" : "universal",
  14 + "scale" : "3x"
  15 + }
  16 + ],
  17 + "info" : {
  18 + "version" : 1,
  19 + "author" : "xcode"
  20 + }
  21 +}
0 22 \ No newline at end of file
... ...
LiveVideoCloud/animation.xcassets/ShortVideo/decals/decal_t_1.imageset/decal_t_1.png 0 → 100644

42.8 KB

LiveVideoCloud/animation.xcassets/ShortVideo/decals/decal_t_2.imageset/Contents.json 0 → 100644
  1 +{
  2 + "images" : [
  3 + {
  4 + "idiom" : "universal",
  5 + "scale" : "1x"
  6 + },
  7 + {
  8 + "idiom" : "universal",
  9 + "filename" : "decal_t_2.png",
  10 + "scale" : "2x"
  11 + },
  12 + {
  13 + "idiom" : "universal",
  14 + "scale" : "3x"
  15 + }
  16 + ],
  17 + "info" : {
  18 + "version" : 1,
  19 + "author" : "xcode"
  20 + }
  21 +}
0 22 \ No newline at end of file
... ...
LiveVideoCloud/animation.xcassets/ShortVideo/decals/decal_t_2.imageset/decal_t_2.png 0 → 100644

25.6 KB

LiveVideoCloud/animation.xcassets/ShortVideo/decals/decal_t_3.imageset/Contents.json 0 → 100644
  1 +{
  2 + "images" : [
  3 + {
  4 + "idiom" : "universal",
  5 + "scale" : "1x"
  6 + },
  7 + {
  8 + "idiom" : "universal",
  9 + "filename" : "decal_t_3.png",
  10 + "scale" : "2x"
  11 + },
  12 + {
  13 + "idiom" : "universal",
  14 + "scale" : "3x"
  15 + }
  16 + ],
  17 + "info" : {
  18 + "version" : 1,
  19 + "author" : "xcode"
  20 + }
  21 +}
0 22 \ No newline at end of file
... ...
LiveVideoCloud/animation.xcassets/ShortVideo/decals/decal_t_3.imageset/decal_t_3.png 0 → 100644

33.1 KB

LiveVideoCloud/animation.xcassets/ShortVideo/decals/decal_t_4.imageset/Contents.json 0 → 100644
  1 +{
  2 + "images" : [
  3 + {
  4 + "idiom" : "universal",
  5 + "scale" : "1x"
  6 + },
  7 + {
  8 + "idiom" : "universal",
  9 + "filename" : "decal_t_4.png",
  10 + "scale" : "2x"
  11 + },
  12 + {
  13 + "idiom" : "universal",
  14 + "scale" : "3x"
  15 + }
  16 + ],
  17 + "info" : {
  18 + "version" : 1,
  19 + "author" : "xcode"
  20 + }
  21 +}
0 22 \ No newline at end of file
... ...
LiveVideoCloud/animation.xcassets/ShortVideo/decals/decal_t_4.imageset/decal_t_4.png 0 → 100644

26.6 KB

LiveVideoCloud/animation.xcassets/ShortVideo/thumb.imageset/Contents.json 0 → 100644
  1 +{
  2 + "images" : [
  3 + {
  4 + "idiom" : "universal",
  5 + "scale" : "1x"
  6 + },
  7 + {
  8 + "idiom" : "universal",
  9 + "filename" : "thumb@2x.png",
  10 + "scale" : "2x"
  11 + },
  12 + {
  13 + "idiom" : "universal",
  14 + "scale" : "3x"
  15 + }
  16 + ],
  17 + "info" : {
  18 + "version" : 1,
  19 + "author" : "xcode"
  20 + }
  21 +}
0 22 \ No newline at end of file
... ...
LiveVideoCloud/animation.xcassets/ShortVideo/thumb.imageset/thumb@2x.png 0 → 100644

487 Bytes