Commit 392d034eb9ac0fb0e07848b405f1ffdda4862a65
1 parent
d1054ec8
添加短视频入口
Showing
63 changed files
with
1769 additions
and
20 deletions
LiveVideoCloud.xcodeproj/project.pbxproj
... | ... | @@ -75,6 +75,14 @@ |
75 | 75 | 810B65061E779B1F00133E15 /* View+MASAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 810B64FA1E779B1F00133E15 /* View+MASAdditions.m */; }; |
76 | 76 | 810B65071E779B1F00133E15 /* ViewController+MASAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 810B64FD1E779B1F00133E15 /* ViewController+MASAdditions.m */; }; |
77 | 77 | 811BB68E1E8116C8005C6291 /* NSString+StringSize.m in Sources */ = {isa = PBXBuildFile; fileRef = 811BB68D1E8116C8005C6291 /* NSString+StringSize.m */; }; |
78 | + 8156A7A91F0F5A1D007EE146 /* LVCShortVideoController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8156A7A81F0F5A1D007EE146 /* LVCShortVideoController.m */; }; | |
79 | + 8156A7AC1F0F5AC6007EE146 /* LVCPreviewView.m in Sources */ = {isa = PBXBuildFile; fileRef = 8156A7AB1F0F5AC6007EE146 /* LVCPreviewView.m */; }; | |
80 | + 8156A7AF1F0F73F7007EE146 /* LVCVideoMgrButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 8156A7AE1F0F73F7007EE146 /* LVCVideoMgrButton.m */; }; | |
81 | + 8156A7B11F0F8390007EE146 /* ShortVideoData.plist in Resources */ = {isa = PBXBuildFile; fileRef = 8156A7B01F0F8390007EE146 /* ShortVideoData.plist */; }; | |
82 | + 8156A7B41F0F8FCC007EE146 /* LVCAERootView.m in Sources */ = {isa = PBXBuildFile; fileRef = 8156A7B31F0F8FCC007EE146 /* LVCAERootView.m */; }; | |
83 | + 8156A7B71F0F93AA007EE146 /* LVCAECommonView.m in Sources */ = {isa = PBXBuildFile; fileRef = 8156A7B61F0F93AA007EE146 /* LVCAECommonView.m */; }; | |
84 | + 8156A7BA1F0F9541007EE146 /* AECommonCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 8156A7B91F0F9541007EE146 /* AECommonCell.m */; }; | |
85 | + 8156A7C01F0F9589007EE146 /* AEModelTemplate.m in Sources */ = {isa = PBXBuildFile; fileRef = 8156A7BF1F0F9589007EE146 /* AEModelTemplate.m */; }; | |
78 | 86 | 8178D4241F02043500AA78A4 /* LVCFullScreenPlayerController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8178D41F1F02043500AA78A4 /* LVCFullScreenPlayerController.m */; }; |
79 | 87 | 8178D4251F02043500AA78A4 /* LVCLivePlayerController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8178D4211F02043500AA78A4 /* LVCLivePlayerController.m */; }; |
80 | 88 | 8178D4311F02044300AA78A4 /* LVCChatRoomModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 8178D42C1F02044300AA78A4 /* LVCChatRoomModel.m */; }; |
... | ... | @@ -443,6 +451,21 @@ |
443 | 451 | 810B64FD1E779B1F00133E15 /* ViewController+MASAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "ViewController+MASAdditions.m"; sourceTree = "<group>"; }; |
444 | 452 | 811BB68C1E8116C8005C6291 /* NSString+StringSize.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSString+StringSize.h"; sourceTree = "<group>"; }; |
445 | 453 | 811BB68D1E8116C8005C6291 /* NSString+StringSize.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSString+StringSize.m"; sourceTree = "<group>"; }; |
454 | + 8156A7A71F0F5A1D007EE146 /* LVCShortVideoController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LVCShortVideoController.h; sourceTree = "<group>"; }; | |
455 | + 8156A7A81F0F5A1D007EE146 /* LVCShortVideoController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LVCShortVideoController.m; sourceTree = "<group>"; }; | |
456 | + 8156A7AA1F0F5AC6007EE146 /* LVCPreviewView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LVCPreviewView.h; sourceTree = "<group>"; }; | |
457 | + 8156A7AB1F0F5AC6007EE146 /* LVCPreviewView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LVCPreviewView.m; sourceTree = "<group>"; }; | |
458 | + 8156A7AD1F0F73F7007EE146 /* LVCVideoMgrButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LVCVideoMgrButton.h; sourceTree = "<group>"; }; | |
459 | + 8156A7AE1F0F73F7007EE146 /* LVCVideoMgrButton.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LVCVideoMgrButton.m; sourceTree = "<group>"; }; | |
460 | + 8156A7B01F0F8390007EE146 /* ShortVideoData.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = ShortVideoData.plist; sourceTree = "<group>"; }; | |
461 | + 8156A7B21F0F8FCC007EE146 /* LVCAERootView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LVCAERootView.h; sourceTree = "<group>"; }; | |
462 | + 8156A7B31F0F8FCC007EE146 /* LVCAERootView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LVCAERootView.m; sourceTree = "<group>"; }; | |
463 | + 8156A7B51F0F93AA007EE146 /* LVCAECommonView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LVCAECommonView.h; sourceTree = "<group>"; }; | |
464 | + 8156A7B61F0F93AA007EE146 /* LVCAECommonView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LVCAECommonView.m; sourceTree = "<group>"; }; | |
465 | + 8156A7B81F0F9541007EE146 /* AECommonCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AECommonCell.h; sourceTree = "<group>"; }; | |
466 | + 8156A7B91F0F9541007EE146 /* AECommonCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AECommonCell.m; sourceTree = "<group>"; }; | |
467 | + 8156A7BE1F0F9589007EE146 /* AEModelTemplate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AEModelTemplate.h; sourceTree = "<group>"; }; | |
468 | + 8156A7BF1F0F9589007EE146 /* AEModelTemplate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AEModelTemplate.m; sourceTree = "<group>"; }; | |
446 | 469 | 8178D41E1F02043500AA78A4 /* LVCFullScreenPlayerController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LVCFullScreenPlayerController.h; sourceTree = "<group>"; }; |
447 | 470 | 8178D41F1F02043500AA78A4 /* LVCFullScreenPlayerController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LVCFullScreenPlayerController.m; sourceTree = "<group>"; }; |
448 | 471 | 8178D4201F02043500AA78A4 /* LVCLivePlayerController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LVCLivePlayerController.h; sourceTree = "<group>"; }; |
... | ... | @@ -892,6 +915,8 @@ |
892 | 915 | D209AD6D1EC583B700D82E3B /* MineMessageController.m */, |
893 | 916 | D209AD6F1EC583D100D82E3B /* MineAccountController.h */, |
894 | 917 | D209AD701EC583D100D82E3B /* MineAccountController.m */, |
918 | + 8156A7A71F0F5A1D007EE146 /* LVCShortVideoController.h */, | |
919 | + 8156A7A81F0F5A1D007EE146 /* LVCShortVideoController.m */, | |
895 | 920 | ); |
896 | 921 | path = Controllers; |
897 | 922 | sourceTree = "<group>"; |
... | ... | @@ -937,6 +962,8 @@ |
937 | 962 | 4B45CE621EB86A590079AFB7 /* LVCMineCommonModel.m */, |
938 | 963 | 4B45CE631EB86A590079AFB7 /* LVCMineModel.h */, |
939 | 964 | 4B45CE641EB86A590079AFB7 /* LVCMineModel.m */, |
965 | + 8156A7BE1F0F9589007EE146 /* AEModelTemplate.h */, | |
966 | + 8156A7BF1F0F9589007EE146 /* AEModelTemplate.m */, | |
940 | 967 | ); |
941 | 968 | path = Model; |
942 | 969 | sourceTree = "<group>"; |
... | ... | @@ -960,6 +987,16 @@ |
960 | 987 | 4B45CE751EB86A590079AFB7 /* LVCTextField.m */, |
961 | 988 | 4B42A6C51EC0171800DA09D7 /* PlayRecordCell.h */, |
962 | 989 | 4B42A6C61EC0171800DA09D7 /* PlayRecordCell.m */, |
990 | + 8156A7AA1F0F5AC6007EE146 /* LVCPreviewView.h */, | |
991 | + 8156A7AB1F0F5AC6007EE146 /* LVCPreviewView.m */, | |
992 | + 8156A7AD1F0F73F7007EE146 /* LVCVideoMgrButton.h */, | |
993 | + 8156A7AE1F0F73F7007EE146 /* LVCVideoMgrButton.m */, | |
994 | + 8156A7B21F0F8FCC007EE146 /* LVCAERootView.h */, | |
995 | + 8156A7B31F0F8FCC007EE146 /* LVCAERootView.m */, | |
996 | + 8156A7B51F0F93AA007EE146 /* LVCAECommonView.h */, | |
997 | + 8156A7B61F0F93AA007EE146 /* LVCAECommonView.m */, | |
998 | + 8156A7B81F0F9541007EE146 /* AECommonCell.h */, | |
999 | + 8156A7B91F0F9541007EE146 /* AECommonCell.m */, | |
963 | 1000 | ); |
964 | 1001 | path = Views; |
965 | 1002 | sourceTree = "<group>"; |
... | ... | @@ -1241,6 +1278,7 @@ |
1241 | 1278 | D2029B921E6EAAA50027CD92 /* LaunchScreen.storyboard */, |
1242 | 1279 | D2029B851E6EAAA50027CD92 /* main.m */, |
1243 | 1280 | D2029B951E6EAAA50027CD92 /* Info.plist */, |
1281 | + 8156A7B01F0F8390007EE146 /* ShortVideoData.plist */, | |
1244 | 1282 | ); |
1245 | 1283 | name = "Supporting Files"; |
1246 | 1284 | sourceTree = "<group>"; |
... | ... | @@ -2225,6 +2263,7 @@ |
2225 | 2263 | buildActionMask = 2147483647; |
2226 | 2264 | files = ( |
2227 | 2265 | D2393D081F02505400D3EE17 /* TencentOpenApi_IOS_Bundle.bundle in Resources */, |
2266 | + 8156A7B11F0F8390007EE146 /* ShortVideoData.plist in Resources */, | |
2228 | 2267 | D2029C971E6EADE10027CD92 /* Info.plist in Resources */, |
2229 | 2268 | D2575C7F1E76A4F300E3A8FC /* NHPlaneViews.xib in Resources */, |
2230 | 2269 | D2393D0F1F0250A100D3EE17 /* read_me.txt in Resources */, |
... | ... | @@ -2267,10 +2306,12 @@ |
2267 | 2306 | files = ( |
2268 | 2307 | D2029CC31E6EADE10027CD92 /* UIImageView+HighlightedWebCache.m in Sources */, |
2269 | 2308 | D22830FF1E77C69E00627701 /* GiftListView.m in Sources */, |
2309 | + 8156A7B41F0F8FCC007EE146 /* LVCAERootView.m in Sources */, | |
2270 | 2310 | 4B45CE8A1EB86A590079AFB7 /* LVCPersonCommonCell.m in Sources */, |
2271 | 2311 | D2029CC01E6EADE10027CD92 /* UIImage+GIF.m in Sources */, |
2272 | 2312 | 4B45CE851EB86A590079AFB7 /* LVCClearCachesCell.m in Sources */, |
2273 | 2313 | 4B45CE9B1EB86A760079AFB7 /* ZXUIKit.m in Sources */, |
2314 | + 8156A7A91F0F5A1D007EE146 /* LVCShortVideoController.m in Sources */, | |
2274 | 2315 | D2029BCF1E6EADD70027CD92 /* ZXTabBarController.m in Sources */, |
2275 | 2316 | D2029CB81E6EADE10027CD92 /* SDImageCache.m in Sources */, |
2276 | 2317 | D2029CBB1E6EADE10027CD92 /* SDWebImageDownloader.m in Sources */, |
... | ... | @@ -2324,6 +2365,7 @@ |
2324 | 2365 | 810B65011E779B1F00133E15 /* MASLayoutConstraint.m in Sources */, |
2325 | 2366 | D2029CA11E6EADE10027CD92 /* NSString+MJExtension.m in Sources */, |
2326 | 2367 | 4B45CE7A1EB86A590079AFB7 /* MineLiveController.m in Sources */, |
2368 | + 8156A7AF1F0F73F7007EE146 /* LVCVideoMgrButton.m in Sources */, | |
2327 | 2369 | D2029BCB1E6EADD70027CD92 /* BaseTableViewCell.m in Sources */, |
2328 | 2370 | D2029CAA1E6EADE10027CD92 /* MJRefreshBackGifFooter.m in Sources */, |
2329 | 2371 | 8178D4531F02045500AA78A4 /* LVCRequestFailedView.m in Sources */, |
... | ... | @@ -2375,6 +2417,7 @@ |
2375 | 2417 | D2029C981E6EADE10027CD92 /* MJExtensionConst.m in Sources */, |
2376 | 2418 | 8178D4571F0204D600AA78A4 /* LVCTelevisioController.m in Sources */, |
2377 | 2419 | D2029CAE1E6EADE10027CD92 /* MJRefreshNormalHeader.m in Sources */, |
2420 | + 8156A7B71F0F93AA007EE146 /* LVCAECommonView.m in Sources */, | |
2378 | 2421 | D23696921E7FC83800E4BF71 /* chatMsgModel.m in Sources */, |
2379 | 2422 | 4BD856071EBACD530082061D /* UIImageView+AFNetworking.m in Sources */, |
2380 | 2423 | D2029CC61E6EADE10027CD92 /* SSKeychain.m in Sources */, |
... | ... | @@ -2416,6 +2459,7 @@ |
2416 | 2459 | D29D88481E88C53300543A03 /* LVCUGCLivePrepareView.m in Sources */, |
2417 | 2460 | D2029D091E6EAE2E0027CD92 /* Foundation+Log.m in Sources */, |
2418 | 2461 | 4B45CEAB1EB86BFA0079AFB7 /* NSString+ZXExtension.m in Sources */, |
2462 | + 8156A7BA1F0F9541007EE146 /* AECommonCell.m in Sources */, | |
2419 | 2463 | D2029BCA1E6EADD70027CD92 /* BaseModel.m in Sources */, |
2420 | 2464 | D25BF87B1E7B8A82007FB138 /* SliderView.m in Sources */, |
2421 | 2465 | 810B65041E779B1F00133E15 /* NSArray+MASAdditions.m in Sources */, |
... | ... | @@ -2429,6 +2473,7 @@ |
2429 | 2473 | D2029CA81E6EADE10027CD92 /* MJRefreshAutoNormalFooter.m in Sources */, |
2430 | 2474 | D2EBC8841F02109C00F198FB /* LVCUGCLivePlayerCell.m in Sources */, |
2431 | 2475 | 4B45CE991EB86A760079AFB7 /* UITextField+createTextField.m in Sources */, |
2476 | + 8156A7AC1F0F5AC6007EE146 /* LVCPreviewView.m in Sources */, | |
2432 | 2477 | 4B45CEA81EB86B9F0079AFB7 /* UserTools.m in Sources */, |
2433 | 2478 | D217A24A1E7B76C7003B44CB /* PresentView.m in Sources */, |
2434 | 2479 | D22830F11E778C0F00627701 /* LiveBaseView.m in Sources */, |
... | ... | @@ -2482,6 +2527,7 @@ |
2482 | 2527 | D25530061E7911A800DF38A5 /* GiftAnimationAction.m in Sources */, |
2483 | 2528 | 4B45CE881EB86A590079AFB7 /* LVCMineShowCell.m in Sources */, |
2484 | 2529 | D2029CD41E6EADE70027CD92 /* HttpService.m in Sources */, |
2530 | + 8156A7C01F0F9589007EE146 /* AEModelTemplate.m in Sources */, | |
2485 | 2531 | ); |
2486 | 2532 | runOnlyForDeploymentPostprocessing = 0; |
2487 | 2533 | }; | ... | ... |
LiveVideoCloud/AppDelegate/AppDelegate.m
... | ... | @@ -29,7 +29,7 @@ |
29 | 29 | [[CNLiveWebcastManager manager] initWithAppId:UserAppId appKey:UserAppKey isTestEnvironment:self.isTestEnvironment]; |
30 | 30 | |
31 | 31 | // 初始化评论功能 |
32 | - [[CNLiveCommentManager sharedCNLiveCommentManager] registerWithAppId:UserAppId appKey:UserAppKey isTestEnvironment:YES]; | |
32 | + [[CNLiveCommentManager sharedCNLiveCommentManager] registerWithAppId:UserAppId appKey:UserAppKey isTestEnvironment:self.isTestEnvironment]; | |
33 | 33 | |
34 | 34 | //初始化用户SDK |
35 | 35 | [CNLiveUserSystemCenter setAppId:UserAppId appKey:UserAppKey appSecret:UserAppSceret isTestEnvironment:self.isTestEnvironment]; | ... | ... |
LiveVideoCloud/Classes/Sections/Mine/Controllers/LVCMineViewController.m
... | ... | @@ -19,6 +19,7 @@ |
19 | 19 | #import "CNLiveWebView.h" |
20 | 20 | #import "MineAccountController.h" |
21 | 21 | #import "MineMessageController.h" |
22 | +#import "LVCShortVideoController.h" | |
22 | 23 | |
23 | 24 | @interface LVCMineViewController ()<UITableViewDelegate,UITableViewDataSource,changeBtnClickDelegate> |
24 | 25 | @property (nonatomic, strong) UITableView * tbv; |
... | ... | @@ -147,7 +148,7 @@ |
147 | 148 | { |
148 | 149 | if (!_localTitleArr) |
149 | 150 | { |
150 | - _localTitleArr = [[NSArray alloc] initWithObjects:@"设置", nil]; | |
151 | + _localTitleArr = [[NSArray alloc] initWithObjects:@"设置", @"短视频",nil]; | |
151 | 152 | } |
152 | 153 | return _localTitleArr; |
153 | 154 | } |
... | ... | @@ -155,7 +156,7 @@ |
155 | 156 | { |
156 | 157 | if (!_localImageArr) { |
157 | 158 | |
158 | - _localImageArr = [[NSArray alloc] initWithObjects:@"Settings", nil]; | |
159 | + _localImageArr = [[NSArray alloc] initWithObjects:@"Settings", @"Settings", nil]; | |
159 | 160 | } |
160 | 161 | return _localImageArr; |
161 | 162 | } |
... | ... | @@ -198,7 +199,13 @@ |
198 | 199 | } |
199 | 200 | -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath |
200 | 201 | { |
201 | - [self pushVC:[MineSettingViewController new]]; | |
202 | + | |
203 | + if (indexPath.row == 0) { | |
204 | + [self pushVC:[MineSettingViewController new]]; | |
205 | + } else if (indexPath.row == 1) { | |
206 | + LVCShortVideoController *shortVideoVC = [[LVCShortVideoController alloc] init]; | |
207 | + [self presentViewController:shortVideoVC animated:YES completion:NULL]; | |
208 | + } | |
202 | 209 | |
203 | 210 | // if(indexPath.row == 0) |
204 | 211 | // { | ... | ... |
LiveVideoCloud/Classes/Sections/Mine/Controllers/LVCShortVideoController.h
0 → 100644
LiveVideoCloud/Classes/Sections/Mine/Controllers/LVCShortVideoController.m
0 → 100644
1 | +// | |
2 | +// LVCShortVideoController.m | |
3 | +// LiveVideoCloud | |
4 | +// | |
5 | +// Created by iOS on 2017/7/7. | |
6 | +// Copyright © 2017年 cnlive. All rights reserved. | |
7 | +// | |
8 | + | |
9 | +#import "LVCShortVideoController.h" | |
10 | +#import "LVCPreviewView.h" | |
11 | +#import "LVCAERootView.h" | |
12 | + | |
13 | +#define kAERootViewHideFrame CGRectMake(0, KScreenHeight, KScreenWidth, 212) | |
14 | +#define kAERootViewShowFrame CGRectMake(0, KScreenHeight - 212, KScreenWidth, 212) | |
15 | + | |
16 | +@interface LVCShortVideoController () | |
17 | + | |
18 | +@property (nonatomic, strong) LVCPreviewView *previewView; | |
19 | +@property (nonatomic, strong) LVCAERootView *aeRootView; | |
20 | +@end | |
21 | + | |
22 | +@implementation LVCShortVideoController | |
23 | + | |
24 | +- (void)viewDidLoad { | |
25 | + [super viewDidLoad]; | |
26 | + // Do any additional setup after loading the view. | |
27 | + self.view.backgroundColor = [UIColor blackColor]; | |
28 | + | |
29 | + [self.view addSubview:self.previewView]; | |
30 | + [self.view addSubview:self.aeRootView]; | |
31 | + | |
32 | + [self p_setupPreViewEvent]; | |
33 | + | |
34 | +} | |
35 | + | |
36 | +#pragma mark - | |
37 | +#pragma mark - Action | |
38 | +- (void)p_setupPreViewEvent { | |
39 | + | |
40 | + __weak typeof(self) weakSelf = self; | |
41 | + | |
42 | + self.previewView.onEvent = ^(PreViewSubViewIdx idx, int extra) { | |
43 | + NSLog(@"index ------- %lu", (unsigned long)idx); | |
44 | + | |
45 | + switch (idx) { | |
46 | + case PreViewSubViewIdx_Close: | |
47 | + | |
48 | + [weakSelf dismissViewControllerAnimated:YES completion:NULL]; | |
49 | + | |
50 | + break; | |
51 | + | |
52 | + case PreViewSubViewIdx_Beauty: | |
53 | + | |
54 | + break; | |
55 | + | |
56 | + case PreViewSubViewIdx_Flash: | |
57 | + | |
58 | + break; | |
59 | + | |
60 | + case PreViewSubViewIdx_ToggleCamera: | |
61 | + | |
62 | + break; | |
63 | + | |
64 | + case PreViewSubViewIdx_Function: { | |
65 | + [UIView animateWithDuration:0.25 delay:0 options:UIViewAnimationOptionCurveEaseOut animations:^{ | |
66 | + weakSelf.aeRootView.tag = kAEShow; | |
67 | + weakSelf.aeRootView.frame = kAERootViewShowFrame; | |
68 | + } completion:^(BOOL finished) { | |
69 | + | |
70 | + }]; | |
71 | + } | |
72 | + break; | |
73 | + | |
74 | + case PreViewSubViewIdx_Effects: | |
75 | + | |
76 | + break; | |
77 | + | |
78 | + case PreViewSubViewIdx_Revoke: | |
79 | + weakSelf.previewView.effectsBtn.videoMgrState = kDeleteState; | |
80 | + | |
81 | + break; | |
82 | + | |
83 | + case PreViewSubViewIdx_Delete: | |
84 | + weakSelf.previewView.effectsBtn.videoMgrState = kBackSelect; | |
85 | + | |
86 | + break; | |
87 | + | |
88 | + case PreViewSubViewIdx_Record: | |
89 | + | |
90 | + weakSelf.previewView.effectsBtn.videoMgrState = kBackSelect; | |
91 | + | |
92 | + break; | |
93 | + | |
94 | + case PreViewSubViewIdx_Next: | |
95 | + | |
96 | + break; | |
97 | + | |
98 | + default: | |
99 | + break; | |
100 | + } | |
101 | + | |
102 | + | |
103 | + }; | |
104 | +} | |
105 | + | |
106 | +- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event { | |
107 | + if (self.aeRootView.tag == kAEShow){ | |
108 | + CGPoint locationPoint = [[touches anyObject] locationInView:self.view]; | |
109 | + CGPoint aePoint = [self.aeRootView convertPoint:locationPoint fromView:self.view]; | |
110 | + if (![self.aeRootView pointInside:aePoint withEvent:event]) { | |
111 | + __weak typeof(self) weakSelf = self; | |
112 | + [UIView animateWithDuration:0.25 delay:0 options:UIViewAnimationOptionCurveEaseOut animations:^{ | |
113 | + weakSelf.aeRootView.frame = kAERootViewHideFrame; | |
114 | + } completion:^(BOOL finished) { | |
115 | + weakSelf.aeRootView.tag = kAEHidden; | |
116 | + }]; | |
117 | + } | |
118 | + | |
119 | + } | |
120 | +} | |
121 | + | |
122 | +#pragma mark - | |
123 | +#pragma mark - getter | |
124 | +- (LVCPreviewView *)previewView | |
125 | +{ | |
126 | + if (!_previewView) { | |
127 | + _previewView = [[LVCPreviewView alloc] initWithFrame:self.view.bounds]; | |
128 | + } | |
129 | + return _previewView; | |
130 | +} | |
131 | + | |
132 | +- (LVCAERootView *)aeRootView | |
133 | +{ | |
134 | + if (!_aeRootView){ | |
135 | + _aeRootView = [[LVCAERootView alloc] initWithFrame:kAERootViewHideFrame]; | |
136 | + [(UIView *)[_aeRootView valueForKey:@"decalBtn"] setHidden:YES]; | |
137 | + [(UIView *)[_aeRootView valueForKey:@"textDecalBtn"] setHidden:YES]; | |
138 | + _aeRootView.userInteractionEnabled = YES; | |
139 | + | |
140 | + } | |
141 | + return _aeRootView; | |
142 | +} | |
143 | + | |
144 | + | |
145 | +- (void)didReceiveMemoryWarning { | |
146 | + [super didReceiveMemoryWarning]; | |
147 | + // Dispose of any resources that can be recreated. | |
148 | +} | |
149 | + | |
150 | +/* | |
151 | +#pragma mark - Navigation | |
152 | + | |
153 | +// In a storyboard-based application, you will often want to do a little preparation before navigation | |
154 | +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { | |
155 | + // Get the new view controller using [segue destinationViewController]. | |
156 | + // Pass the selected object to the new view controller. | |
157 | +} | |
158 | +*/ | |
159 | + | |
160 | +@end | ... | ... |
LiveVideoCloud/Classes/Sections/Mine/Login/Controller/RegisterCommonController.m
... | ... | @@ -63,23 +63,23 @@ |
63 | 63 | { |
64 | 64 | [SVProgressHUD dismiss]; |
65 | 65 | |
66 | - if (_type == RegisterTypeRegist) { | |
67 | - UIAlertController *alertController = [UIAlertController alertControllerWithTitle:nil message:@"注册即送520个中国币,你确定要放弃了吗?" preferredStyle:UIAlertControllerStyleAlert]; | |
68 | - UIAlertAction *cancelAlertAction = [UIAlertAction actionWithTitle:@"放弃" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) { | |
69 | - [self.navigationController popViewControllerAnimated:YES]; | |
70 | - }]; | |
71 | - UIAlertAction *okAlertAction = [UIAlertAction actionWithTitle:@"追求财富" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { | |
72 | - | |
73 | - }]; | |
74 | - [alertController addAction:cancelAlertAction]; | |
75 | - [alertController addAction:okAlertAction]; | |
76 | - [self presentViewController:alertController animated:YES completion:nil]; | |
77 | - | |
78 | - }else | |
79 | - { | |
66 | +// if (_type == RegisterTypeRegist) { | |
67 | +// UIAlertController *alertController = [UIAlertController alertControllerWithTitle:nil message:@"注册即送520个中国币,你确定要放弃了吗?" preferredStyle:UIAlertControllerStyleAlert]; | |
68 | +// UIAlertAction *cancelAlertAction = [UIAlertAction actionWithTitle:@"放弃" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) { | |
69 | +// [self.navigationController popViewControllerAnimated:YES]; | |
70 | +// }]; | |
71 | +// UIAlertAction *okAlertAction = [UIAlertAction actionWithTitle:@"追求财富" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { | |
72 | +// | |
73 | +// }]; | |
74 | +// [alertController addAction:cancelAlertAction]; | |
75 | +// [alertController addAction:okAlertAction]; | |
76 | +// [self presentViewController:alertController animated:YES completion:nil]; | |
77 | +// | |
78 | +// }else | |
79 | +// { | |
80 | 80 | [self.navigationController popViewControllerAnimated:YES]; |
81 | 81 | // [super onBackAction]; |
82 | - } | |
82 | +// } | |
83 | 83 | } |
84 | 84 | |
85 | 85 | - (void)verificationBtnAction | ... | ... |
LiveVideoCloud/Classes/Sections/Mine/Model/AEModelTemplate.h
0 → 100644
1 | +// | |
2 | +// AEModelTemplate.h | |
3 | +// LiveVideoCloud | |
4 | +// | |
5 | +// Created by iOS on 2017/7/7. | |
6 | +// Copyright © 2017年 cnlive. All rights reserved. | |
7 | +// | |
8 | + | |
9 | +#import <Foundation/Foundation.h> | |
10 | + | |
11 | +@interface AEModelTemplate : NSObject | |
12 | + | |
13 | +@property(nonatomic, assign)NSUInteger type; | |
14 | + | |
15 | +@property(nonatomic, assign)NSUInteger idx; | |
16 | + | |
17 | +@property(nonatomic, strong)UIImage *image; | |
18 | + | |
19 | +@property(nonatomic, strong)NSString *txt; | |
20 | + | |
21 | +@property(nonatomic, strong)NSString *path; | |
22 | + | |
23 | +@end | ... | ... |
LiveVideoCloud/Classes/Sections/Mine/Model/AEModelTemplate.m
0 → 100644
LiveVideoCloud/Classes/Sections/Mine/Views/AECommonCell.h
0 → 100644
1 | +// | |
2 | +// AECommonCell.h | |
3 | +// LiveVideoCloud | |
4 | +// | |
5 | +// Created by iOS on 2017/7/7. | |
6 | +// Copyright © 2017年 cnlive. All rights reserved. | |
7 | +// | |
8 | + | |
9 | +#import <UIKit/UIKit.h> | |
10 | +#import "AEModelTemplate.h" | |
11 | + | |
12 | +@interface AECommonCell : UICollectionViewCell | |
13 | + | |
14 | +@property (nonatomic, strong) AEModelTemplate *model; | |
15 | + | |
16 | +@end | ... | ... |
LiveVideoCloud/Classes/Sections/Mine/Views/AECommonCell.m
0 → 100644
1 | +// | |
2 | +// AECommonCell.m | |
3 | +// LiveVideoCloud | |
4 | +// | |
5 | +// Created by iOS on 2017/7/7. | |
6 | +// Copyright © 2017年 cnlive. All rights reserved. | |
7 | +// | |
8 | + | |
9 | +#import "AECommonCell.h" | |
10 | + | |
11 | +@interface AECommonCell () { | |
12 | + BOOL _isOrigin; | |
13 | +} | |
14 | + | |
15 | + | |
16 | +@property(nonatomic, strong)UIImageView *thumb; | |
17 | +@property(nonatomic, strong)UILabel *tips; | |
18 | + | |
19 | +@end | |
20 | + | |
21 | +@implementation AECommonCell | |
22 | + | |
23 | +- (instancetype)initWithFrame:(CGRect)frame | |
24 | +{ | |
25 | + self = [super initWithFrame:frame]; | |
26 | + if (self) { | |
27 | + | |
28 | + [self addSubview:self.thumb]; | |
29 | + [self addSubview:self.tips]; | |
30 | + } | |
31 | + return self; | |
32 | +} | |
33 | + | |
34 | +#pragma mark - | |
35 | +#pragma mark - getter | |
36 | +- (UIImageView *)thumb | |
37 | +{ | |
38 | + if (!_thumb){ | |
39 | + _thumb = [[UIImageView alloc] initWithFrame:CGRectMake(self.bounds.size.width/2-30, 10, 60, 60)]; | |
40 | + _thumb.layer.cornerRadius = 30; | |
41 | + _thumb.layer.masksToBounds = YES; | |
42 | + } | |
43 | + return _thumb; | |
44 | +} | |
45 | + | |
46 | +-(UILabel *)tips | |
47 | +{ | |
48 | + if (!_tips){ | |
49 | + _tips = [[UILabel alloc] initWithFrame:CGRectMake(0, self.bounds.size.height-30, self.bounds.size.width, 30)]; | |
50 | + _tips.textColor = [UIColor colorWithHexString:@"#999999"]; | |
51 | + _tips.textAlignment = NSTextAlignmentCenter; | |
52 | + _tips.font = [UIFont systemFontOfSize:14]; | |
53 | + } | |
54 | + return _tips; | |
55 | +} | |
56 | + | |
57 | +- (void)setModel:(AEModelTemplate *)model | |
58 | +{ | |
59 | + _thumb.image = model.image; | |
60 | + _tips.text = model.txt; | |
61 | + if (!model.txt || model.txt.length == 0){ | |
62 | + _tips.hidden = YES; | |
63 | + _isOrigin = YES; | |
64 | + }else{ | |
65 | + _isOrigin = NO; | |
66 | + _tips.hidden = NO; | |
67 | + } | |
68 | +} | |
69 | + | |
70 | +- (void)setSelected:(BOOL)selected{ | |
71 | + | |
72 | + [super setSelected:selected]; | |
73 | + if (selected) { | |
74 | + [self onSelected]; | |
75 | + }else{ | |
76 | + [self onUnselected]; | |
77 | + } | |
78 | +} | |
79 | +- (void)onSelected | |
80 | +{ | |
81 | + if (_isOrigin) return ; | |
82 | + self.thumb.layer.borderColor = [UIColor colorWithHexString:@"#ff2e42"].CGColor; | |
83 | + self.thumb.layer.borderWidth = 2; | |
84 | + self.tips.textColor = [UIColor colorWithHexString:@"#ff2e42"]; | |
85 | +} | |
86 | + | |
87 | +- (void)onUnselected | |
88 | +{ | |
89 | + if (_isOrigin) return ; | |
90 | + self.thumb.layer.borderColor = [[UIColor clearColor]CGColor]; | |
91 | + self.thumb.layer.borderWidth = 0; | |
92 | + self.tips.textColor = [UIColor colorWithHexString:@"#999999"]; | |
93 | + | |
94 | +} | |
95 | +@end | ... | ... |
LiveVideoCloud/Classes/Sections/Mine/Views/LVCAECommonView.h
0 → 100644
1 | +// | |
2 | +// LVCAECommonView.h | |
3 | +// LiveVideoCloud | |
4 | +// | |
5 | +// Created by iOS on 2017/7/7. | |
6 | +// Copyright © 2017年 cnlive. All rights reserved. | |
7 | +// | |
8 | + | |
9 | +#import <UIKit/UIKit.h> | |
10 | +#import "AEModelTemplate.h" | |
11 | + | |
12 | +@interface LVCAECommonView : UIView | |
13 | + | |
14 | +- (instancetype)initWithFrame:(CGRect)frame type:(NSUInteger)type data:(NSArray<__kindof AEModelTemplate *> *)dataSource; | |
15 | + | |
16 | +@end | ... | ... |
LiveVideoCloud/Classes/Sections/Mine/Views/LVCAECommonView.m
0 → 100644
1 | + | |
2 | +// | |
3 | +// LVCAECommonView.m | |
4 | +// LiveVideoCloud | |
5 | +// | |
6 | +// Created by iOS on 2017/7/7. | |
7 | +// Copyright © 2017年 cnlive. All rights reserved. | |
8 | +// | |
9 | + | |
10 | +#import "LVCAECommonView.h" | |
11 | +#import "AECommonCell.h" | |
12 | + | |
13 | +@interface LVCAECommonView ()<UICollectionViewDelegate, UICollectionViewDataSource> | |
14 | + | |
15 | +@property (nonatomic, strong) UICollectionView *collectionView; | |
16 | +@property (nonatomic, strong) NSArray<__kindof AEModelTemplate *> *dataArray; | |
17 | + | |
18 | +@end | |
19 | + | |
20 | +@implementation LVCAECommonView | |
21 | + | |
22 | +- (instancetype)initWithFrame:(CGRect)frame type:(NSUInteger)type data:(NSArray<__kindof AEModelTemplate *> *)dataSource { | |
23 | + | |
24 | + self = [super initWithFrame:frame]; | |
25 | + if (self) { | |
26 | + | |
27 | + _dataArray = dataSource; | |
28 | + | |
29 | + } | |
30 | + return self; | |
31 | +} | |
32 | + | |
33 | +#pragma mark - | |
34 | +#pragma mark - getter | |
35 | +- (UICollectionView *)collectionView | |
36 | +{ | |
37 | + if (!_collectionView) { | |
38 | + | |
39 | + UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init]; | |
40 | + layout.itemSize = CGSizeMake(75, 100); | |
41 | + layout.sectionInset = UIEdgeInsetsMake(0, 10, 0, 10); | |
42 | + layout.scrollDirection = UICollectionViewScrollDirectionHorizontal; | |
43 | + _collectionView = [[UICollectionView alloc] initWithFrame:CGRectMake(10, 20, KScreenWidth-20, 100) collectionViewLayout:layout]; | |
44 | + _collectionView.delegate = self; | |
45 | + _collectionView.dataSource = self; | |
46 | + _collectionView.backgroundColor = [UIColor clearColor]; | |
47 | + _collectionView.showsHorizontalScrollIndicator = NO; | |
48 | + _collectionView.scrollsToTop = YES; | |
49 | + } | |
50 | + return _collectionView; | |
51 | +} | |
52 | + | |
53 | +- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath | |
54 | +{ | |
55 | + static NSString *identifier = @"AECommonCell"; | |
56 | + AECommonCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:identifier forIndexPath:indexPath]; | |
57 | + cell.model = self.dataArray[indexPath.row]; | |
58 | + return cell; | |
59 | +} | |
60 | + | |
61 | +- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath | |
62 | +{ | |
63 | + | |
64 | +} | |
65 | + | |
66 | +- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section | |
67 | +{ | |
68 | + return self.dataArray.count; | |
69 | +} | |
70 | + | |
71 | + | |
72 | + | |
73 | +- (NSArray<AEModelTemplate *> *)dataArray | |
74 | +{ | |
75 | + if (!_dataArray){ | |
76 | + _dataArray = [[NSArray alloc] init]; | |
77 | + } | |
78 | + return _dataArray; | |
79 | +} | |
80 | + | |
81 | +/* | |
82 | +// Only override drawRect: if you perform custom drawing. | |
83 | +// An empty implementation adversely affects performance during animation. | |
84 | +- (void)drawRect:(CGRect)rect { | |
85 | + // Drawing code | |
86 | +} | |
87 | +*/ | |
88 | + | |
89 | +@end | ... | ... |
LiveVideoCloud/Classes/Sections/Mine/Views/LVCAERootView.h
0 → 100644
1 | +// | |
2 | +// LVCAERootView.h | |
3 | +// LiveVideoCloud | |
4 | +// | |
5 | +// Created by iOS on 2017/7/7. | |
6 | +// Copyright © 2017年 cnlive. All rights reserved. | |
7 | +// | |
8 | + | |
9 | +#import <UIKit/UIKit.h> | |
10 | + | |
11 | +typedef NS_ENUM(NSInteger, CNLiveSelectorType){ | |
12 | + CNLiveSelectorType_Reverb, // 混响 | |
13 | + CNLiveSelectorType_AE, // 音效 | |
14 | + CNLiveSelectorType_BGM, // 背景音 | |
15 | + CNLiveSelectorType_Decal, // 贴纸 | |
16 | + CNLiveSelectorType_TextDecal, // 字幕 | |
17 | +}; | |
18 | + | |
19 | +@interface LVCAERootView : UIView | |
20 | + | |
21 | +typedef NS_ENUM(NSUInteger, kAEStatus){ | |
22 | + kAEHidden, | |
23 | + kAEShow, | |
24 | +}; | |
25 | + | |
26 | +@end | ... | ... |
LiveVideoCloud/Classes/Sections/Mine/Views/LVCAERootView.m
0 → 100644
1 | +// | |
2 | +// LVCAERootView.m | |
3 | +// LiveVideoCloud | |
4 | +// | |
5 | +// Created by iOS on 2017/7/7. | |
6 | +// Copyright © 2017年 cnlive. All rights reserved. | |
7 | +// | |
8 | + | |
9 | +#import "LVCAERootView.h" | |
10 | +#import "LVCAECommonView.h" | |
11 | +#import "AEModelTemplate.h" | |
12 | + | |
13 | +@interface LVCAERootView () | |
14 | +{ | |
15 | + NSMutableArray *_dataArray; | |
16 | +} | |
17 | + | |
18 | +@property (nonatomic, strong) UIButton *bgmBtn; //背景音乐 | |
19 | +@property (nonatomic, strong) UIButton *aeBtn; //变声 | |
20 | +@property (nonatomic, strong) UIButton *reverbBtn; //混响 | |
21 | +@property (nonatomic, strong) UIButton *decalBtn; //贴纸 | |
22 | +@property (nonatomic, strong) UIButton *textDecalBtn; //字幕 | |
23 | + | |
24 | +@property (nonatomic, strong) LVCAECommonView *bgmView; | |
25 | +@property (nonatomic, strong) LVCAECommonView *aeView; | |
26 | +@property (nonatomic, strong) LVCAECommonView *reverbView; | |
27 | +@property (nonatomic, strong) LVCAECommonView *decalView; | |
28 | +@property (nonatomic, strong) LVCAECommonView *textDecalView; | |
29 | + | |
30 | +@end | |
31 | + | |
32 | +@implementation LVCAERootView | |
33 | + | |
34 | +- (instancetype)initWithFrame:(CGRect)frame | |
35 | +{ | |
36 | + self = [super initWithFrame:frame]; | |
37 | + if (self) { | |
38 | + self.backgroundColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:1.0]; | |
39 | + [self addSubview:self.bgmBtn]; | |
40 | + [self addSubview:self.aeBtn]; | |
41 | + [self addSubview:self.reverbBtn]; | |
42 | + [self addSubview:self.decalBtn]; | |
43 | + [self addSubview:self.textDecalBtn]; | |
44 | + | |
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 | + } | |
57 | + return self; | |
58 | +} | |
59 | + | |
60 | +- (void)onSelectBgm:(id)sender | |
61 | +{ | |
62 | + self.aeBtn.selected = NO; | |
63 | + self.bgmBtn.selected = YES; | |
64 | + self.reverbBtn.selected = NO; | |
65 | + self.decalBtn.selected = NO; | |
66 | + self.textDecalBtn.selected = NO; | |
67 | + | |
68 | +} | |
69 | + | |
70 | +- (void)onSelectAe:(id)sender | |
71 | +{ | |
72 | + self.aeBtn.selected = YES; | |
73 | + self.bgmBtn.selected = NO; | |
74 | + self.reverbBtn.selected = NO; | |
75 | + self.decalBtn.selected = NO; | |
76 | +} | |
77 | + | |
78 | +- (void)onSelectReverb:(id)sender | |
79 | +{ | |
80 | + self.reverbBtn.selected = YES; | |
81 | + self.aeBtn.selected = NO; | |
82 | + self.bgmBtn.selected = NO; | |
83 | + self.decalBtn.selected = NO; | |
84 | + self.textDecalBtn.selected = NO; | |
85 | + | |
86 | +} | |
87 | + | |
88 | +- (void)onSelectDecel:(id)sender{ | |
89 | + self.reverbBtn.selected = NO; | |
90 | + self.aeBtn.selected = NO; | |
91 | + self.bgmBtn.selected = NO; | |
92 | + self.decalBtn.selected = YES; | |
93 | + self.textDecalBtn.selected = NO; | |
94 | + | |
95 | +} | |
96 | + | |
97 | +- (void)onSelectTextDecal:(UIButton *)btn{ | |
98 | + self.reverbBtn.selected = NO; | |
99 | + self.aeBtn.selected = NO; | |
100 | + self.bgmBtn.selected = NO; | |
101 | + self.decalBtn.selected = NO; | |
102 | + self.textDecalBtn.selected = YES; | |
103 | + | |
104 | +} | |
105 | + | |
106 | +#pragma mark - | |
107 | +#pragma mark - getter | |
108 | +- (UIButton *)bgmBtn | |
109 | +{ | |
110 | + if (!_bgmBtn){ | |
111 | + _bgmBtn = [UIButton buttonWithType:UIButtonTypeCustom]; | |
112 | + _bgmBtn.frame = CGRectMake(10, 10, 60, 30); | |
113 | + [_bgmBtn setTitle:@"背景音乐" forState:UIControlStateNormal]; | |
114 | + [_bgmBtn setTitleColor:[UIColor grayColor] forState:UIControlStateNormal]; | |
115 | + [_bgmBtn setTitleColor:[UIColor whiteColor] forState:UIControlStateSelected]; | |
116 | + _bgmBtn.titleLabel.font = [UIFont fontWithName:@"Helvetica-Bold" size:14]; | |
117 | + [_bgmBtn addTarget:self action:@selector(onSelectBgm:) forControlEvents:UIControlEventTouchUpInside]; | |
118 | + } | |
119 | + return _bgmBtn; | |
120 | +} | |
121 | + | |
122 | +- (UIButton *)aeBtn | |
123 | +{ | |
124 | + if (!_aeBtn){ | |
125 | + _aeBtn = [UIButton buttonWithType:UIButtonTypeCustom]; | |
126 | + _aeBtn.frame = CGRectMake(90, 10, 40, 30); | |
127 | + [_aeBtn setTitle:@"变声" forState:UIControlStateNormal]; | |
128 | + [_aeBtn setTitleColor:[UIColor grayColor] forState:UIControlStateNormal]; | |
129 | + [_aeBtn setTitleColor:[UIColor whiteColor] forState:UIControlStateSelected]; | |
130 | + _aeBtn.titleLabel.font = [UIFont fontWithName:@"Helvetica-Bold" size:14]; | |
131 | + _aeBtn.titleLabel.textColor = [UIColor whiteColor]; | |
132 | + [_aeBtn addTarget:self action:@selector(onSelectAe:) forControlEvents:UIControlEventTouchUpInside]; | |
133 | + } | |
134 | + return _aeBtn; | |
135 | +} | |
136 | + | |
137 | + | |
138 | +- (UIButton *)reverbBtn | |
139 | +{ | |
140 | + if (!_reverbBtn){ | |
141 | + _reverbBtn = [UIButton buttonWithType:UIButtonTypeCustom]; | |
142 | + _reverbBtn.frame = CGRectMake(150, 10, 40, 30); | |
143 | + [_reverbBtn setTitle:@"混响" forState:UIControlStateNormal]; | |
144 | + [_reverbBtn setTitleColor:[UIColor grayColor] forState:UIControlStateNormal]; | |
145 | + [_reverbBtn setTitleColor:[UIColor whiteColor] forState:UIControlStateSelected]; | |
146 | + _reverbBtn.titleLabel.font = [UIFont fontWithName:@"Helvetica-Bold" size:14]; | |
147 | + _reverbBtn.titleLabel.textColor = [UIColor whiteColor]; | |
148 | + [_reverbBtn addTarget:self action:@selector(onSelectReverb:) forControlEvents:UIControlEventTouchUpInside]; | |
149 | + } | |
150 | + return _reverbBtn; | |
151 | +} | |
152 | + | |
153 | +- (UIButton *)decalBtn{ | |
154 | + if (!_decalBtn){ | |
155 | + _decalBtn = [UIButton buttonWithType:UIButtonTypeCustom]; | |
156 | + _decalBtn.frame = CGRectMake(210, 10, 40, 30); | |
157 | + [_decalBtn setTitle:@"贴纸" forState:UIControlStateNormal]; | |
158 | + [_decalBtn setTitleColor:[UIColor grayColor] forState:UIControlStateNormal]; | |
159 | + [_decalBtn setTitleColor:[UIColor whiteColor] forState:UIControlStateSelected]; | |
160 | + _decalBtn.titleLabel.font = [UIFont fontWithName:@"Helvetica-Bold" size:14]; | |
161 | + _decalBtn.titleLabel.textColor = [UIColor whiteColor]; | |
162 | + [_decalBtn addTarget:self action:@selector(onSelectDecel:) forControlEvents:UIControlEventTouchUpInside]; | |
163 | + } | |
164 | + return _decalBtn; | |
165 | +} | |
166 | + | |
167 | +- (UIButton *)textDecalBtn{ | |
168 | + if (!_textDecalBtn){ | |
169 | + _textDecalBtn = [UIButton buttonWithType:UIButtonTypeCustom]; | |
170 | + _textDecalBtn.frame = CGRectMake(270, 10, 40, 30); | |
171 | + [_textDecalBtn setTitle:@"字幕" forState:UIControlStateNormal]; | |
172 | + [_textDecalBtn setTitleColor:[UIColor grayColor] forState:UIControlStateNormal]; | |
173 | + [_textDecalBtn setTitleColor:[UIColor whiteColor] forState:UIControlStateSelected]; | |
174 | + _textDecalBtn.titleLabel.font = [UIFont fontWithName:@"Helvetica-Bold" size:14]; | |
175 | + _textDecalBtn.titleLabel.textColor = [UIColor whiteColor]; | |
176 | + [_textDecalBtn addTarget:self action:@selector(onSelectTextDecal:) forControlEvents:UIControlEventTouchUpInside]; | |
177 | + } | |
178 | + return _textDecalBtn; | |
179 | +} | |
180 | + | |
181 | +//- (BgmSelectorView *)bgmView | |
182 | +//{ | |
183 | +// if (!_bgmView){ | |
184 | +// _bgmView = [[BgmSelectorView alloc] initWithFrame:CGRectMake(0, 30, KScreenWidth, 172)]; | |
185 | +// } | |
186 | +// return _bgmView; | |
187 | +//} | |
188 | + | |
189 | + | |
190 | +- (LVCAECommonView *)aeView | |
191 | +{ | |
192 | + if (!_aeView){ | |
193 | + _aeView = [[LVCAECommonView alloc] initWithFrame:CGRectMake(0, 40, KScreenWidth, 172) type:CNLiveSelectorType_AE data:@[]]; | |
194 | + _aeView.frame = CGRectMake(0, 40, KScreenWidth, 172); | |
195 | + } | |
196 | + return _aeView; | |
197 | +} | |
198 | + | |
199 | +- (LVCAECommonView *)reverbView | |
200 | +{ | |
201 | + if (!_reverbView){ | |
202 | + _reverbView = [[LVCAECommonView alloc] initWithFrame:CGRectMake(0, 40, KScreenWidth, 172) type:CNLiveSelectorType_Reverb data:@[]]; | |
203 | + } | |
204 | + return _reverbView; | |
205 | +} | |
206 | + | |
207 | +- (LVCAECommonView *)decalView | |
208 | +{ | |
209 | + if (!_decalView){ | |
210 | + _decalView = [[LVCAECommonView alloc] initWithFrame:CGRectMake(0, 40, KScreenWidth, 172) type:CNLiveSelectorType_Decal data:@[]]; | |
211 | + } | |
212 | + return _decalView; | |
213 | +} | |
214 | + | |
215 | +- (LVCAECommonView *)textDecalView | |
216 | +{ | |
217 | + if (!_textDecalView){ | |
218 | + _textDecalView = [[LVCAECommonView alloc] initWithFrame:CGRectMake(0, 40, KScreenWidth, 172) type:CNLiveSelectorType_TextDecal data:@[]]; | |
219 | + } | |
220 | + return _textDecalView; | |
221 | +} | |
222 | +/* | |
223 | +// Only override drawRect: if you perform custom drawing. | |
224 | +// An empty implementation adversely affects performance during animation. | |
225 | +- (void)drawRect:(CGRect)rect { | |
226 | + // Drawing code | |
227 | +} | |
228 | +*/ | |
229 | + | |
230 | +@end | ... | ... |
LiveVideoCloud/Classes/Sections/Mine/Views/LVCPreviewView.h
0 → 100644
1 | +// | |
2 | +// LVCPreviewView.h | |
3 | +// LiveVideoCloud | |
4 | +// | |
5 | +// Created by iOS on 2017/7/7. | |
6 | +// Copyright © 2017年 cnlive. All rights reserved. | |
7 | +// | |
8 | + | |
9 | +#import <UIKit/UIKit.h> | |
10 | +#import "LVCVideoMgrButton.h" | |
11 | + | |
12 | +typedef NS_ENUM(NSUInteger, PreViewSubViewIdx){ | |
13 | + PreViewSubViewIdx_Close, //关闭 | |
14 | + PreViewSubViewIdx_Beauty, //美颜 | |
15 | + PreViewSubViewIdx_Flash, //闪光灯 | |
16 | + PreViewSubViewIdx_ToggleCamera, //切换摄像头 | |
17 | + PreViewSubViewIdx_Function, //更多功能 | |
18 | + PreViewSubViewIdx_Record, //录制 | |
19 | + PreViewSubViewIdx_LocalVideo, //选择本地 | |
20 | + PreViewSubViewIdx_Delete, //删除 | |
21 | + PreViewSubViewIdx_Revoke, //撤回 | |
22 | + PreViewSubViewIdx_Next, //上传(next) | |
23 | + PreViewSubViewIdx_Effects, //动态贴纸 | |
24 | +}; | |
25 | + | |
26 | + | |
27 | +@interface LVCPreviewView : UIView | |
28 | + | |
29 | +@property (nonatomic, strong) UIButton *closeBtn; //关闭 | |
30 | +@property (nonatomic, strong) UIButton *toggleCameraBtn; //摄像头 | |
31 | +@property (nonatomic, strong) UIButton *flashBtn; //闪光灯 | |
32 | +@property (nonatomic, strong) UIButton *beautyBtn; //美颜滤镜 | |
33 | +@property (nonatomic, strong) UIButton *recordBtn; //录制 | |
34 | +@property (nonatomic, strong) LVCVideoMgrButton *effectsBtn; //动态贴纸 | |
35 | +@property (nonatomic, strong) UILabel *recordTimeLabel; //时间 | |
36 | +@property (nonatomic, strong) UIButton *nextBtn; //next | |
37 | +@property (nonatomic, strong) UIButton *funcBtn; //更多功能 | |
38 | +@property (nonatomic, strong) UIButton *localBtn; //更多功能 | |
39 | +@property (nonatomic, strong) UIView *previewView; | |
40 | +@property (nonatomic, copy) void (^onEvent)(PreViewSubViewIdx idx, int extra); //按钮响应事件回调 | |
41 | + | |
42 | +@end | ... | ... |
LiveVideoCloud/Classes/Sections/Mine/Views/LVCPreviewView.m
0 → 100644
1 | +// | |
2 | +// LVCPreviewView.m | |
3 | +// LiveVideoCloud | |
4 | +// | |
5 | +// Created by iOS on 2017/7/7. | |
6 | +// Copyright © 2017年 cnlive. All rights reserved. | |
7 | +// | |
8 | + | |
9 | +#import "LVCPreviewView.h" | |
10 | + | |
11 | +#define TOP_ICON_WIDTH 25 | |
12 | +#define SPACE (KScreenWidth-5*TOP_ICON_WIDTH-30)/4 | |
13 | +#define BOTTOM_ICON_WIDTH 40 | |
14 | + | |
15 | +@implementation LVCPreviewView | |
16 | + | |
17 | +- (instancetype)initWithFrame:(CGRect)frame | |
18 | +{ | |
19 | + self = [super initWithFrame:frame]; | |
20 | + if (self) { | |
21 | + [self addSubview:self.closeBtn]; | |
22 | + [self addSubview:self.beautyBtn]; | |
23 | + [self addSubview:self.flashBtn]; | |
24 | + [self addSubview:self.toggleCameraBtn]; | |
25 | + [self addSubview:self.funcBtn]; | |
26 | + [self addSubview:self.effectsBtn]; | |
27 | + [self addSubview:self.recordBtn]; | |
28 | + [self addSubview:self.nextBtn]; | |
29 | + [self addSubview:self.localBtn]; | |
30 | + | |
31 | + | |
32 | + } | |
33 | + return self; | |
34 | +} | |
35 | + | |
36 | +#pragma mark - | |
37 | +#pragma mark - Action | |
38 | +- (void)onClick:(UIButton *)sender | |
39 | +{ | |
40 | + if (self.onEvent){ | |
41 | + | |
42 | + self.onEvent(sender.tag, 0); | |
43 | + } | |
44 | + | |
45 | +} | |
46 | + | |
47 | +#pragma mark - | |
48 | +#pragma mark - getter | |
49 | +- (UIButton *)closeBtn | |
50 | +{ | |
51 | + if (!_closeBtn){ | |
52 | + _closeBtn = [UIButton buttonWithType:UIButtonTypeCustom]; | |
53 | + _closeBtn.frame = CGRectMake(15, 15, TOP_ICON_WIDTH, TOP_ICON_WIDTH); | |
54 | + _closeBtn.tag = PreViewSubViewIdx_Close; | |
55 | + [_closeBtn addTarget:self action:@selector(onClick:) forControlEvents:UIControlEventTouchUpInside]; | |
56 | + [_closeBtn setImage:[UIImage imageNamed:@"叉"] forState:UIControlStateNormal]; | |
57 | + } | |
58 | + return _closeBtn; | |
59 | +} | |
60 | + | |
61 | +- (UIButton *)beautyBtn | |
62 | +{ | |
63 | + if (!_beautyBtn){ | |
64 | + _beautyBtn = [UIButton buttonWithType:UIButtonTypeCustom]; | |
65 | + _beautyBtn.frame = CGRectMake(self.closeBtn.right+SPACE, 15, TOP_ICON_WIDTH, TOP_ICON_WIDTH); | |
66 | + _beautyBtn.tag = PreViewSubViewIdx_Beauty; | |
67 | + [_beautyBtn addTarget:self action:@selector(onClick:) forControlEvents:UIControlEventTouchUpInside]; | |
68 | + [_beautyBtn setImage:[UIImage imageNamed:@"美颜"] forState:UIControlStateNormal]; | |
69 | + [_beautyBtn setImage:[UIImage imageNamed:@"美颜-2"] forState:UIControlStateSelected]; | |
70 | + } | |
71 | + return _beautyBtn; | |
72 | +} | |
73 | + | |
74 | +- (UIButton *)flashBtn | |
75 | +{ | |
76 | + if (!_flashBtn){ | |
77 | + _flashBtn = [UIButton buttonWithType:UIButtonTypeCustom]; | |
78 | + _flashBtn.frame = CGRectMake(self.beautyBtn.right+SPACE, 15, TOP_ICON_WIDTH, TOP_ICON_WIDTH); | |
79 | + _flashBtn.tag = PreViewSubViewIdx_Flash; | |
80 | + [_flashBtn addTarget:self action:@selector(onClick:) forControlEvents:UIControlEventTouchUpInside]; | |
81 | + [_flashBtn setImage:[UIImage imageNamed:@"闪光灯关闭"] forState:UIControlStateNormal]; | |
82 | + [_flashBtn setImage:[UIImage imageNamed:@"闪光灯开启"] forState:UIControlStateSelected]; | |
83 | + } | |
84 | + return _flashBtn; | |
85 | +} | |
86 | + | |
87 | +- (UIButton *)toggleCameraBtn | |
88 | +{ | |
89 | + if (!_toggleCameraBtn){ | |
90 | + _toggleCameraBtn = [UIButton buttonWithType:UIButtonTypeCustom]; | |
91 | + _toggleCameraBtn.frame = CGRectMake(self.flashBtn.right+SPACE, 15, TOP_ICON_WIDTH, TOP_ICON_WIDTH); | |
92 | + _toggleCameraBtn.tag = PreViewSubViewIdx_ToggleCamera; | |
93 | + [_toggleCameraBtn addTarget:self action:@selector(onClick:) forControlEvents:UIControlEventTouchUpInside]; | |
94 | + [_toggleCameraBtn setImage:[UIImage imageNamed:@"相机"] forState:UIControlStateNormal]; | |
95 | + } | |
96 | + return _toggleCameraBtn; | |
97 | +} | |
98 | + | |
99 | +- (UIButton *)funcBtn | |
100 | +{ | |
101 | + if (!_funcBtn){ | |
102 | + _funcBtn = [UIButton buttonWithType:UIButtonTypeCustom]; | |
103 | + _funcBtn.frame = CGRectMake(self.toggleCameraBtn.right+SPACE, 15, TOP_ICON_WIDTH, TOP_ICON_WIDTH); | |
104 | + _funcBtn.tag = PreViewSubViewIdx_Function; | |
105 | + [_funcBtn addTarget:self action:@selector(onClick:) forControlEvents:UIControlEventTouchUpInside]; | |
106 | + [_funcBtn setImage:[UIImage imageNamed:@"功能"] forState:UIControlStateNormal]; | |
107 | + } | |
108 | + return _funcBtn; | |
109 | +} | |
110 | + | |
111 | +- (UIButton *)nextBtn | |
112 | +{ | |
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; | |
117 | + [_nextBtn addTarget:self action:@selector(onClick:) forControlEvents:UIControlEventTouchUpInside]; | |
118 | + [_nextBtn setImage:[UIImage imageNamed:@"对勾 (2)"] forState:UIControlStateNormal]; | |
119 | + } | |
120 | + return _nextBtn; | |
121 | +} | |
122 | + | |
123 | +- (UIButton *)recordBtn | |
124 | +{ | |
125 | + if (!_recordBtn){ | |
126 | + _recordBtn = [UIButton buttonWithType:UIButtonTypeCustom]; | |
127 | + _recordBtn.frame = CGRectMake(0, 0, 80, 80); | |
128 | + _recordBtn.center = CGPointMake(KScreenWidth/2, KScreenHeight-70); | |
129 | + _recordBtn.tag = PreViewSubViewIdx_Record; | |
130 | + [_recordBtn addTarget:self action:@selector(onClick:) forControlEvents:UIControlEventTouchUpInside]; | |
131 | + [_recordBtn setImage:[UIImage imageNamed:@"record"] forState:UIControlStateNormal]; | |
132 | + [_recordBtn setImage:[UIImage imageNamed:@"录制"] forState:UIControlStateSelected]; | |
133 | + } | |
134 | + return _recordBtn; | |
135 | +} | |
136 | + | |
137 | +- (LVCVideoMgrButton *)effectsBtn | |
138 | +{ | |
139 | + if (!_effectsBtn){ | |
140 | + _effectsBtn = [[LVCVideoMgrButton alloc] initWithFrame:CGRectMake(50, KScreenHeight-BOTTOM_ICON_WIDTH-50, BOTTOM_ICON_WIDTH, BOTTOM_ICON_WIDTH)]; | |
141 | + _effectsBtn.videoMgrState = kEffectsState; | |
142 | + [_effectsBtn addTarget:self action:@selector(onClick:) forControlEvents:UIControlEventTouchUpInside]; | |
143 | + } | |
144 | + return _effectsBtn; | |
145 | +} | |
146 | + | |
147 | + | |
148 | +/* | |
149 | +// Only override drawRect: if you perform custom drawing. | |
150 | +// An empty implementation adversely affects performance during animation. | |
151 | +- (void)drawRect:(CGRect)rect { | |
152 | + // Drawing code | |
153 | +} | |
154 | +*/ | |
155 | + | |
156 | +@end | ... | ... |
LiveVideoCloud/Classes/Sections/Mine/Views/LVCVideoMgrButton.h
0 → 100644
1 | +// | |
2 | +// LVCVideoMgrButton.h | |
3 | +// LiveVideoCloud | |
4 | +// | |
5 | +// Created by iOS on 2017/7/7. | |
6 | +// Copyright © 2017年 cnlive. All rights reserved. | |
7 | +// | |
8 | + | |
9 | +#import <UIKit/UIKit.h> | |
10 | + | |
11 | +enum { | |
12 | + kEffectsState = (1 << 16), //导入视频状态 | |
13 | + kDeleteState = (1 << 17), //删除状态 | |
14 | + kBackSelect = (1 << 18), //回退状态(回退->删除->导入) | |
15 | +}; | |
16 | + | |
17 | +@interface LVCVideoMgrButton : UIButton | |
18 | + | |
19 | +@property (nonatomic, assign) NSUInteger videoMgrState; | |
20 | + | |
21 | + | |
22 | +@end | ... | ... |
LiveVideoCloud/Classes/Sections/Mine/Views/LVCVideoMgrButton.m
0 → 100644
1 | +// | |
2 | +// LVCVideoMgrButton.m | |
3 | +// LiveVideoCloud | |
4 | +// | |
5 | +// Created by iOS on 2017/7/7. | |
6 | +// Copyright © 2017年 cnlive. All rights reserved. | |
7 | +// | |
8 | + | |
9 | +#import "LVCVideoMgrButton.h" | |
10 | +#import "LVCPreviewView.h" | |
11 | + | |
12 | +@implementation LVCVideoMgrButton | |
13 | + | |
14 | +- (instancetype)initWithFrame:(CGRect)frame | |
15 | +{ | |
16 | + self = [super initWithFrame:frame]; | |
17 | + if (self){ | |
18 | + | |
19 | + self.backgroundColor = [UIColor blackColor]; | |
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 )]; | |
30 | + | |
31 | + } | |
32 | + return self; | |
33 | +} | |
34 | + | |
35 | +- (void)setVideoMgrState:(NSUInteger)videoMgrState | |
36 | +{ | |
37 | + if (videoMgrState == kEffectsState){ | |
38 | + self.tag = PreViewSubViewIdx_Effects; | |
39 | + }else if (videoMgrState == kDeleteState){ | |
40 | + self.tag = PreViewSubViewIdx_Delete; | |
41 | + }else if (videoMgrState == kBackSelect){ | |
42 | + self.tag = PreViewSubViewIdx_Revoke; | |
43 | + } | |
44 | + _videoMgrState = videoMgrState; | |
45 | + | |
46 | + [self setNeedsLayout]; | |
47 | +} | |
48 | + | |
49 | +- (UIControlState)state | |
50 | +{ | |
51 | + return ( [super state] | self.videoMgrState); | |
52 | +} | |
53 | + | |
54 | +/* | |
55 | +// Only override drawRect: if you perform custom drawing. | |
56 | +// An empty implementation adversely affects performance during animation. | |
57 | +- (void)drawRect:(CGRect)rect { | |
58 | + // Drawing code | |
59 | +} | |
60 | +*/ | |
61 | + | |
62 | +@end | ... | ... |
LiveVideoCloud/Classes/Sections/UGCSections/View/LVCUGCLiveListView.m
... | ... | @@ -106,7 +106,7 @@ static NSString *cellId = @"cellId"; |
106 | 106 | |
107 | 107 | - (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath { |
108 | 108 | |
109 | - LVCUGCLivePlayerModel *model = _arrayM[indexPath.row]; | |
109 | + LVCUGCLivePlayerModel *model = (LVCUGCLivePlayerModel *)_arrayM[indexPath.row]; | |
110 | 110 | // 判断此时直播状态 |
111 | 111 | [LVCLiveActivityInfoService getLiveActivityInfoWithActivityId:model.activityId Handler:^(id data, NSError *error) { |
112 | 112 | ... | ... |
LiveVideoCloud/ShortVideoData.plist
0 → 100644
1 | +<?xml version="1.0" encoding="UTF-8"?> | |
2 | +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> | |
3 | +<plist version="1.0"> | |
4 | +<array> | |
5 | + <array> | |
6 | + <dict> | |
7 | + <key>image</key> | |
8 | + <string>decal_t_0</string> | |
9 | + <key>txt</key> | |
10 | + <string>nil</string> | |
11 | + <key>idx</key> | |
12 | + <string>0</string> | |
13 | + <key>type</key> | |
14 | + <string>0</string> | |
15 | + </dict> | |
16 | + <dict> | |
17 | + <key>image</key> | |
18 | + <string>decal_t_1</string> | |
19 | + <key>txt</key> | |
20 | + <string>nil</string> | |
21 | + <key>idx</key> | |
22 | + <string>1</string> | |
23 | + <key>type</key> | |
24 | + <string>0</string> | |
25 | + </dict> | |
26 | + <dict> | |
27 | + <key>image</key> | |
28 | + <string>decal_t_2</string> | |
29 | + <key>txt</key> | |
30 | + <string>nil</string> | |
31 | + <key>idx</key> | |
32 | + <string>2</string> | |
33 | + <key>type</key> | |
34 | + <string>0</string> | |
35 | + </dict> | |
36 | + <dict> | |
37 | + <key>image</key> | |
38 | + <string>decal_t_3</string> | |
39 | + <key>txt</key> | |
40 | + <string>nil</string> | |
41 | + <key>idx</key> | |
42 | + <string>3</string> | |
43 | + <key>type</key> | |
44 | + <string>0</string> | |
45 | + </dict> | |
46 | + <dict> | |
47 | + <key>image</key> | |
48 | + <string>decal_t_4</string> | |
49 | + <key>txt</key> | |
50 | + <string>nil</string> | |
51 | + <key>idx</key> | |
52 | + <string>4</string> | |
53 | + <key>type</key> | |
54 | + <string>0</string> | |
55 | + </dict> | |
56 | + </array> | |
57 | + <array> | |
58 | + <dict> | |
59 | + <key>image</key> | |
60 | + <string>decal_0_icon</string> | |
61 | + <key>txt</key> | |
62 | + <string>nil</string> | |
63 | + <key>idx</key> | |
64 | + <string>0</string> | |
65 | + <key>type</key> | |
66 | + <string>0</string> | |
67 | + </dict> | |
68 | + <dict> | |
69 | + <key>image</key> | |
70 | + <string>decal_1_icon</string> | |
71 | + <key>txt</key> | |
72 | + <string>nil</string> | |
73 | + <key>idx</key> | |
74 | + <string>1</string> | |
75 | + <key>type</key> | |
76 | + <string>0</string> | |
77 | + </dict> | |
78 | + <dict> | |
79 | + <key>image</key> | |
80 | + <string>decal_2_icon</string> | |
81 | + <key>txt</key> | |
82 | + <string>nil</string> | |
83 | + <key>idx</key> | |
84 | + <string>2</string> | |
85 | + <key>type</key> | |
86 | + <string>0</string> | |
87 | + </dict> | |
88 | + <dict> | |
89 | + <key>image</key> | |
90 | + <string>decal_3_icon</string> | |
91 | + <key>txt</key> | |
92 | + <string>nil</string> | |
93 | + <key>idx</key> | |
94 | + <string>3</string> | |
95 | + <key>type</key> | |
96 | + <string>0</string> | |
97 | + </dict> | |
98 | + <dict> | |
99 | + <key>image</key> | |
100 | + <string>decal_4_icon</string> | |
101 | + <key>txt</key> | |
102 | + <string>nil</string> | |
103 | + <key>idx</key> | |
104 | + <string>4</string> | |
105 | + <key>type</key> | |
106 | + <string>0</string> | |
107 | + </dict> | |
108 | + <dict> | |
109 | + <key>image</key> | |
110 | + <string>decal_5_icon</string> | |
111 | + <key>txt</key> | |
112 | + <string>nil</string> | |
113 | + <key>idx</key> | |
114 | + <string>5</string> | |
115 | + <key>type</key> | |
116 | + <string>0</string> | |
117 | + </dict> | |
118 | + <dict> | |
119 | + <key>image</key> | |
120 | + <string>decal_6_icon</string> | |
121 | + <key>txt</key> | |
122 | + <string>nil</string> | |
123 | + <key>idx</key> | |
124 | + <string>6</string> | |
125 | + <key>type</key> | |
126 | + <string>0</string> | |
127 | + </dict> | |
128 | + <dict> | |
129 | + <key>image</key> | |
130 | + <string>decal_7_icon</string> | |
131 | + <key>txt</key> | |
132 | + <string>nil</string> | |
133 | + <key>idx</key> | |
134 | + <string>7</string> | |
135 | + <key>type</key> | |
136 | + <string>0</string> | |
137 | + </dict> | |
138 | + </array> | |
139 | + <array> | |
140 | + <dict> | |
141 | + <key>image</key> | |
142 | + <string>closeef</string> | |
143 | + <key>txt</key> | |
144 | + <string>nil</string> | |
145 | + <key>idx</key> | |
146 | + <string>0</string> | |
147 | + <key>type</key> | |
148 | + <string>0</string> | |
149 | + </dict> | |
150 | + <dict> | |
151 | + <key>image</key> | |
152 | + <string>man</string> | |
153 | + <key>txt</key> | |
154 | + <string>大叔</string> | |
155 | + <key>idx</key> | |
156 | + <string>1</string> | |
157 | + <key>type</key> | |
158 | + <string>1</string> | |
159 | + </dict> | |
160 | + <dict> | |
161 | + <key>image</key> | |
162 | + <string>woman</string> | |
163 | + <key>txt</key> | |
164 | + <string>萝莉</string> | |
165 | + <key>idx</key> | |
166 | + <string>2</string> | |
167 | + <key>type</key> | |
168 | + <string>1</string> | |
169 | + </dict> | |
170 | + <dict> | |
171 | + <key>image</key> | |
172 | + <string>solemn</string> | |
173 | + <key>txt</key> | |
174 | + <string>庄重</string> | |
175 | + <key>idx</key> | |
176 | + <string>3</string> | |
177 | + <key>type</key> | |
178 | + <string>1</string> | |
179 | + </dict> | |
180 | + <dict> | |
181 | + <key>image</key> | |
182 | + <string>robot</string> | |
183 | + <key>txt</key> | |
184 | + <string>机器人</string> | |
185 | + <key>idx</key> | |
186 | + <string>4</string> | |
187 | + <key>type</key> | |
188 | + <string>1</string> | |
189 | + </dict> | |
190 | + </array> | |
191 | + <array> | |
192 | + <dict> | |
193 | + <key>image</key> | |
194 | + <string>closeef</string> | |
195 | + <key>txt</key> | |
196 | + <string>nil</string> | |
197 | + <key>idx</key> | |
198 | + <string>0</string> | |
199 | + <key>type</key> | |
200 | + <string>1</string> | |
201 | + </dict> | |
202 | + <dict> | |
203 | + <key>image</key> | |
204 | + <string>studio</string> | |
205 | + <key>txt</key> | |
206 | + <string>录音棚</string> | |
207 | + <key>idx</key> | |
208 | + <string>1</string> | |
209 | + <key>type</key> | |
210 | + <string>0</string> | |
211 | + </dict> | |
212 | + <dict> | |
213 | + <key>image</key> | |
214 | + <string>ktv</string> | |
215 | + <key>txt</key> | |
216 | + <string>KTV</string> | |
217 | + <key>idx</key> | |
218 | + <string>2</string> | |
219 | + <key>type</key> | |
220 | + <string>0</string> | |
221 | + </dict> | |
222 | + <dict> | |
223 | + <key>image</key> | |
224 | + <string>woodwing</string> | |
225 | + <key>txt</key> | |
226 | + <string>小舞台</string> | |
227 | + <key>idx</key> | |
228 | + <string>4</string> | |
229 | + <key>type</key> | |
230 | + <string>0</string> | |
231 | + </dict> | |
232 | + <dict> | |
233 | + <key>image</key> | |
234 | + <string>concert</string> | |
235 | + <key>txt</key> | |
236 | + <string>演唱会</string> | |
237 | + <key>idx</key> | |
238 | + <string>3</string> | |
239 | + <key>type</key> | |
240 | + <string>0</string> | |
241 | + </dict> | |
242 | + </array> | |
243 | + <array> | |
244 | + <dict> | |
245 | + <key>path</key> | |
246 | + <string>nil</string> | |
247 | + <key>txt</key> | |
248 | + <string>nil</string> | |
249 | + <key>image</key> | |
250 | + <string>closeef</string> | |
251 | + <key>idx</key> | |
252 | + <string>0</string> | |
253 | + </dict> | |
254 | + <dict> | |
255 | + <key>path</key> | |
256 | + <string>Idina Menzel - Let It Go</string> | |
257 | + <key>txt</key> | |
258 | + <string>Frozen</string> | |
259 | + <key>image</key> | |
260 | + <string>Frozen</string> | |
261 | + <key>idx</key> | |
262 | + <string>1</string> | |
263 | + </dict> | |
264 | + <dict> | |
265 | + <key>path</key> | |
266 | + <string>See You Again</string> | |
267 | + <key>txt</key> | |
268 | + <string>See You Again</string> | |
269 | + <key>image</key> | |
270 | + <string>See You Again</string> | |
271 | + <key>idx</key> | |
272 | + <string>2</string> | |
273 | + </dict> | |
274 | + <dict> | |
275 | + <key>path</key> | |
276 | + <string>Zedd,Alessia Cara - Stay</string> | |
277 | + <key>txt</key> | |
278 | + <string>Stay</string> | |
279 | + <key>image</key> | |
280 | + <string>Stay</string> | |
281 | + <key>idx</key> | |
282 | + <string>3</string> | |
283 | + </dict> | |
284 | + </array> | |
285 | +</array> | |
286 | +</plist> | ... | ... |
LiveVideoCloud/animation.xcassets/ShortVideo/Contents.json
0 → 100644
LiveVideoCloud/animation.xcassets/ShortVideo/delete.imageset/Contents.json
0 → 100644
1 | +{ | |
2 | + "images" : [ | |
3 | + { | |
4 | + "idiom" : "universal", | |
5 | + "scale" : "1x" | |
6 | + }, | |
7 | + { | |
8 | + "idiom" : "universal", | |
9 | + "scale" : "2x" | |
10 | + }, | |
11 | + { | |
12 | + "idiom" : "universal", | |
13 | + "filename" : "删除.png", | |
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/delete.imageset/删除.png
0 → 100644
6.12 KB
LiveVideoCloud/animation.xcassets/ShortVideo/record.imageset/Contents.json
0 → 100644
1 | +{ | |
2 | + "images" : [ | |
3 | + { | |
4 | + "idiom" : "universal", | |
5 | + "filename" : "开吃圆圈.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/record.imageset/开吃圆圈.png
0 → 100644
6.32 KB
LiveVideoCloud/animation.xcassets/ShortVideo/revoke.imageset/Contents.json
0 → 100644
1 | +{ | |
2 | + "images" : [ | |
3 | + { | |
4 | + "idiom" : "universal", | |
5 | + "scale" : "1x" | |
6 | + }, | |
7 | + { | |
8 | + "idiom" : "universal", | |
9 | + "scale" : "2x" | |
10 | + }, | |
11 | + { | |
12 | + "idiom" : "universal", | |
13 | + "filename" : "删除-2.png", | |
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/revoke.imageset/删除-2.png
0 → 100644
5.14 KB
LiveVideoCloud/animation.xcassets/ShortVideo/上传.imageset/Contents.json
0 → 100644
1 | +{ | |
2 | + "images" : [ | |
3 | + { | |
4 | + "idiom" : "universal", | |
5 | + "scale" : "1x" | |
6 | + }, | |
7 | + { | |
8 | + "idiom" : "universal", | |
9 | + "scale" : "2x" | |
10 | + }, | |
11 | + { | |
12 | + "idiom" : "universal", | |
13 | + "filename" : "上传.png", | |
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/上传.imageset/上传.png
0 → 100644
1.18 KB
LiveVideoCloud/animation.xcassets/ShortVideo/分钟竖线.imageset/Contents.json
0 → 100644
1 | +{ | |
2 | + "images" : [ | |
3 | + { | |
4 | + "idiom" : "universal", | |
5 | + "scale" : "1x" | |
6 | + }, | |
7 | + { | |
8 | + "idiom" : "universal", | |
9 | + "scale" : "2x" | |
10 | + }, | |
11 | + { | |
12 | + "idiom" : "universal", | |
13 | + "filename" : "分钟竖线.png", | |
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/分钟竖线.imageset/分钟竖线.png
0 → 100644
1.13 KB
LiveVideoCloud/animation.xcassets/ShortVideo/功能.imageset/Contents.json
0 → 100644
1 | +{ | |
2 | + "images" : [ | |
3 | + { | |
4 | + "idiom" : "universal", | |
5 | + "filename" : "更多.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/功能.imageset/更多.png
0 → 100644
3.06 KB
LiveVideoCloud/animation.xcassets/ShortVideo/叉.imageset/Contents.json
0 → 100644
1 | +{ | |
2 | + "images" : [ | |
3 | + { | |
4 | + "idiom" : "universal", | |
5 | + "scale" : "1x" | |
6 | + }, | |
7 | + { | |
8 | + "idiom" : "universal", | |
9 | + "scale" : "2x" | |
10 | + }, | |
11 | + { | |
12 | + "idiom" : "universal", | |
13 | + "filename" : "叉.png", | |
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/叉.imageset/叉.png
0 → 100644
2.99 KB
LiveVideoCloud/animation.xcassets/ShortVideo/声音.imageset/Contents.json
0 → 100644
1 | +{ | |
2 | + "images" : [ | |
3 | + { | |
4 | + "idiom" : "universal", | |
5 | + "scale" : "1x" | |
6 | + }, | |
7 | + { | |
8 | + "idiom" : "universal", | |
9 | + "scale" : "2x" | |
10 | + }, | |
11 | + { | |
12 | + "idiom" : "universal", | |
13 | + "filename" : "声音.png", | |
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/声音.imageset/声音.png
0 → 100644
3.42 KB
LiveVideoCloud/animation.xcassets/ShortVideo/对勾 (2).imageset/Contents.json
0 → 100644
1 | +{ | |
2 | + "images" : [ | |
3 | + { | |
4 | + "idiom" : "universal", | |
5 | + "scale" : "1x" | |
6 | + }, | |
7 | + { | |
8 | + "idiom" : "universal", | |
9 | + "scale" : "2x" | |
10 | + }, | |
11 | + { | |
12 | + "idiom" : "universal", | |
13 | + "filename" : "对勾 (2).png", | |
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/对勾 (2).imageset/对勾 (2).png
0 → 100644
6.81 KB
LiveVideoCloud/animation.xcassets/ShortVideo/对勾.imageset/Contents.json
0 → 100644
1 | +{ | |
2 | + "images" : [ | |
3 | + { | |
4 | + "idiom" : "universal", | |
5 | + "scale" : "1x" | |
6 | + }, | |
7 | + { | |
8 | + "idiom" : "universal", | |
9 | + "scale" : "2x" | |
10 | + }, | |
11 | + { | |
12 | + "idiom" : "universal", | |
13 | + "filename" : "对勾.png", | |
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/对勾.imageset/对勾.png
0 → 100644
2.96 KB
LiveVideoCloud/animation.xcassets/ShortVideo/录制.imageset/Contents.json
0 → 100644
1 | +{ | |
2 | + "images" : [ | |
3 | + { | |
4 | + "idiom" : "universal", | |
5 | + "filename" : "录制.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/录制.imageset/录制.png
0 → 100644
5.21 KB
LiveVideoCloud/animation.xcassets/ShortVideo/播放.imageset/Contents.json
0 → 100644
1 | +{ | |
2 | + "images" : [ | |
3 | + { | |
4 | + "idiom" : "universal", | |
5 | + "scale" : "1x" | |
6 | + }, | |
7 | + { | |
8 | + "idiom" : "universal", | |
9 | + "scale" : "2x" | |
10 | + }, | |
11 | + { | |
12 | + "idiom" : "universal", | |
13 | + "filename" : "播放.png", | |
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/播放.imageset/播放.png
0 → 100644
2.52 KB
LiveVideoCloud/animation.xcassets/ShortVideo/无声音_线.imageset/Contents.json
0 → 100644
1 | +{ | |
2 | + "images" : [ | |
3 | + { | |
4 | + "idiom" : "universal", | |
5 | + "scale" : "1x" | |
6 | + }, | |
7 | + { | |
8 | + "idiom" : "universal", | |
9 | + "scale" : "2x" | |
10 | + }, | |
11 | + { | |
12 | + "idiom" : "universal", | |
13 | + "filename" : "无声音_线.png", | |
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/无声音_线.imageset/无声音_线.png
0 → 100644
3.18 KB
LiveVideoCloud/animation.xcassets/ShortVideo/相册.imageset/Contents.json
0 → 100644
1 | +{ | |
2 | + "images" : [ | |
3 | + { | |
4 | + "idiom" : "universal", | |
5 | + "scale" : "1x" | |
6 | + }, | |
7 | + { | |
8 | + "idiom" : "universal", | |
9 | + "scale" : "2x" | |
10 | + }, | |
11 | + { | |
12 | + "idiom" : "universal", | |
13 | + "filename" : "相册.png", | |
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/相册.imageset/相册.png
0 → 100644
5.36 KB
LiveVideoCloud/animation.xcassets/ShortVideo/相机.imageset/Contents.json
0 → 100644
1 | +{ | |
2 | + "images" : [ | |
3 | + { | |
4 | + "idiom" : "universal", | |
5 | + "scale" : "1x" | |
6 | + }, | |
7 | + { | |
8 | + "idiom" : "universal", | |
9 | + "scale" : "2x" | |
10 | + }, | |
11 | + { | |
12 | + "idiom" : "universal", | |
13 | + "filename" : "相机.png", | |
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/相机.imageset/相机.png
0 → 100644
3.83 KB
LiveVideoCloud/animation.xcassets/ShortVideo/美颜-2.imageset/Contents.json
0 → 100644
1 | +{ | |
2 | + "images" : [ | |
3 | + { | |
4 | + "idiom" : "universal", | |
5 | + "filename" : "美颜-2.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/美颜-2.imageset/美颜-2.png
0 → 100644
3.28 KB
LiveVideoCloud/animation.xcassets/ShortVideo/美颜.imageset/Contents.json
0 → 100644
1 | +{ | |
2 | + "images" : [ | |
3 | + { | |
4 | + "idiom" : "universal", | |
5 | + "filename" : "美颜.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/美颜.imageset/美颜.png
0 → 100644
4.9 KB
LiveVideoCloud/animation.xcassets/ShortVideo/美颜设置-角色.imageset/Contents.json
0 → 100644
1 | +{ | |
2 | + "images" : [ | |
3 | + { | |
4 | + "idiom" : "universal", | |
5 | + "scale" : "1x" | |
6 | + }, | |
7 | + { | |
8 | + "idiom" : "universal", | |
9 | + "scale" : "2x" | |
10 | + }, | |
11 | + { | |
12 | + "idiom" : "universal", | |
13 | + "filename" : "美颜设置-角色.png", | |
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/美颜设置-角色.imageset/美颜设置-角色.png
0 → 100644
4.41 KB
LiveVideoCloud/animation.xcassets/ShortVideo/返回.imageset/Contents.json
0 → 100644
1 | +{ | |
2 | + "images" : [ | |
3 | + { | |
4 | + "idiom" : "universal", | |
5 | + "scale" : "1x" | |
6 | + }, | |
7 | + { | |
8 | + "idiom" : "universal", | |
9 | + "scale" : "2x" | |
10 | + }, | |
11 | + { | |
12 | + "idiom" : "universal", | |
13 | + "filename" : "返回.png", | |
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/返回.imageset/返回.png
0 → 100644
1.98 KB
LiveVideoCloud/animation.xcassets/ShortVideo/闪光灯关闭.imageset/Contents.json
0 → 100644
1 | +{ | |
2 | + "images" : [ | |
3 | + { | |
4 | + "idiom" : "universal", | |
5 | + "filename" : "闪光灯关闭.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/闪光灯关闭.imageset/闪光灯关闭.png
0 → 100644
3.61 KB
LiveVideoCloud/animation.xcassets/ShortVideo/闪光灯开启.imageset/Contents.json
0 → 100644
1 | +{ | |
2 | + "images" : [ | |
3 | + { | |
4 | + "idiom" : "universal", | |
5 | + "filename" : "闪光灯打开.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/闪光灯开启.imageset/闪光灯打开.png
0 → 100644
3.38 KB