Commit 392d034eb9ac0fb0e07848b405f1ffdda4862a65

Authored by 朱林
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
  1 +//
  2 +// LVCShortVideoController.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 +@interface LVCShortVideoController : UIViewController
  12 +
  13 +@end
... ...
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
  1 +//
  2 +// AEModelTemplate.m
  3 +// LiveVideoCloud
  4 +//
  5 +// Created by iOS on 2017/7/7.
  6 +// Copyright © 2017年 cnlive. All rights reserved.
  7 +//
  8 +
  9 +#import "AEModelTemplate.h"
  10 +
  11 +@implementation AEModelTemplate
  12 +
  13 +@end
... ...
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 = @&quot;cellId&quot;;
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
  1 +{
  2 + "info" : {
  3 + "version" : 1,
  4 + "author" : "xcode"
  5 + }
  6 +}
0 7 \ No newline at end of file
... ...
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