Steven преди 3 години
родител
ревизия
d3081b01d8
променени са 33 файла, в които са добавени 1344 реда и са изтрити 95 реда
  1. 6 0
      KulexiuForTeacher/KulexiuForTeacher.xcodeproj/project.pbxproj
  2. 14 0
      KulexiuForTeacher/KulexiuForTeacher.xcodeproj/xcuserdata/wangzhi.xcuserdatad/xcschemes/xcschememanagement.plist
  3. 8 0
      KulexiuForTeacher/KulexiuForTeacher.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
  4. BIN
      KulexiuForTeacher/KulexiuForTeacher.xcworkspace/xcuserdata/wangzhi.xcuserdatad/UserInterfaceState.xcuserstate
  5. 6 0
      KulexiuForTeacher/KulexiuForTeacher.xcworkspace/xcuserdata/wangzhi.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist
  6. 22 0
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Live/Beauty/filterNone_unSelect.imageset/Contents.json
  7. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Live/Beauty/filterNone_unSelect.imageset/filterNone_unSelect@2x.png
  8. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Live/Beauty/filterNone_unSelect.imageset/filterNone_unSelect@3x.png
  9. 22 0
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Live/Beauty/filter_none_selected.imageset/Contents.json
  10. 0 0
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Live/Beauty/filter_none_selected.imageset/filter_none_selected@2x.png
  11. 0 0
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Live/Beauty/filter_none_selected.imageset/filter_none_selected@3x.png
  12. 2 2
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Live/Beauty/light_alpha.imageset/Contents.json
  13. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Live/Beauty/light_alpha.imageset/light_alpha@2x.png
  14. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Live/Beauty/light_alpha.imageset/light_alpha@3x.png
  15. 22 0
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Live/Beauty/ruddy_alpha.imageset/Contents.json
  16. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Live/Beauty/ruddy_alpha.imageset/ruddy_alpha@2x.png
  17. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Live/Beauty/ruddy_alpha.imageset/ruddy_alpha@3x.png
  18. 22 0
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Live/Beauty/smooth_alpha.imageset/Contents.json
  19. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Live/Beauty/smooth_alpha.imageset/smooth_alpha@2x.png
  20. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Live/Beauty/smooth_alpha.imageset/smooth_alpha@3x.png
  21. 22 0
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Live/Beauty/white_alpha.imageset/Contents.json
  22. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Live/Beauty/white_alpha.imageset/white_alpha@2x.png
  23. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Live/Beauty/white_alpha.imageset/white_alpha@3x.png
  24. 64 3
      KulexiuForTeacher/KulexiuForTeacher/Module/Live/Controller/LivePrepareViewController.m
  25. 80 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Live/LiveRoomMessage/KSRCMessageModel.h
  26. 31 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Live/LiveRoomMessage/KSRCMessageModel.m
  27. 15 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Live/View/KSBeautySettingView.h
  28. 446 1
      KulexiuForTeacher/KulexiuForTeacher/Module/Live/View/KSBeautySettingView.m
  29. 385 21
      KulexiuForTeacher/KulexiuForTeacher/Module/Live/View/KSBeautySettingView.xib
  30. 8 48
      KulexiuForTeacher/KulexiuForTeacher/Module/Live/View/KSChatroomTextCell.m
  31. 12 8
      KulexiuForTeacher/KulexiuForTeacher/Module/Live/View/LiveRoomHeadView.xib
  32. 18 12
      KulexiuForTeacher/KulexiuForTeacher/Module/Live/View/SeatContentView.m
  33. 139 0
      KulexiuForTeacher/Pods/Pods.xcodeproj/xcuserdata/wangzhi.xcuserdatad/xcschemes/xcschememanagement.plist

+ 6 - 0
KulexiuForTeacher/KulexiuForTeacher.xcodeproj/project.pbxproj

@@ -435,6 +435,7 @@
 		27FC2F5F27F1930400FCC239 /* KSStarView.m in Sources */ = {isa = PBXBuildFile; fileRef = 27FC2F5E27F1930400FCC239 /* KSStarView.m */; };
 		27FC2F6627F1BBFE00FCC239 /* MyMusicViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 27FC2F6527F1BBFE00FCC239 /* MyMusicViewController.m */; };
 		27FC2F6D27F1BE4800FCC239 /* VideoCourseViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 27FC2F6C27F1BE4800FCC239 /* VideoCourseViewController.m */; };
+		BC6C303A27F586A60044BC0F /* KSRCMessageModel.m in Sources */ = {isa = PBXBuildFile; fileRef = BC6C303927F586A60044BC0F /* KSRCMessageModel.m */; };
 /* End PBXBuildFile section */
 
 /* Begin PBXContainerItemProxy section */
@@ -1243,6 +1244,8 @@
 		27FC2F6C27F1BE4800FCC239 /* VideoCourseViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = VideoCourseViewController.m; sourceTree = "<group>"; };
 		67CFD930D686EE06F99E34F3 /* Pods-KulexiuForTeacher.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-KulexiuForTeacher.release.xcconfig"; path = "Target Support Files/Pods-KulexiuForTeacher/Pods-KulexiuForTeacher.release.xcconfig"; sourceTree = "<group>"; };
 		AC7237F12804B8A0533DF9FE /* Pods-KulexiuForTeacher.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-KulexiuForTeacher.debug.xcconfig"; path = "Target Support Files/Pods-KulexiuForTeacher/Pods-KulexiuForTeacher.debug.xcconfig"; sourceTree = "<group>"; };
+		BC6C303827F586A60044BC0F /* KSRCMessageModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KSRCMessageModel.h; sourceTree = "<group>"; };
+		BC6C303927F586A60044BC0F /* KSRCMessageModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KSRCMessageModel.m; sourceTree = "<group>"; };
 		CC310B10C17622ABB179BC7C /* libPods-KulexiuForTeacher.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-KulexiuForTeacher.a"; sourceTree = BUILT_PRODUCTS_DIR; };
 /* End PBXFileReference section */
 
@@ -1381,6 +1384,8 @@
 		275E3DAA27F45BBB0010EC30 /* LiveRoomMessage */ = {
 			isa = PBXGroup;
 			children = (
+				BC6C303827F586A60044BC0F /* KSRCMessageModel.h */,
+				BC6C303927F586A60044BC0F /* KSRCMessageModel.m */,
 				275E3DAB27F45BE90010EC30 /* KSChatroomMessageCenter.h */,
 				275E3DAC27F45BE90010EC30 /* KSChatroomMessageCenter.m */,
 				275E3DAE27F45CA60010EC30 /* KSLiveChatroomLike.h */,
@@ -3402,6 +3407,7 @@
 				277931E027E30FC20010E277 /* UIDevice+zhDeviceType.m in Sources */,
 				2779329227E30FEB0010E277 /* MSSBrowseActionSheet.m in Sources */,
 				27F9CB0027EC3D42003E0FE4 /* GroupListViewCell.m in Sources */,
+				BC6C303A27F586A60044BC0F /* KSRCMessageModel.m in Sources */,
 				2780C91C27E48A0700A95A4F /* PasswordLoginController.m in Sources */,
 				2779336027E31CB40010E277 /* UIView+KSExtension.m in Sources */,
 				2779321C27E30FC30010E277 /* prodectButton.m in Sources */,

+ 14 - 0
KulexiuForTeacher/KulexiuForTeacher.xcodeproj/xcuserdata/wangzhi.xcuserdatad/xcschemes/xcschememanagement.plist

@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>SchemeUserState</key>
+	<dict>
+		<key>KulexiuForTeacher.xcscheme_^#shared#^_</key>
+		<dict>
+			<key>orderHint</key>
+			<integer>5</integer>
+		</dict>
+	</dict>
+</dict>
+</plist>

+ 8 - 0
KulexiuForTeacher/KulexiuForTeacher.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist

@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>IDEDidComputeMac32BitWarning</key>
+	<true/>
+</dict>
+</plist>

BIN
KulexiuForTeacher/KulexiuForTeacher.xcworkspace/xcuserdata/wangzhi.xcuserdatad/UserInterfaceState.xcuserstate


+ 6 - 0
KulexiuForTeacher/KulexiuForTeacher.xcworkspace/xcuserdata/wangzhi.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Bucket
+   uuid = "82E82971-74D9-4A58-9AF1-52E98769F9B2"
+   type = "0"
+   version = "2.0">
+</Bucket>

+ 22 - 0
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Live/Beauty/filterNone_unSelect.imageset/Contents.json

@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "filterNone_unSelect@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "filterNone_unSelect@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

BIN
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Live/Beauty/filterNone_unSelect.imageset/filterNone_unSelect@2x.png


BIN
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Live/Beauty/filterNone_unSelect.imageset/filterNone_unSelect@3x.png


+ 22 - 0
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Live/Beauty/filter_none_selected.imageset/Contents.json

@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "filter_none_selected@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "filter_none_selected@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

+ 0 - 0
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Live/Beauty/filter_none.imageset/filter_none@2x.png → KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Live/Beauty/filter_none_selected.imageset/filter_none_selected@2x.png


+ 0 - 0
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Live/Beauty/filter_none.imageset/filter_none@3x.png → KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Live/Beauty/filter_none_selected.imageset/filter_none_selected@3x.png


+ 2 - 2
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Live/Beauty/filter_none.imageset/Contents.json → KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Live/Beauty/light_alpha.imageset/Contents.json

@@ -5,12 +5,12 @@
       "scale" : "1x"
     },
     {
-      "filename" : "filter_none@2x.png",
+      "filename" : "light_alpha@2x.png",
       "idiom" : "universal",
       "scale" : "2x"
     },
     {
-      "filename" : "filter_none@3x.png",
+      "filename" : "light_alpha@3x.png",
       "idiom" : "universal",
       "scale" : "3x"
     }

BIN
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Live/Beauty/light_alpha.imageset/light_alpha@2x.png


BIN
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Live/Beauty/light_alpha.imageset/light_alpha@3x.png


+ 22 - 0
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Live/Beauty/ruddy_alpha.imageset/Contents.json

@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "ruddy_alpha@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "ruddy_alpha@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

BIN
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Live/Beauty/ruddy_alpha.imageset/ruddy_alpha@2x.png


BIN
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Live/Beauty/ruddy_alpha.imageset/ruddy_alpha@3x.png


+ 22 - 0
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Live/Beauty/smooth_alpha.imageset/Contents.json

@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "smooth_alpha@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "smooth_alpha@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

BIN
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Live/Beauty/smooth_alpha.imageset/smooth_alpha@2x.png


BIN
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Live/Beauty/smooth_alpha.imageset/smooth_alpha@3x.png


+ 22 - 0
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Live/Beauty/white_alpha.imageset/Contents.json

@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "white_alpha@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "white_alpha@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

BIN
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Live/Beauty/white_alpha.imageset/white_alpha@2x.png


BIN
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Live/Beauty/white_alpha.imageset/white_alpha@3x.png


+ 64 - 3
KulexiuForTeacher/KulexiuForTeacher/Module/Live/Controller/LivePrepareViewController.m

@@ -10,6 +10,7 @@
 #import <RongRTCLib/RongRTCLib.h>
 #import "KSEnterLiveroomManager.h"
 #import <RongFaceBeautifier/RongFaceBeautifier.h>
+#import "KSBeautySettingView.h"
 
 @interface LivePrepareViewController ()
 
@@ -18,6 +19,11 @@
 // 音频配置
 @property(strong, nonatomic) RCRTCEngine *engine;
 
+@property (nonatomic, strong) KSBeautySettingView *settingView;
+
+@property (nonatomic, assign) BOOL isBeautyOn;
+
+@property (nonatomic, assign) int filterLevel;
 @end
 
 @implementation LivePrepareViewController
@@ -55,7 +61,7 @@
     }];
     [self.engine.defaultVideoStream setVideoView:videoView];
     [self.engine.defaultVideoStream startCapture];
-    
+    self.filterLevel = 50;
 }
 
 
@@ -92,10 +98,56 @@
 }
 
 - (void)displayBeautyView {
-    [self configSettingBeauty:YES white:8 smoothLevel:5 ruddyLevel:8 brightLevel:7 filter:RCRTCBeautyFilterEsthetic filterLevel:80];
+    
+    [self.view addSubview:self.settingView];
+    [self.settingView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.left.right.top.bottom.mas_equalTo(self.view);
+    }];
+    
+    RCRTCBeautyOption *option = [[RCRTCBeautyEngine sharedInstance] getCurrentBeautyOption];
+    RCRTCBeautyFilter filter = [[RCRTCBeautyEngine sharedInstance] getCurrentBeautyFilter];
+    FILTER_TYPE type = [self getFilterType:filter];
+    MJWeakSelf;
+    [self.settingView evaluateMessageWithBeauty:self.isBeautyOn white:option.whitenessLevel smoothLevel:option.smoothLevel ruddyLevel:option.ruddyLevel brightLevel:option.brightLevel filter:type filterLevel:self.filterLevel callback:^(BOOL isOpenBeauty, NSInteger white, NSInteger smoothLevel, NSInteger ruddyLevel, NSInteger brightLevel, FILTER_TYPE type, int filterLevel) {
+        [weakSelf configSettingBeauty:isOpenBeauty white:white smoothLevel:smoothLevel ruddyLevel:ruddyLevel brightLevel:brightLevel filter:[self getRongBeautyWithType:type] filterLevel:filterLevel];
+    }];
+}
+
+- (FILTER_TYPE)getFilterType:(RCRTCBeautyFilter)filter {
+    switch (filter) {
+        case RCRTCBeautyFilterNone:
+            return FILTER_TYPE_NONE;
+        case RCRTCBeautyFilterFresh:
+            return FILTER_TYPE_QINGXIN;
+        case RCRTCBeautyFilterEsthetic:
+            return FILTER_TYPE_WEIMEI;
+        case RCRTCBeautyFilterRomantic:
+            return FILTER_TYPE_LANGMAN;
+        default:
+            return FILTER_TYPE_NOMAL;
+            break;
+    }
+}
+
+- (RCRTCBeautyFilter)getRongBeautyWithType:(FILTER_TYPE)type {
+    switch (type) {
+        case FILTER_TYPE_NONE:
+        case FILTER_TYPE_NOMAL:
+            return RCRTCBeautyFilterNone;
+        case FILTER_TYPE_QINGXIN:
+            return RCRTCBeautyFilterFresh;
+        case FILTER_TYPE_WEIMEI:
+            return RCRTCBeautyFilterEsthetic;
+        case FILTER_TYPE_LANGMAN:
+            return RCRTCBeautyFilterRomantic;
+        default:
+            return RCRTCBeautyFilterNone;
+            break;
+    }
 }
 
 - (void)configSettingBeauty:(BOOL)isOn white:(NSInteger)whitenessLevel smoothLevel:(NSInteger)smoothLevel ruddyLevel:(NSInteger)ruddyLevel brightLevel:(NSInteger)brightLevel filter:(RCRTCBeautyFilter)filter filterLevel:(int)filterLevel {
+    self.isBeautyOn = isOn;
     if (isOn) {
         // 获取当前美颜参数
         RCRTCBeautyOption *option = [[RCRTCBeautyEngine sharedInstance] getCurrentBeautyOption];
@@ -105,7 +157,7 @@
         option.ruddyLevel = ruddyLevel;
         option.brightLevel = brightLevel;
         // 设置美颜
-        [[RCRTCBeautyEngine sharedInstance] setBeautyOption:YES option:option];
+        [[RCRTCBeautyEngine sharedInstance] setBeautyOption:isOn option:option];
         // 设置滤镜
         [[RCRTCBeautyEngine sharedInstance] setBeautyFilter:filter];
         // 设置滤镜强度
@@ -124,6 +176,15 @@
     }];
 }
 
+
+#pragma mark --- settingView
+- (KSBeautySettingView *)settingView {
+    if (!_settingView) {
+        _settingView = [KSBeautySettingView shareInstance];
+        
+    }
+    return _settingView;
+}
 /*
 #pragma mark - Navigation
 

+ 80 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Live/LiveRoomMessage/KSRCMessageModel.h

@@ -0,0 +1,80 @@
+//
+//  KSRCMessageModel.h
+//  LiveStreamDemo
+//
+//  Created by Kyle on 2021/10/21.
+//
+
+#import <Foundation/Foundation.h>
+#import <RongIMLib/RongIMLib.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface KSRCMessageModel : NSObject
+
+/**
+ 用户信息
+ */
+@property(nonatomic, strong) RCUserInfo *userInfo;
+
+/**
+ 会话类型
+ */
+@property(nonatomic, assign) RCConversationType conversationType;
+
+/**
+ 目标会话ID
+ */
+@property(nonatomic, strong) NSString *targetId;
+
+/**
+ 消息ID
+ */
+@property(nonatomic, assign) long messageId;
+
+/**
+ 消息方向
+ */
+@property(nonatomic, assign) RCMessageDirection messageDirection;
+
+/**
+ 发送者的用户ID
+ */
+@property(nonatomic, strong) NSString *senderUserId;
+
+/**
+ 消息的接收时间(Unix时间戳、毫秒)
+ */
+@property(nonatomic, assign) long long receivedTime;
+
+/**
+ 消息的发送时间(Unix时间戳、毫秒)
+ */
+@property(nonatomic, assign) long long sentTime;
+
+/**
+ 消息的类型名
+ */
+@property(nonatomic, strong) NSString *objectName;
+
+/**
+ 消息的内容
+ */
+@property(nonatomic, strong) RCMessageContent *content;
+
+/**
+ 消息的附加字段
+ */
+@property(nonatomic, strong) NSString *extra;
+
+/**
+ 初始化消息Cell的数据模型
+ 
+ @param rcMessage   消息实体
+ @return            消息Cell的数据模型对象
+ */
+- (instancetype)initWithMessage:(RCMessage *)rcMessage;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 31 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Live/LiveRoomMessage/KSRCMessageModel.m

@@ -0,0 +1,31 @@
+//
+//  KSRCMessageModel.m
+//  LiveStreamDemo
+//
+//  Created by Kyle on 2021/10/21.
+//
+
+#import "KSRCMessageModel.h"
+
+@implementation KSRCMessageModel
+
+- (instancetype)initWithMessage:(RCMessage *)rcMessage {
+    self = [super init];
+    if (self) {
+        self.conversationType = rcMessage.conversationType;
+        self.targetId = rcMessage.targetId;
+        self.messageId = rcMessage.messageId;
+        self.messageDirection = rcMessage.messageDirection;
+        self.senderUserId = rcMessage.senderUserId;
+        self.sentTime = rcMessage.sentTime;
+        self.objectName = rcMessage.objectName;
+        self.content = rcMessage.content;
+        self.userInfo = nil;
+        self.receivedTime = rcMessage.receivedTime;
+        self.extra = rcMessage.extra;
+    }
+    
+    return self;
+}
+
+@end

+ 15 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Live/View/KSBeautySettingView.h

@@ -7,10 +7,25 @@
 
 #import <UIKit/UIKit.h>
 
+
+typedef NS_ENUM(NSInteger, FILTER_TYPE) {
+    FILTER_TYPE_NONE = 0,  // 无
+    FILTER_TYPE_NOMAL, // 正常
+    FILTER_TYPE_WEIMEI, // 唯美
+    FILTER_TYPE_QINGXIN, // 清新
+    FILTER_TYPE_LANGMAN, // 浪漫
+};
+
+typedef void(^BeautyCallback)(BOOL isOpenBeauty, NSInteger white, NSInteger smoothLevel, NSInteger ruddyLevel, NSInteger brightLevel, FILTER_TYPE type, int filterLevel);
+
 NS_ASSUME_NONNULL_BEGIN
 
 @interface KSBeautySettingView : UIView
 
++ (instancetype)shareInstance;
+
+- (void)evaluateMessageWithBeauty:(BOOL)isOpenBeauty white:(NSInteger)whitenessLevel smoothLevel:(NSInteger)smoothLevel ruddyLevel:(NSInteger)ruddyLevel brightLevel:(NSInteger)brightLevel filter:(FILTER_TYPE)filter filterLevel:(int)filterLevel callback:(BeautyCallback)callback;
+
 @end
 
 NS_ASSUME_NONNULL_END

+ 446 - 1
KulexiuForTeacher/KulexiuForTeacher/Module/Live/View/KSBeautySettingView.m

@@ -7,20 +7,465 @@
 
 #import "KSBeautySettingView.h"
 
-@interface KSBeautySettingView ()
+typedef NS_ENUM(NSInteger, BEAUTY_INDEX) {
+    BEAUTY_INDEX_NONE,
+    BEAUTY_INDEX_WHITE,
+    BEAUTY_INDEX_SMOOTH,
+    BEAUTY_INDEX_RUDDY,
+    BEAUTY_INDEX_LIGHT,
+};
+
+@interface KSBeautySettingView ()<UIGestureRecognizerDelegate>
+@property (weak, nonatomic) IBOutlet UILabel *valueLabel;
+@property (weak, nonatomic) IBOutlet UIView *sliderBgView;
+
+/// 是否选择美颜page
+@property (nonatomic, assign) BOOL isChooseBeauty;
+
+@property (weak, nonatomic) IBOutlet NSLayoutConstraint *leftSpace;
+
+@property (weak, nonatomic) IBOutlet UILabel *beautyTitle;
+@property (weak, nonatomic) IBOutlet UILabel *filterTitle;
 
 @property (weak, nonatomic) IBOutlet UISlider *slider;
 
 @property (weak, nonatomic) IBOutlet UIView *beautyView;
 
+@property (weak, nonatomic) IBOutlet UIButton *beautySwitchButton; // 美颜开关
+
+/// 美白
+@property (weak, nonatomic) IBOutlet UIImageView *whiteImage;
+@property (weak, nonatomic) IBOutlet UILabel *whiteTitle;
+
+/// 磨皮
+@property (weak, nonatomic) IBOutlet UIImageView *smoothImage;
+@property (weak, nonatomic) IBOutlet UILabel *smoothTitle;
+
+/// 红润
+@property (weak, nonatomic) IBOutlet UIImageView *ruddyImage;
+@property (weak, nonatomic) IBOutlet UILabel *ruddyTitle;
+
+/// 亮度
+@property (weak, nonatomic) IBOutlet UIImageView *lightImage;
+@property (weak, nonatomic) IBOutlet UILabel *lightLabel;
+
+@property (weak, nonatomic) IBOutlet UIView *filterView;
+
+@property (nonatomic, assign) BOOL isOpenBeauty;
+
+@property (nonatomic, copy) BeautyCallback callback;
+
+@property (nonatomic, assign) FILTER_TYPE filter;
+@property (nonatomic, assign) int filterLevel;
+
+@property (nonatomic, assign) NSInteger whitenessLevel;
+@property (nonatomic, assign) NSInteger smoothLevel;
+@property (nonatomic, assign) NSInteger ruddyLevel;
+@property (nonatomic, assign) NSInteger brightLevel;
+
+/// 选择状态
+@property (nonatomic, assign) BEAUTY_INDEX chooseIndex;
+
+@property (weak, nonatomic) IBOutlet UIView *bottomView;
+
+@property (weak, nonatomic) IBOutlet UIButton *filterNoneButton;
+@property (weak, nonatomic) IBOutlet UILabel *noneLabel;
+
+@property (weak, nonatomic) IBOutlet UIImageView *nomalImage;
+@property (weak, nonatomic) IBOutlet UILabel *nomalTitle;
+
+@property (weak, nonatomic) IBOutlet UIImageView *beautyfulImg;
+@property (weak, nonatomic) IBOutlet UILabel *beautifulTitle;
+
+@property (weak, nonatomic) IBOutlet UIImageView *freshImage;
+@property (weak, nonatomic) IBOutlet UILabel *freshTitle;
+
+@property (weak, nonatomic) IBOutlet UIImageView *romanceImage;
+@property (weak, nonatomic) IBOutlet UILabel *romanceTitle;
+
 @end
 
 @implementation KSBeautySettingView
 
+- (void)awakeFromNib {
+    [super awakeFromNib];
+    if (@available(iOS 11.0, *)) {
+        _bottomView.layer.cornerRadius = 10;
+        _bottomView.layer.maskedCorners = kCALayerMinXMinYCorner | kCALayerMaxXMinYCorner; // 左上圆角
+    }
+    else {
+        UIBezierPath * path = [UIBezierPath bezierPathWithRoundedRect:_bottomView.bounds byRoundingCorners:UIRectCornerTopLeft | UIRectCornerTopRight cornerRadii:CGSizeMake(10, 10)];
+        CAShapeLayer *maskLayer = [[CAShapeLayer alloc] init];
+        maskLayer.frame = _bottomView.bounds;
+        maskLayer.path = path.CGPath;
+        _bottomView.layer.mask = maskLayer;
+    }
+    _bottomView.layer.masksToBounds = YES;
+    [self addTapGesture];
+}
+
+- (void)addTapGesture {
+    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(hideView)];
+    tap.delegate = self;
+    [self addGestureRecognizer:tap];
+}
+
+- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
+    if ([touch.view isDescendantOfView:self.bottomView] || [touch.view isDescendantOfView:self.sliderBgView]) {
+        return NO;
+    }
+    return YES;
+}
+
+- (void)hideView {
+    [self removeFromSuperview];
+}
+
+- (void)evaluateMessageWithBeauty:(BOOL)isOpenBeauty white:(NSInteger)whitenessLevel smoothLevel:(NSInteger)smoothLevel ruddyLevel:(NSInteger)ruddyLevel brightLevel:(NSInteger)brightLevel filter:(FILTER_TYPE)filter filterLevel:(int)filterLevel callback:(nonnull BeautyCallback)callback {
+    if (callback) {
+        self.callback = callback;
+    }
+
+    self.isOpenBeauty = isOpenBeauty;
+    self.filter = filter;
+    self.filterLevel = filterLevel;
+    if (isOpenBeauty) {
+        self.whitenessLevel = whitenessLevel;
+        self.smoothLevel = smoothLevel;
+        self.ruddyLevel = ruddyLevel;
+        self.brightLevel = brightLevel;
+    }
+    else {
+        self.whitenessLevel = 0;
+        self.smoothLevel = 0;
+        self.ruddyLevel = 0;
+        self.brightLevel = 5;
+    }
+    [self showDefaultDisplay];
+}
+
+
+- (void)showDefaultDisplay {
+    self.isChooseBeauty = YES;
+    self.chooseIndex = BEAUTY_INDEX_NONE;
+}
+
++ (instancetype)shareInstance {
+    KSBeautySettingView *view = [[[NSBundle mainBundle] loadNibNamed:@"KSBeautySettingView" owner:nil options:nil] firstObject];
+    return view;
+}
+
+// 重置美颜和滤镜
+- (IBAction)resetButtonAction:(id)sender {
+    
+    
+}
+
+
+- (IBAction)switchButtonAction:(UIButton *)sender {
+    self.isOpenBeauty = !self.isOpenBeauty;
+    if (self.callback) {
+        self.callback(self.isOpenBeauty, 0, 0, 0, 5, self.filter,self.filterLevel);
+    }
+}
 
 - (IBAction)sliderAction:(UISlider *)sender {
+    self.valueLabel.text = [NSString stringWithFormat:@"%.0f",sender.value];
+    // 回调数据
+    
 }
 
+
+- (void)setIsOpenBeauty:(BOOL)isOpenBeauty {
+    _isOpenBeauty = isOpenBeauty;
+    if (isOpenBeauty) {
+        [self.whiteImage setImage:[UIImage imageNamed:@"white_unselect"]];
+        [self.smoothImage setImage:[UIImage imageNamed:@"smooth_unselected"]];
+        [self.ruddyImage setImage:[UIImage imageNamed:@"ruddy_unselect"]];
+        [self.lightImage setImage:[UIImage imageNamed:@"light_unselect"]];
+        [self.beautySwitchButton setImage:[UIImage imageNamed:@"beauty_on"] forState:UIControlStateNormal];
+    }
+    else {
+        
+        [self.whiteImage setImage:[UIImage imageNamed:@"white_alpha"]];
+        [self.smoothImage setImage:[UIImage imageNamed:@"smooth_alpha"]];
+        [self.ruddyImage setImage:[UIImage imageNamed:@"ruddy_alpha"]];
+        [self.lightImage setImage:[UIImage imageNamed:@"light_alpha"]];
+        [self.beautySwitchButton setImage:[UIImage imageNamed:@"beauty_close"] forState:UIControlStateNormal];
+    }
+    [self resetTitleColor];
+}
+- (void)resetTitleColor {
+    [self.whiteTitle setTextColor:HexRGB(0xffffff)];
+    [self.smoothTitle setTextColor:HexRGB(0xffffff)];
+    [self.ruddyTitle setTextColor:HexRGB(0xffffff)];
+    [self.lightLabel setTextColor:HexRGB(0xffffff)];
+}
+
+- (void)setIsChooseBeauty:(BOOL)isChooseBeauty {
+    _isChooseBeauty = isChooseBeauty;
+//    [self clearLastChooseStatus:self.chooseIndex];
+//    self.chooseIndex = BEAUTY_INDEX_NONE;
+//    self.slider.hidden = YES;
+    // 判断是否有选中的
+    
+    if (_isChooseBeauty) {
+        self.beautyView.hidden = NO;
+        self.filterView.hidden = YES;
+        self.leftSpace.constant = 22.0f;
+        [self.beautyTitle setFont:[UIFont systemFontOfSize:16.0f weight:UIFontWeightMedium]];
+        [self.beautyTitle setTextColor:HexRGB(0xffffff)];
+        [self.filterTitle setFont:[UIFont systemFontOfSize:16.0f]];
+        [self.filterTitle setTextColor:HexRGBAlpha(0xffffff, 0.5f)];
+    }
+    else {
+        self.beautyView.hidden = YES;
+        self.filterView.hidden = NO;
+        self.leftSpace.constant = 92.0f;
+        [self.beautyTitle setFont:[UIFont systemFontOfSize:16.0f]];
+        [self.beautyTitle setTextColor:HexRGBAlpha(0xffffff, 0.5f)];
+        [self.filterTitle setFont:[UIFont systemFontOfSize:16.0f weight:UIFontWeightMedium]];
+        [self.filterTitle setTextColor:HexRGB(0xffffff)];
+    }
+}
+
+#pragma mark ---- page Control
+- (IBAction)switchBeautyPage:(id)sender {
+    if (self.isChooseBeauty) {
+        return;
+    }
+    self.isChooseBeauty = YES;
+}
+- (IBAction)switchFilter:(id)sender {
+    if (self.isChooseBeauty == NO) {
+        return;
+    }
+    self.isChooseBeauty = NO;
+}
+
+#pragma mark ---- beauty Action
+
+- (IBAction)whiteAction:(id)sender {
+    if (self.isOpenBeauty == NO) {
+        return;
+    }
+    if (self.chooseIndex == BEAUTY_INDEX_WHITE) {
+        return;
+    }
+    [self showSliderBarWithValue:self.whitenessLevel maxValue:9];
+    // 剔除上次选中状态
+    [self clearLastChooseStatus:self.chooseIndex];
+    [self.whiteImage setImage:[UIImage imageNamed:@"white_selected"]];
+    [self.whiteTitle setTextColor:THEMECOLOR];
+    self.chooseIndex = BEAUTY_INDEX_WHITE;
+}
+
+- (void)showSliderBarWithValue:(NSInteger)value maxValue:(NSInteger)maxValue {
+    self.slider.hidden = NO;
+    self.slider.maximumValue = maxValue;
+    self.slider.value = value;
+}
+
+- (IBAction)smoothAction:(id)sender {
+    if (self.isOpenBeauty == NO) {
+        return;
+    }
+    if (self.chooseIndex == BEAUTY_INDEX_SMOOTH) {
+        return;
+    }
+    [self showSliderBarWithValue:self.smoothLevel maxValue:9];
+    // 剔除上次选中状态
+    [self clearLastChooseStatus:self.chooseIndex];
+    [self.smoothImage setImage:[UIImage imageNamed:@"smooth_selected"]];
+    [self.smoothTitle setTextColor:THEMECOLOR];
+    self.chooseIndex = BEAUTY_INDEX_SMOOTH;
+}
+
+- (IBAction)ruddyAction:(id)sender {
+    if (self.isOpenBeauty == NO) {
+        return;
+    }
+    if (self.chooseIndex == BEAUTY_INDEX_RUDDY) {
+        return;
+    }
+    [self showSliderBarWithValue:self.ruddyLevel maxValue:9];
+    // 剔除上次选中状态
+    [self clearLastChooseStatus:self.chooseIndex];
+    [self.ruddyImage setImage:[UIImage imageNamed:@"ruddy_selected"]];
+    [self.ruddyTitle setTextColor:THEMECOLOR];
+    self.chooseIndex = BEAUTY_INDEX_RUDDY;
+}
+
+- (IBAction)lightAction:(id)sender {
+    if (self.isOpenBeauty == NO) {
+        return;
+    }
+    if (self.chooseIndex == BEAUTY_INDEX_LIGHT) {
+        return;
+    }
+    // 剔除上次选中状态
+    [self showSliderBarWithValue:self.brightLevel maxValue:9];
+    [self clearLastChooseStatus:self.chooseIndex];
+    [self.lightImage setImage:[UIImage imageNamed:@"light_selected"]];
+    [self.lightLabel setTextColor:THEMECOLOR];
+    self.chooseIndex = BEAUTY_INDEX_LIGHT;
+}
+
+- (void)clearLastChooseStatus:(BEAUTY_INDEX)lastIndex {
+    switch (lastIndex) {
+        case BEAUTY_INDEX_WHITE:
+        {
+            [self.whiteImage setImage:[UIImage imageNamed:@"white_unselect"]];
+            [self.whiteTitle setTextColor:HexRGB(0xffffff)];
+        }
+            break;
+        case BEAUTY_INDEX_SMOOTH:
+        {
+            [self.smoothImage setImage:[UIImage imageNamed:@"smooth_unselected"]];
+            [self.smoothTitle setTextColor:HexRGB(0xffffff)];
+        }
+            break;
+        case BEAUTY_INDEX_RUDDY:
+        {
+            [self.ruddyImage setImage:[UIImage imageNamed:@"ruddy_unselect"]];
+            [self.ruddyTitle setTextColor:HexRGB(0xffffff)];
+        }
+            break;
+        case BEAUTY_INDEX_LIGHT:
+        {
+            [self.lightImage setImage:[UIImage imageNamed:@"light_unselect"]];
+            [self.lightLabel setTextColor:HexRGB(0xffffff)];
+        }
+            break;
+        default:
+            break;
+    }
+}
+
+
+#pragma mark ---- fliter action
+
+- (IBAction)chooseNone:(id)sender {
+    if (self.filter == FILTER_TYPE_NONE) {
+        return;
+    }
+    [self clearFilterStatus];
+    self.filter = FILTER_TYPE_NONE;
+}
+
+- (IBAction)nomalAction:(id)sender {
+    if (self.filter == FILTER_TYPE_NOMAL) {
+        return;
+    }
+    // 清除上次选中状态
+    [self clearFilterStatus];
+    self.filter = FILTER_TYPE_NOMAL;
+}
+
+- (IBAction)beautifulFilter:(id)sender {
+    if (self.filter == FILTER_TYPE_WEIMEI) {
+        return;
+    }
+    [self clearFilterStatus];
+    self.filter = FILTER_TYPE_WEIMEI;
+}
+
+- (IBAction)freshFilter:(id)sender {
+    if (self.filter == FILTER_TYPE_QINGXIN) {
+        return;
+    }
+    [self clearFilterStatus];
+    self.filter = FILTER_TYPE_QINGXIN;
+}
+
+- (IBAction)romanceFilter:(id)sender {
+    if (self.filter == FILTER_TYPE_LANGMAN) {
+        return;
+    }
+    [self clearFilterStatus];
+    self.filter = FILTER_TYPE_LANGMAN;
+}
+
+
+- (void)clearFilterStatus {
+    switch (self.filter) {
+        case FILTER_TYPE_NONE:
+        {
+            [self.filterNoneButton setImage:[UIImage imageNamed:@"filterNone_unSelect"] forState:UIControlStateNormal];
+            [self.noneLabel setTextColor:HexRGB(0xffffff)];
+        }
+            break;
+        case FILTER_TYPE_NOMAL:
+        {
+            [self.nomalImage setImage:[UIImage imageNamed:@"filter_nomal"]];
+            [self.nomalTitle setTextColor:HexRGB(0xffffff)];
+        }
+            break;
+        case FILTER_TYPE_WEIMEI:
+        {
+            [self.beautyfulImg setImage:[UIImage imageNamed:@"filter_nomal"]];
+            [self.beautyTitle setTextColor:HexRGB(0xffffff)];
+        }
+            break;
+        case FILTER_TYPE_QINGXIN:
+        {
+            [self.freshImage setImage:[UIImage imageNamed:@"filter_nomal"]];
+            [self.freshTitle setTextColor:HexRGB(0xffffff)];
+        }
+            break;
+        case FILTER_TYPE_LANGMAN:
+        {
+            [self.romanceImage setImage:[UIImage imageNamed:@"filter_nomal"]];
+            [self.romanceTitle setTextColor:HexRGB(0xffffff)];
+        }
+            break;
+        default:
+            break;
+    }
+}
+
+- (void)setFilter:(FILTER_TYPE)filter {
+    _filter = filter;
+    switch (filter) {
+        case FILTER_TYPE_NONE:
+        {
+            [self.filterNoneButton setImage:[UIImage imageNamed:@"filter_none_selected"] forState:UIControlStateNormal];
+            [self.nomalTitle setTextColor:THEMECOLOR];
+        }
+            break;
+        case FILTER_TYPE_NOMAL:
+        {
+            [self.nomalImage setImage:[UIImage imageNamed:@"filter_selected"]];
+            [self.nomalTitle setTextColor:THEMECOLOR];
+        }
+            break;
+        case FILTER_TYPE_WEIMEI:
+        {
+            [self.beautyfulImg setImage:[UIImage imageNamed:@"filter_selected"]];
+            [self.beautyTitle setTextColor:THEMECOLOR];
+        }
+            break;
+        case FILTER_TYPE_QINGXIN:
+        {
+            [self.freshImage setImage:[UIImage imageNamed:@"filter_selected"]];
+            [self.freshTitle setTextColor:THEMECOLOR];
+        }
+            break;
+        case FILTER_TYPE_LANGMAN:
+        {
+            [self.romanceImage setImage:[UIImage imageNamed:@"filter_selected"]];
+            [self.romanceTitle setTextColor:THEMECOLOR];
+        }
+            break;
+        default:
+            break;
+    }
+    if (self.callback) {
+        self.callback(self.isOpenBeauty, self.whitenessLevel, self.smoothLevel, self.ruddyLevel, self.brightLevel, self.filter, self.filterLevel);
+    }
+}
+
+
 /*
 // Only override drawRect: if you perform custom drawing.
 // An empty implementation adversely affects performance during animation.

+ 385 - 21
KulexiuForTeacher/KulexiuForTeacher/Module/Live/View/KSBeautySettingView.xib

@@ -1,9 +1,9 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="19529" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES">
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="20037" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES">
     <device id="retina6_1" orientation="portrait" appearance="light"/>
     <dependencies>
         <deployment identifier="iOS"/>
-        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="19519"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="20020"/>
         <capability name="System colors in document resources" minToolsVersion="11.0"/>
         <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
     </dependencies>
@@ -38,6 +38,13 @@
                                     <color key="textColor" white="1" alpha="0.5" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
                                     <nil key="highlightedColor"/>
                                 </label>
+                                <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="lAH-Iv-sDl">
+                                    <rect key="frame" x="70" y="0.0" width="70" height="50"/>
+                                    <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
+                                    <connections>
+                                        <action selector="switchFilter:" destination="iN0-l3-epB" eventType="touchUpInside" id="Q3o-Zt-q71"/>
+                                    </connections>
+                                </button>
                                 <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="lk1-Lb-0ZY">
                                     <rect key="frame" x="22" y="41" width="26" height="4"/>
                                     <color key="backgroundColor" systemColor="systemBackgroundColor"/>
@@ -51,19 +58,34 @@
                                         </userDefinedRuntimeAttribute>
                                     </userDefinedRuntimeAttributes>
                                 </view>
+                                <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="OCb-2i-KaA">
+                                    <rect key="frame" x="0.0" y="0.0" width="70" height="50"/>
+                                    <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
+                                    <connections>
+                                        <action selector="switchBeautyPage:" destination="iN0-l3-epB" eventType="touchUpInside" id="4q7-F4-8C3"/>
+                                    </connections>
+                                </button>
                             </subviews>
                             <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
                             <constraints>
+                                <constraint firstItem="OCb-2i-KaA" firstAttribute="leading" secondItem="UnO-1q-WSM" secondAttribute="leading" id="27t-yl-Mt9"/>
+                                <constraint firstItem="lAH-Iv-sDl" firstAttribute="leading" secondItem="FzD-oX-5MY" secondAttribute="trailing" id="2LO-ci-YLN"/>
+                                <constraint firstItem="lAH-Iv-sDl" firstAttribute="top" secondItem="UnO-1q-WSM" secondAttribute="top" id="5ni-rY-VYG"/>
                                 <constraint firstItem="E8U-19-un4" firstAttribute="leading" secondItem="FzD-oX-5MY" secondAttribute="trailing" id="7RU-Ee-KKw"/>
                                 <constraint firstAttribute="height" constant="50" id="9B9-id-j1R"/>
                                 <constraint firstAttribute="bottom" secondItem="lk1-Lb-0ZY" secondAttribute="bottom" constant="5" id="9fh-Ca-HKZ"/>
                                 <constraint firstItem="FzD-oX-5MY" firstAttribute="trailing" secondItem="UnO-1q-WSM" secondAttribute="centerX" id="A9b-aW-Pkz"/>
+                                <constraint firstAttribute="bottom" secondItem="lAH-Iv-sDl" secondAttribute="bottom" id="ATF-w9-goC"/>
                                 <constraint firstItem="lk1-Lb-0ZY" firstAttribute="leading" secondItem="UnO-1q-WSM" secondAttribute="leading" constant="22" id="BIX-iO-Xwt"/>
+                                <constraint firstItem="OCb-2i-KaA" firstAttribute="top" secondItem="UnO-1q-WSM" secondAttribute="top" id="EhB-01-nGf"/>
+                                <constraint firstAttribute="bottom" secondItem="OCb-2i-KaA" secondAttribute="bottom" id="Ka2-kx-1nm"/>
                                 <constraint firstItem="E8U-19-un4" firstAttribute="top" secondItem="UnO-1q-WSM" secondAttribute="top" constant="16" id="Kqn-uU-67V"/>
                                 <constraint firstAttribute="trailing" secondItem="E8U-19-un4" secondAttribute="trailing" id="Xbt-ft-Zcc"/>
                                 <constraint firstItem="FzD-oX-5MY" firstAttribute="leading" secondItem="UnO-1q-WSM" secondAttribute="leading" id="YeB-pK-bA4"/>
+                                <constraint firstItem="E8U-19-un4" firstAttribute="leading" secondItem="OCb-2i-KaA" secondAttribute="trailing" id="hAm-ZJ-ids"/>
                                 <constraint firstAttribute="width" constant="140" id="ht1-cl-0DB"/>
                                 <constraint firstItem="FzD-oX-5MY" firstAttribute="top" secondItem="UnO-1q-WSM" secondAttribute="top" constant="16" id="oKY-Qv-eBQ"/>
+                                <constraint firstAttribute="trailing" secondItem="lAH-Iv-sDl" secondAttribute="trailing" id="zQu-VM-QJw"/>
                             </constraints>
                         </view>
                         <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="beauty_reset" translatesAutoresizingMaskIntoConstraints="NO" id="KUS-HK-nhq">
@@ -84,8 +106,11 @@
                                 <constraint firstAttribute="height" constant="40" id="pu8-U0-a3g"/>
                             </constraints>
                             <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
+                            <connections>
+                                <action selector="resetButtonAction:" destination="iN0-l3-epB" eventType="touchUpInside" id="rP4-5L-Vir"/>
+                            </connections>
                         </button>
-                        <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="WYa-RN-BOA">
+                        <view hidden="YES" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="WYa-RN-BOA">
                             <rect key="frame" x="0.0" y="70" width="414" height="80"/>
                             <subviews>
                                 <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="t0Y-jA-23V">
@@ -108,6 +133,9 @@
                                             </constraints>
                                             <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
                                             <state key="normal" image="beauty_close"/>
+                                            <connections>
+                                                <action selector="switchButtonAction:" destination="iN0-l3-epB" eventType="touchUpInside" id="x3X-i8-JKy"/>
+                                            </connections>
                                         </button>
                                         <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="2iN-74-bIW">
                                             <rect key="frame" x="102.5" y="27" width="1" height="26"/>
@@ -150,25 +178,29 @@
                                                     <color key="textColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
                                                     <nil key="highlightedColor"/>
                                                 </label>
+                                                <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Hto-Yc-axd">
+                                                    <rect key="frame" x="15" y="0.0" width="48" height="48"/>
+                                                    <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
+                                                    <connections>
+                                                        <action selector="whiteAction:" destination="iN0-l3-epB" eventType="touchUpInside" id="s8y-LP-qaG"/>
+                                                    </connections>
+                                                </button>
                                             </subviews>
                                             <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
                                             <constraints>
                                                 <constraint firstItem="pqq-Nw-3Be" firstAttribute="top" secondItem="7iB-ge-HxG" secondAttribute="top" id="2BK-j0-u9N"/>
                                                 <constraint firstItem="pqq-Nw-3Be" firstAttribute="centerX" secondItem="7iB-ge-HxG" secondAttribute="centerX" id="QH5-el-a8u"/>
+                                                <constraint firstItem="Hto-Yc-axd" firstAttribute="bottom" secondItem="pqq-Nw-3Be" secondAttribute="bottom" id="ccO-dP-PvV"/>
                                                 <constraint firstAttribute="bottom" secondItem="YNB-wN-Duh" secondAttribute="bottom" constant="2" id="gnb-7o-UFM"/>
                                                 <constraint firstItem="YNB-wN-Duh" firstAttribute="centerX" secondItem="7iB-ge-HxG" secondAttribute="centerX" id="jbl-u7-ahL"/>
+                                                <constraint firstItem="Hto-Yc-axd" firstAttribute="leading" secondItem="pqq-Nw-3Be" secondAttribute="leading" id="r2S-h2-Pz5"/>
+                                                <constraint firstItem="Hto-Yc-axd" firstAttribute="top" secondItem="pqq-Nw-3Be" secondAttribute="top" id="vvE-AF-Oth"/>
+                                                <constraint firstItem="Hto-Yc-axd" firstAttribute="trailing" secondItem="pqq-Nw-3Be" secondAttribute="trailing" id="wf1-Vo-DzT"/>
                                             </constraints>
                                         </view>
                                         <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="2zj-r0-fwY">
                                             <rect key="frame" x="77.5" y="0.0" width="78" height="80"/>
                                             <subviews>
-                                                <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="smooth_unselected" translatesAutoresizingMaskIntoConstraints="NO" id="Rl9-Ar-Reo">
-                                                    <rect key="frame" x="15" y="0.0" width="48" height="48"/>
-                                                    <constraints>
-                                                        <constraint firstAttribute="width" constant="48" id="2q8-zM-s5d"/>
-                                                        <constraint firstAttribute="height" constant="48" id="rbq-m0-1pR"/>
-                                                    </constraints>
-                                                </imageView>
                                                 <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="磨皮" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="cBK-rH-pVe">
                                                     <rect key="frame" x="27.5" y="62" width="22.5" height="16"/>
                                                     <constraints>
@@ -178,12 +210,30 @@
                                                     <color key="textColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
                                                     <nil key="highlightedColor"/>
                                                 </label>
+                                                <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="smooth_unselected" translatesAutoresizingMaskIntoConstraints="NO" id="Rl9-Ar-Reo">
+                                                    <rect key="frame" x="15" y="0.0" width="48" height="48"/>
+                                                    <constraints>
+                                                        <constraint firstAttribute="width" constant="48" id="2q8-zM-s5d"/>
+                                                        <constraint firstAttribute="height" constant="48" id="rbq-m0-1pR"/>
+                                                    </constraints>
+                                                </imageView>
+                                                <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="OUS-0G-SQG">
+                                                    <rect key="frame" x="15" y="0.0" width="48" height="48"/>
+                                                    <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
+                                                    <connections>
+                                                        <action selector="smoothAction:" destination="iN0-l3-epB" eventType="touchUpInside" id="mLn-vq-29q"/>
+                                                    </connections>
+                                                </button>
                                             </subviews>
                                             <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
                                             <constraints>
                                                 <constraint firstAttribute="bottom" secondItem="cBK-rH-pVe" secondAttribute="bottom" constant="2" id="2ex-Qr-JRe"/>
+                                                <constraint firstItem="OUS-0G-SQG" firstAttribute="top" secondItem="Rl9-Ar-Reo" secondAttribute="top" id="5lu-sG-I1i"/>
+                                                <constraint firstItem="OUS-0G-SQG" firstAttribute="trailing" secondItem="Rl9-Ar-Reo" secondAttribute="trailing" id="9JG-kR-SGX"/>
                                                 <constraint firstItem="cBK-rH-pVe" firstAttribute="centerX" secondItem="2zj-r0-fwY" secondAttribute="centerX" id="AE6-Gt-Cqv"/>
+                                                <constraint firstItem="OUS-0G-SQG" firstAttribute="leading" secondItem="Rl9-Ar-Reo" secondAttribute="leading" id="Qxz-hz-SXe"/>
                                                 <constraint firstItem="Rl9-Ar-Reo" firstAttribute="centerX" secondItem="2zj-r0-fwY" secondAttribute="centerX" id="ZEm-f7-cvY"/>
+                                                <constraint firstItem="OUS-0G-SQG" firstAttribute="bottom" secondItem="Rl9-Ar-Reo" secondAttribute="bottom" id="dSt-6W-Q5j"/>
                                                 <constraint firstItem="Rl9-Ar-Reo" firstAttribute="top" secondItem="2zj-r0-fwY" secondAttribute="top" id="o75-eR-PaO"/>
                                             </constraints>
                                         </view>
@@ -197,6 +247,13 @@
                                                         <constraint firstAttribute="height" constant="48" id="nVJ-UP-x2u"/>
                                                     </constraints>
                                                 </imageView>
+                                                <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="5pE-tx-7w6">
+                                                    <rect key="frame" x="14.5" y="0.0" width="48" height="48"/>
+                                                    <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
+                                                    <connections>
+                                                        <action selector="ruddyAction:" destination="iN0-l3-epB" eventType="touchUpInside" id="6X9-9S-Cgz"/>
+                                                    </connections>
+                                                </button>
                                                 <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="红润" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="vA3-2g-fa1">
                                                     <rect key="frame" x="27.5" y="62" width="22.5" height="16"/>
                                                     <constraints>
@@ -209,7 +266,11 @@
                                             </subviews>
                                             <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
                                             <constraints>
+                                                <constraint firstItem="5pE-tx-7w6" firstAttribute="bottom" secondItem="tYC-6T-e9a" secondAttribute="bottom" id="SCa-SM-UhI"/>
+                                                <constraint firstItem="5pE-tx-7w6" firstAttribute="top" secondItem="tYC-6T-e9a" secondAttribute="top" id="Sh4-ni-CuR"/>
+                                                <constraint firstItem="5pE-tx-7w6" firstAttribute="trailing" secondItem="tYC-6T-e9a" secondAttribute="trailing" id="V2t-NC-57H"/>
                                                 <constraint firstAttribute="bottom" secondItem="vA3-2g-fa1" secondAttribute="bottom" constant="2" id="cpZ-ar-OYn"/>
+                                                <constraint firstItem="5pE-tx-7w6" firstAttribute="leading" secondItem="tYC-6T-e9a" secondAttribute="leading" id="eZA-v0-Akq"/>
                                                 <constraint firstItem="tYC-6T-e9a" firstAttribute="centerX" secondItem="v5t-Wp-Edk" secondAttribute="centerX" id="gup-zD-bpf"/>
                                                 <constraint firstItem="tYC-6T-e9a" firstAttribute="top" secondItem="v5t-Wp-Edk" secondAttribute="top" id="iFC-vk-Rcd"/>
                                                 <constraint firstItem="vA3-2g-fa1" firstAttribute="centerX" secondItem="v5t-Wp-Edk" secondAttribute="centerX" id="rRg-S7-Y0L"/>
@@ -225,6 +286,13 @@
                                                         <constraint firstAttribute="height" constant="48" id="NDC-kJ-fAa"/>
                                                     </constraints>
                                                 </imageView>
+                                                <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="tBa-W3-FkA">
+                                                    <rect key="frame" x="14.5" y="0.0" width="48" height="48"/>
+                                                    <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
+                                                    <connections>
+                                                        <action selector="lightAction:" destination="iN0-l3-epB" eventType="touchUpInside" id="twO-rg-WjP"/>
+                                                    </connections>
+                                                </button>
                                                 <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="亮度" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="snn-G3-zna">
                                                     <rect key="frame" x="27.5" y="62" width="22.5" height="16"/>
                                                     <constraints>
@@ -239,7 +307,11 @@
                                             <constraints>
                                                 <constraint firstAttribute="bottom" secondItem="snn-G3-zna" secondAttribute="bottom" constant="2" id="9vQ-s3-czT"/>
                                                 <constraint firstItem="ake-IX-Mjz" firstAttribute="centerX" secondItem="UO5-2A-i8s" secondAttribute="centerX" id="ERr-C6-hcI"/>
+                                                <constraint firstItem="tBa-W3-FkA" firstAttribute="leading" secondItem="ake-IX-Mjz" secondAttribute="leading" id="Nzg-Ea-tBK"/>
+                                                <constraint firstItem="tBa-W3-FkA" firstAttribute="bottom" secondItem="ake-IX-Mjz" secondAttribute="bottom" id="SCJ-D0-NkQ"/>
                                                 <constraint firstItem="ake-IX-Mjz" firstAttribute="top" secondItem="UO5-2A-i8s" secondAttribute="top" id="Seq-IH-wA8"/>
+                                                <constraint firstItem="tBa-W3-FkA" firstAttribute="top" secondItem="ake-IX-Mjz" secondAttribute="top" id="hEM-EP-PO3"/>
+                                                <constraint firstItem="tBa-W3-FkA" firstAttribute="trailing" secondItem="ake-IX-Mjz" secondAttribute="trailing" id="oES-ZB-4fN"/>
                                                 <constraint firstItem="snn-G3-zna" firstAttribute="centerX" secondItem="UO5-2A-i8s" secondAttribute="centerX" id="rRP-fX-TTg"/>
                                             </constraints>
                                         </view>
@@ -278,16 +350,260 @@
                                 <constraint firstAttribute="bottom" secondItem="Ybg-WT-4Cs" secondAttribute="bottom" id="xTI-kx-GOJ"/>
                             </constraints>
                         </view>
+                        <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="PTj-Ed-zUJ">
+                            <rect key="frame" x="0.0" y="70" width="414" height="80"/>
+                            <subviews>
+                                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="1N8-a0-WW4">
+                                    <rect key="frame" x="0.0" y="0.0" width="103.5" height="80"/>
+                                    <subviews>
+                                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="无" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="9x3-Uf-pnA">
+                                            <rect key="frame" x="46" y="62" width="11.5" height="16"/>
+                                            <constraints>
+                                                <constraint firstAttribute="height" constant="16" id="8tl-yY-HLd"/>
+                                            </constraints>
+                                            <fontDescription key="fontDescription" type="system" pointSize="11"/>
+                                            <color key="textColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                                            <nil key="highlightedColor"/>
+                                        </label>
+                                        <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="YAj-7D-uan">
+                                            <rect key="frame" x="28" y="0.0" width="48" height="48"/>
+                                            <constraints>
+                                                <constraint firstAttribute="height" constant="48" id="N1q-w7-5dm"/>
+                                                <constraint firstAttribute="width" constant="48" id="QvQ-VS-A2a"/>
+                                            </constraints>
+                                            <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
+                                            <state key="normal" image="filter_none"/>
+                                            <connections>
+                                                <action selector="chooseNone:" destination="iN0-l3-epB" eventType="touchUpInside" id="b0I-fx-sfI"/>
+                                            </connections>
+                                        </button>
+                                        <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="A2t-ra-1Zj">
+                                            <rect key="frame" x="102.5" y="27" width="1" height="26"/>
+                                            <color key="backgroundColor" white="1" alpha="0.5" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                                            <constraints>
+                                                <constraint firstAttribute="height" constant="26" id="BPc-6p-dkw"/>
+                                                <constraint firstAttribute="width" constant="1" id="Op9-c9-Mcq"/>
+                                            </constraints>
+                                        </view>
+                                    </subviews>
+                                    <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                                    <constraints>
+                                        <constraint firstItem="YAj-7D-uan" firstAttribute="top" secondItem="1N8-a0-WW4" secondAttribute="top" id="O0p-Ut-lxu"/>
+                                        <constraint firstItem="A2t-ra-1Zj" firstAttribute="centerY" secondItem="1N8-a0-WW4" secondAttribute="centerY" id="THv-kZ-795"/>
+                                        <constraint firstItem="9x3-Uf-pnA" firstAttribute="centerX" secondItem="1N8-a0-WW4" secondAttribute="centerX" id="Vep-Da-zMn"/>
+                                        <constraint firstAttribute="bottom" secondItem="9x3-Uf-pnA" secondAttribute="bottom" constant="2" id="gIy-Ce-ClM"/>
+                                        <constraint firstAttribute="trailing" secondItem="A2t-ra-1Zj" secondAttribute="trailing" id="hSA-Db-fT9"/>
+                                        <constraint firstItem="YAj-7D-uan" firstAttribute="centerX" secondItem="1N8-a0-WW4" secondAttribute="centerX" id="tZS-nV-ZqL"/>
+                                    </constraints>
+                                </view>
+                                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="hl3-Se-HDX">
+                                    <rect key="frame" x="103.5" y="0.0" width="310.5" height="80"/>
+                                    <subviews>
+                                        <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="KU3-8b-1J3">
+                                            <rect key="frame" x="0.0" y="0.0" width="77.5" height="80"/>
+                                            <subviews>
+                                                <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="filter_nomal" translatesAutoresizingMaskIntoConstraints="NO" id="lQ2-kl-BsL">
+                                                    <rect key="frame" x="15" y="0.0" width="48" height="48"/>
+                                                    <constraints>
+                                                        <constraint firstAttribute="width" constant="48" id="umJ-po-AB9"/>
+                                                        <constraint firstAttribute="height" constant="48" id="xOm-PL-GaU"/>
+                                                    </constraints>
+                                                </imageView>
+                                                <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="YgE-H8-plk">
+                                                    <rect key="frame" x="15" y="0.0" width="48" height="48"/>
+                                                    <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
+                                                    <connections>
+                                                        <action selector="nomalAction:" destination="iN0-l3-epB" eventType="touchUpInside" id="R6v-n5-308"/>
+                                                    </connections>
+                                                </button>
+                                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="正常" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="kJw-qo-bpn">
+                                                    <rect key="frame" x="27.5" y="62" width="22.5" height="16"/>
+                                                    <constraints>
+                                                        <constraint firstAttribute="height" constant="16" id="DAR-Yu-PR5"/>
+                                                    </constraints>
+                                                    <fontDescription key="fontDescription" type="system" pointSize="11"/>
+                                                    <color key="textColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                                                    <nil key="highlightedColor"/>
+                                                </label>
+                                            </subviews>
+                                            <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                                            <constraints>
+                                                <constraint firstItem="YgE-H8-plk" firstAttribute="leading" secondItem="lQ2-kl-BsL" secondAttribute="leading" id="8aO-mE-Slb"/>
+                                                <constraint firstAttribute="bottom" secondItem="kJw-qo-bpn" secondAttribute="bottom" constant="2" id="9he-oA-SZv"/>
+                                                <constraint firstItem="YgE-H8-plk" firstAttribute="bottom" secondItem="lQ2-kl-BsL" secondAttribute="bottom" id="ErF-HL-kZe"/>
+                                                <constraint firstItem="lQ2-kl-BsL" firstAttribute="centerX" secondItem="KU3-8b-1J3" secondAttribute="centerX" id="bRI-d6-oEp"/>
+                                                <constraint firstItem="kJw-qo-bpn" firstAttribute="centerX" secondItem="KU3-8b-1J3" secondAttribute="centerX" id="iOc-BI-6wr"/>
+                                                <constraint firstItem="YgE-H8-plk" firstAttribute="trailing" secondItem="lQ2-kl-BsL" secondAttribute="trailing" id="qh3-Ve-EUn"/>
+                                                <constraint firstItem="YgE-H8-plk" firstAttribute="top" secondItem="lQ2-kl-BsL" secondAttribute="top" id="rsR-WX-Mx5"/>
+                                                <constraint firstItem="lQ2-kl-BsL" firstAttribute="top" secondItem="KU3-8b-1J3" secondAttribute="top" id="sdl-T0-gsg"/>
+                                            </constraints>
+                                        </view>
+                                        <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Olc-Wa-je8">
+                                            <rect key="frame" x="77.5" y="0.0" width="78" height="80"/>
+                                            <subviews>
+                                                <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="filter_nomal" translatesAutoresizingMaskIntoConstraints="NO" id="5Uz-vA-T1r">
+                                                    <rect key="frame" x="15" y="0.0" width="48" height="48"/>
+                                                    <constraints>
+                                                        <constraint firstAttribute="height" constant="48" id="ZT1-va-shP"/>
+                                                        <constraint firstAttribute="width" constant="48" id="ZZA-3a-bkK"/>
+                                                    </constraints>
+                                                </imageView>
+                                                <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="1bK-BV-cx2">
+                                                    <rect key="frame" x="15" y="0.0" width="48" height="48"/>
+                                                    <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
+                                                    <connections>
+                                                        <action selector="beautifulFilter:" destination="iN0-l3-epB" eventType="touchUpInside" id="pWe-UM-GiV"/>
+                                                    </connections>
+                                                </button>
+                                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="唯美" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="S8s-I0-tSC">
+                                                    <rect key="frame" x="27.5" y="62" width="22.5" height="16"/>
+                                                    <constraints>
+                                                        <constraint firstAttribute="height" constant="16" id="4Br-0c-MHX"/>
+                                                    </constraints>
+                                                    <fontDescription key="fontDescription" type="system" pointSize="11"/>
+                                                    <color key="textColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                                                    <nil key="highlightedColor"/>
+                                                </label>
+                                            </subviews>
+                                            <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                                            <constraints>
+                                                <constraint firstItem="1bK-BV-cx2" firstAttribute="top" secondItem="5Uz-vA-T1r" secondAttribute="top" id="5NA-Kq-2hp"/>
+                                                <constraint firstItem="S8s-I0-tSC" firstAttribute="centerX" secondItem="Olc-Wa-je8" secondAttribute="centerX" id="6vI-lW-aCk"/>
+                                                <constraint firstItem="5Uz-vA-T1r" firstAttribute="top" secondItem="Olc-Wa-je8" secondAttribute="top" id="7Ni-KM-Y9m"/>
+                                                <constraint firstItem="1bK-BV-cx2" firstAttribute="bottom" secondItem="5Uz-vA-T1r" secondAttribute="bottom" id="Rhr-bA-mI1"/>
+                                                <constraint firstItem="5Uz-vA-T1r" firstAttribute="centerX" secondItem="Olc-Wa-je8" secondAttribute="centerX" id="SGZ-f8-emv"/>
+                                                <constraint firstItem="1bK-BV-cx2" firstAttribute="leading" secondItem="5Uz-vA-T1r" secondAttribute="leading" id="ZID-0u-vge"/>
+                                                <constraint firstAttribute="bottom" secondItem="S8s-I0-tSC" secondAttribute="bottom" constant="2" id="tdx-Jx-nB9"/>
+                                                <constraint firstItem="1bK-BV-cx2" firstAttribute="trailing" secondItem="5Uz-vA-T1r" secondAttribute="trailing" id="zma-JN-3WH"/>
+                                            </constraints>
+                                        </view>
+                                        <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="mGj-Tw-lMt">
+                                            <rect key="frame" x="155.5" y="0.0" width="77.5" height="80"/>
+                                            <subviews>
+                                                <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="filter_nomal" translatesAutoresizingMaskIntoConstraints="NO" id="20H-t7-qSf">
+                                                    <rect key="frame" x="14.5" y="0.0" width="48" height="48"/>
+                                                    <constraints>
+                                                        <constraint firstAttribute="height" constant="48" id="CdX-Aw-SN9"/>
+                                                        <constraint firstAttribute="width" constant="48" id="JXi-iX-CA6"/>
+                                                    </constraints>
+                                                </imageView>
+                                                <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="pdh-ud-bTE">
+                                                    <rect key="frame" x="14.5" y="0.0" width="48" height="48"/>
+                                                    <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
+                                                    <connections>
+                                                        <action selector="freshFilter:" destination="iN0-l3-epB" eventType="touchUpInside" id="Xnw-uK-M7i"/>
+                                                    </connections>
+                                                </button>
+                                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="清新" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="4Y4-Ad-CzM">
+                                                    <rect key="frame" x="27.5" y="62" width="22.5" height="16"/>
+                                                    <constraints>
+                                                        <constraint firstAttribute="height" constant="16" id="sb4-tU-H6b"/>
+                                                    </constraints>
+                                                    <fontDescription key="fontDescription" type="system" pointSize="11"/>
+                                                    <color key="textColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                                                    <nil key="highlightedColor"/>
+                                                </label>
+                                            </subviews>
+                                            <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                                            <constraints>
+                                                <constraint firstItem="pdh-ud-bTE" firstAttribute="leading" secondItem="20H-t7-qSf" secondAttribute="leading" id="3Fu-V3-Vwo"/>
+                                                <constraint firstItem="pdh-ud-bTE" firstAttribute="bottom" secondItem="20H-t7-qSf" secondAttribute="bottom" id="8Kb-m9-WT8"/>
+                                                <constraint firstItem="20H-t7-qSf" firstAttribute="centerX" secondItem="mGj-Tw-lMt" secondAttribute="centerX" id="Ba6-Xw-aiV"/>
+                                                <constraint firstItem="pdh-ud-bTE" firstAttribute="trailing" secondItem="20H-t7-qSf" secondAttribute="trailing" id="CE6-kR-ycG"/>
+                                                <constraint firstItem="20H-t7-qSf" firstAttribute="top" secondItem="mGj-Tw-lMt" secondAttribute="top" id="SJI-R5-li5"/>
+                                                <constraint firstItem="4Y4-Ad-CzM" firstAttribute="centerX" secondItem="mGj-Tw-lMt" secondAttribute="centerX" id="YgY-tx-2HS"/>
+                                                <constraint firstAttribute="bottom" secondItem="4Y4-Ad-CzM" secondAttribute="bottom" constant="2" id="bIM-l1-mg4"/>
+                                                <constraint firstItem="pdh-ud-bTE" firstAttribute="top" secondItem="20H-t7-qSf" secondAttribute="top" id="hBV-gA-x29"/>
+                                            </constraints>
+                                        </view>
+                                        <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="8SF-4D-mgk">
+                                            <rect key="frame" x="233" y="0.0" width="77.5" height="80"/>
+                                            <subviews>
+                                                <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="filter_nomal" translatesAutoresizingMaskIntoConstraints="NO" id="CJv-aL-jke">
+                                                    <rect key="frame" x="14.5" y="0.0" width="48" height="48"/>
+                                                    <constraints>
+                                                        <constraint firstAttribute="height" constant="48" id="AZZ-Qe-jTg"/>
+                                                        <constraint firstAttribute="width" constant="48" id="fS5-Uv-jbG"/>
+                                                    </constraints>
+                                                </imageView>
+                                                <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="cqs-nS-u45">
+                                                    <rect key="frame" x="14.5" y="0.0" width="48" height="48"/>
+                                                    <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
+                                                    <connections>
+                                                        <action selector="romanceFilter:" destination="iN0-l3-epB" eventType="touchUpInside" id="vUr-mW-G2J"/>
+                                                    </connections>
+                                                </button>
+                                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="浪漫" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="cVb-q0-hke">
+                                                    <rect key="frame" x="27.5" y="62" width="22.5" height="16"/>
+                                                    <constraints>
+                                                        <constraint firstAttribute="height" constant="16" id="cMT-zT-bVv"/>
+                                                    </constraints>
+                                                    <fontDescription key="fontDescription" type="system" pointSize="11"/>
+                                                    <color key="textColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                                                    <nil key="highlightedColor"/>
+                                                </label>
+                                            </subviews>
+                                            <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                                            <constraints>
+                                                <constraint firstItem="cqs-nS-u45" firstAttribute="bottom" secondItem="CJv-aL-jke" secondAttribute="bottom" id="17f-R9-Zmm"/>
+                                                <constraint firstAttribute="bottom" secondItem="cVb-q0-hke" secondAttribute="bottom" constant="2" id="8bZ-vR-64k"/>
+                                                <constraint firstItem="cqs-nS-u45" firstAttribute="trailing" secondItem="CJv-aL-jke" secondAttribute="trailing" id="CCe-oQ-Fwn"/>
+                                                <constraint firstItem="cVb-q0-hke" firstAttribute="centerX" secondItem="8SF-4D-mgk" secondAttribute="centerX" id="Gko-nm-B58"/>
+                                                <constraint firstItem="cqs-nS-u45" firstAttribute="top" secondItem="CJv-aL-jke" secondAttribute="top" id="OcP-ZA-eMB"/>
+                                                <constraint firstItem="CJv-aL-jke" firstAttribute="centerX" secondItem="8SF-4D-mgk" secondAttribute="centerX" id="iTb-S9-Mn7"/>
+                                                <constraint firstItem="cqs-nS-u45" firstAttribute="leading" secondItem="CJv-aL-jke" secondAttribute="leading" id="jqy-Gb-7YO"/>
+                                                <constraint firstItem="CJv-aL-jke" firstAttribute="top" secondItem="8SF-4D-mgk" secondAttribute="top" id="qAY-7X-lSZ"/>
+                                            </constraints>
+                                        </view>
+                                    </subviews>
+                                    <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                                    <constraints>
+                                        <constraint firstItem="Olc-Wa-je8" firstAttribute="leading" secondItem="KU3-8b-1J3" secondAttribute="trailing" id="3KN-od-Ixm"/>
+                                        <constraint firstItem="8SF-4D-mgk" firstAttribute="leading" secondItem="mGj-Tw-lMt" secondAttribute="trailing" id="3Tq-JI-t9c"/>
+                                        <constraint firstItem="KU3-8b-1J3" firstAttribute="top" secondItem="hl3-Se-HDX" secondAttribute="top" id="7cq-SW-PDo"/>
+                                        <constraint firstItem="8SF-4D-mgk" firstAttribute="width" secondItem="KU3-8b-1J3" secondAttribute="width" id="GUx-q9-JXL"/>
+                                        <constraint firstAttribute="bottom" secondItem="Olc-Wa-je8" secondAttribute="bottom" id="H12-GC-pTD"/>
+                                        <constraint firstItem="mGj-Tw-lMt" firstAttribute="leading" secondItem="Olc-Wa-je8" secondAttribute="trailing" id="NHr-vf-NUW"/>
+                                        <constraint firstItem="Olc-Wa-je8" firstAttribute="width" secondItem="KU3-8b-1J3" secondAttribute="width" id="OYz-qQ-Ta8"/>
+                                        <constraint firstAttribute="bottom" secondItem="8SF-4D-mgk" secondAttribute="bottom" id="P6x-DE-jqo"/>
+                                        <constraint firstAttribute="bottom" secondItem="mGj-Tw-lMt" secondAttribute="bottom" id="PGy-vY-dnN"/>
+                                        <constraint firstAttribute="bottom" secondItem="KU3-8b-1J3" secondAttribute="bottom" id="Pk8-H5-Bgq"/>
+                                        <constraint firstItem="Olc-Wa-je8" firstAttribute="top" secondItem="hl3-Se-HDX" secondAttribute="top" id="Sgj-jK-mrI"/>
+                                        <constraint firstItem="8SF-4D-mgk" firstAttribute="top" secondItem="hl3-Se-HDX" secondAttribute="top" id="Stg-Ai-0me"/>
+                                        <constraint firstItem="mGj-Tw-lMt" firstAttribute="top" secondItem="hl3-Se-HDX" secondAttribute="top" id="UlP-l5-oDc"/>
+                                        <constraint firstItem="mGj-Tw-lMt" firstAttribute="width" secondItem="KU3-8b-1J3" secondAttribute="width" id="gdf-Ee-rzr"/>
+                                        <constraint firstAttribute="trailing" secondItem="8SF-4D-mgk" secondAttribute="trailing" id="vmi-3D-ep9"/>
+                                        <constraint firstItem="KU3-8b-1J3" firstAttribute="leading" secondItem="hl3-Se-HDX" secondAttribute="leading" id="xwt-87-Dmb"/>
+                                    </constraints>
+                                </view>
+                            </subviews>
+                            <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                            <constraints>
+                                <constraint firstItem="1N8-a0-WW4" firstAttribute="top" secondItem="PTj-Ed-zUJ" secondAttribute="top" id="2uy-Tl-EMe"/>
+                                <constraint firstItem="1N8-a0-WW4" firstAttribute="trailing" secondItem="PTj-Ed-zUJ" secondAttribute="centerX" multiplier="0.5" id="QLK-iS-1y1"/>
+                                <constraint firstAttribute="bottom" secondItem="hl3-Se-HDX" secondAttribute="bottom" id="XoG-Ut-RwX"/>
+                                <constraint firstItem="hl3-Se-HDX" firstAttribute="leading" secondItem="1N8-a0-WW4" secondAttribute="trailing" id="YbH-Ss-5X9"/>
+                                <constraint firstAttribute="height" constant="80" id="Z0C-aY-HlD"/>
+                                <constraint firstAttribute="bottom" secondItem="1N8-a0-WW4" secondAttribute="bottom" id="dYf-Oh-aVd"/>
+                                <constraint firstItem="1N8-a0-WW4" firstAttribute="leading" secondItem="PTj-Ed-zUJ" secondAttribute="leading" id="g3u-SI-AKg"/>
+                                <constraint firstItem="hl3-Se-HDX" firstAttribute="top" secondItem="PTj-Ed-zUJ" secondAttribute="top" id="nQQ-6L-VUi"/>
+                                <constraint firstAttribute="trailing" secondItem="hl3-Se-HDX" secondAttribute="trailing" id="uEy-hq-f3E"/>
+                            </constraints>
+                        </view>
                     </subviews>
                     <color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.5" colorSpace="custom" customColorSpace="calibratedRGB"/>
                     <constraints>
+                        <constraint firstItem="PTj-Ed-zUJ" firstAttribute="leading" secondItem="WYa-RN-BOA" secondAttribute="leading" id="6An-fB-sf3"/>
+                        <constraint firstItem="PTj-Ed-zUJ" firstAttribute="top" secondItem="WYa-RN-BOA" secondAttribute="top" id="DYi-nD-Fke"/>
                         <constraint firstAttribute="height" constant="240" id="FNk-LO-b7x"/>
+                        <constraint firstItem="PTj-Ed-zUJ" firstAttribute="bottom" secondItem="WYa-RN-BOA" secondAttribute="bottom" id="Q5u-Jd-Ped"/>
                         <constraint firstItem="UnO-1q-WSM" firstAttribute="leading" secondItem="Vtz-4V-iot" secondAttribute="leading" constant="20" id="QBv-an-PIS"/>
                         <constraint firstItem="WzY-BW-1cJ" firstAttribute="centerY" secondItem="KUS-HK-nhq" secondAttribute="centerY" id="Qm9-YY-DKJ"/>
                         <constraint firstItem="cfX-FZ-IfP" firstAttribute="leading" secondItem="KUS-HK-nhq" secondAttribute="leading" id="YHi-LZ-ax3"/>
                         <constraint firstItem="WzY-BW-1cJ" firstAttribute="top" secondItem="Vtz-4V-iot" secondAttribute="top" constant="17" id="aPR-Zg-KtU"/>
                         <constraint firstItem="WzY-BW-1cJ" firstAttribute="trailing" secondItem="cfX-FZ-IfP" secondAttribute="trailing" id="eUb-gr-bXS"/>
                         <constraint firstAttribute="trailing" secondItem="WYa-RN-BOA" secondAttribute="trailing" id="goI-78-z6s"/>
+                        <constraint firstItem="PTj-Ed-zUJ" firstAttribute="trailing" secondItem="WYa-RN-BOA" secondAttribute="trailing" id="oAl-kG-1YO"/>
                         <constraint firstItem="WYa-RN-BOA" firstAttribute="top" secondItem="UnO-1q-WSM" secondAttribute="bottom" constant="20" id="qAc-e5-id6"/>
                         <constraint firstItem="KUS-HK-nhq" firstAttribute="centerY" secondItem="cfX-FZ-IfP" secondAttribute="centerY" id="uD4-is-Gc7"/>
                         <constraint firstAttribute="trailing" secondItem="WzY-BW-1cJ" secondAttribute="trailing" constant="20" id="v9X-XN-M6r"/>
@@ -296,29 +612,75 @@
                         <constraint firstItem="WzY-BW-1cJ" firstAttribute="leading" secondItem="KUS-HK-nhq" secondAttribute="trailing" constant="7" id="z8B-PF-Hmx"/>
                     </constraints>
                 </view>
-                <slider opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" value="50" minValue="0.0" maxValue="100" translatesAutoresizingMaskIntoConstraints="NO" id="4do-5b-7tz">
-                    <rect key="frame" x="18" y="612" width="378" height="31"/>
-                    <color key="tintColor" red="0.1764705882" green="0.78039215689999997" blue="0.66666666669999997" alpha="1" colorSpace="calibratedRGB"/>
-                    <connections>
-                        <action selector="sliderAction:" destination="iN0-l3-epB" eventType="valueChanged" id="7jw-tM-OMJ"/>
-                    </connections>
-                </slider>
+                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="C2a-bp-eof">
+                    <rect key="frame" x="0.0" y="592" width="414" height="50"/>
+                    <subviews>
+                        <slider opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" value="50" minValue="0.0" maxValue="100" translatesAutoresizingMaskIntoConstraints="NO" id="4do-5b-7tz">
+                            <rect key="frame" x="18" y="20" width="378" height="31"/>
+                            <color key="tintColor" red="0.1764705882" green="0.78039215689999997" blue="0.66666666669999997" alpha="1" colorSpace="calibratedRGB"/>
+                            <connections>
+                                <action selector="sliderAction:" destination="iN0-l3-epB" eventType="valueChanged" id="7jw-tM-OMJ"/>
+                            </connections>
+                        </slider>
+                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="10" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="edL-RD-oQw">
+                            <rect key="frame" x="198.5" y="0.0" width="17" height="20"/>
+                            <fontDescription key="fontDescription" type="system" pointSize="16"/>
+                            <color key="textColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                            <nil key="highlightedColor"/>
+                        </label>
+                    </subviews>
+                    <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                    <constraints>
+                        <constraint firstItem="4do-5b-7tz" firstAttribute="leading" secondItem="C2a-bp-eof" secondAttribute="leading" constant="20" id="ONt-k7-nuP"/>
+                        <constraint firstItem="edL-RD-oQw" firstAttribute="centerX" secondItem="C2a-bp-eof" secondAttribute="centerX" id="TKC-SJ-wQw"/>
+                        <constraint firstAttribute="height" constant="50" id="XnT-CF-pMa"/>
+                        <constraint firstAttribute="bottom" secondItem="4do-5b-7tz" secondAttribute="bottom" id="cvd-CM-HVU"/>
+                        <constraint firstAttribute="trailing" secondItem="4do-5b-7tz" secondAttribute="trailing" constant="20" id="ioJ-mT-Xgm"/>
+                        <constraint firstItem="edL-RD-oQw" firstAttribute="top" secondItem="C2a-bp-eof" secondAttribute="top" id="zIB-FK-2D2"/>
+                    </constraints>
+                </view>
             </subviews>
-            <color key="backgroundColor" red="0.58823529411764708" green="0.58823529411764708" blue="0.58823529411764708" alpha="1" colorSpace="calibratedRGB"/>
+            <color key="backgroundColor" red="0.58823529411764708" green="0.58823529411764708" blue="0.58823529411764708" alpha="1" colorSpace="custom" customColorSpace="calibratedRGB"/>
             <constraints>
-                <constraint firstItem="Vtz-4V-iot" firstAttribute="top" secondItem="4do-5b-7tz" secondAttribute="bottom" constant="14" id="8V4-fh-5fJ"/>
+                <constraint firstItem="C2a-bp-eof" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" id="606-Sh-1ZJ"/>
                 <constraint firstItem="Vtz-4V-iot" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" id="Dcz-nr-lNc"/>
-                <constraint firstItem="4do-5b-7tz" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" constant="20" id="FMa-Wn-NJ8"/>
-                <constraint firstAttribute="trailing" secondItem="4do-5b-7tz" secondAttribute="trailing" constant="20" id="JRM-KL-egW"/>
+                <constraint firstAttribute="trailing" secondItem="C2a-bp-eof" secondAttribute="trailing" id="G1h-tY-eXH"/>
                 <constraint firstAttribute="bottom" secondItem="Vtz-4V-iot" secondAttribute="bottom" id="eNO-S0-5Lf"/>
+                <constraint firstItem="Vtz-4V-iot" firstAttribute="top" secondItem="C2a-bp-eof" secondAttribute="bottom" constant="14" id="o5P-J3-nHf"/>
                 <constraint firstAttribute="trailing" secondItem="Vtz-4V-iot" secondAttribute="trailing" id="yIU-bk-u7v"/>
             </constraints>
             <nil key="simulatedTopBarMetrics"/>
             <nil key="simulatedBottomBarMetrics"/>
             <freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
             <connections>
+                <outlet property="beautifulTitle" destination="S8s-I0-tSC" id="lZk-Dj-zQa"/>
+                <outlet property="beautySwitchButton" destination="aez-Hv-K2d" id="pyu-68-WwD"/>
+                <outlet property="beautyTitle" destination="FzD-oX-5MY" id="Dj5-WA-h75"/>
                 <outlet property="beautyView" destination="WYa-RN-BOA" id="4JB-rm-vYQ"/>
+                <outlet property="beautyfulImg" destination="5Uz-vA-T1r" id="sk2-Jn-hLA"/>
+                <outlet property="bottomView" destination="Vtz-4V-iot" id="8YT-x7-y0M"/>
+                <outlet property="filterNoneButton" destination="YAj-7D-uan" id="aDE-HP-rU2"/>
+                <outlet property="filterTitle" destination="E8U-19-un4" id="x58-hS-CQq"/>
+                <outlet property="filterView" destination="PTj-Ed-zUJ" id="15H-X5-6Gf"/>
+                <outlet property="freshImage" destination="20H-t7-qSf" id="6M1-pO-jyR"/>
+                <outlet property="freshTitle" destination="4Y4-Ad-CzM" id="jci-4x-pKK"/>
+                <outlet property="leftSpace" destination="BIX-iO-Xwt" id="p3S-y6-KVs"/>
+                <outlet property="lightImage" destination="ake-IX-Mjz" id="d20-dO-4Q7"/>
+                <outlet property="lightLabel" destination="snn-G3-zna" id="8oL-T8-XEv"/>
+                <outlet property="nomalImage" destination="lQ2-kl-BsL" id="Y27-YB-b8T"/>
+                <outlet property="nomalTitle" destination="kJw-qo-bpn" id="osV-II-k01"/>
+                <outlet property="noneLabel" destination="9x3-Uf-pnA" id="NZJ-7s-ISH"/>
+                <outlet property="romanceImage" destination="CJv-aL-jke" id="6QD-J6-Kkb"/>
+                <outlet property="romanceTitle" destination="cVb-q0-hke" id="BmK-gc-PUw"/>
+                <outlet property="ruddyImage" destination="tYC-6T-e9a" id="W8V-gt-yGD"/>
+                <outlet property="ruddyTitle" destination="vA3-2g-fa1" id="rnf-p1-IWL"/>
                 <outlet property="slider" destination="4do-5b-7tz" id="SHD-Eb-8en"/>
+                <outlet property="sliderBgView" destination="C2a-bp-eof" id="xST-rX-uNf"/>
+                <outlet property="smoothImage" destination="Rl9-Ar-Reo" id="uhG-3D-qxS"/>
+                <outlet property="smoothTitle" destination="cBK-rH-pVe" id="vlc-2a-nx6"/>
+                <outlet property="valueLabel" destination="edL-RD-oQw" id="gXE-Pb-l58"/>
+                <outlet property="whiteImage" destination="pqq-Nw-3Be" id="csu-Bv-1a0"/>
+                <outlet property="whiteTitle" destination="YNB-wN-Duh" id="ywX-vx-jyw"/>
             </connections>
             <point key="canvasLocation" x="131.8840579710145" y="72.991071428571431"/>
         </view>
@@ -326,6 +688,8 @@
     <resources>
         <image name="beauty_close" width="32" height="19"/>
         <image name="beauty_reset" width="18" height="18"/>
+        <image name="filter_nomal" width="46" height="46"/>
+        <image name="filter_none" width="48" height="48"/>
         <image name="light_unselect" width="46" height="46"/>
         <image name="ruddy_unselect" width="46" height="46"/>
         <image name="smooth_unselected" width="46" height="46"/>

+ 8 - 48
KulexiuForTeacher/KulexiuForTeacher/Module/Live/View/KSChatroomTextCell.m

@@ -8,7 +8,7 @@
 
 #import "KSChatroomTextCell.h"
 #import <RongIMLib/RongIMLib.h>
-#import "RCChatroomMessageCenter.h"
+#import "KSChatroomMessageCenter.h"
 
 @interface KSChatroomTextCell ()
 
@@ -71,7 +71,7 @@
         headString = @" ";
     }
     
-    if ([model.content isMemberOfClass:[RCChatroomWelcome class]]) {
+    if ([model.content isMemberOfClass:[KSLiveChatroomWelcome class]]) {
         RCUserInfo *userInfo = model.userInfo;
         NSString *userName = [userInfo.name stringByAppendingString:@""];
         NSString *localizedMessage = @"进入直播间";
@@ -85,36 +85,8 @@
         [self.contentLabel setAttributedText:attributedString.copy];
         return;
     }
-    else if ([model.content isMemberOfClass:[RCChatroomSeatsControl class]]) { // 连麦控制消息
-        RCChatroomSeatsControl *seatControlMessage = (RCChatroomSeatsControl *)model.content;
-        NSString *userName = [seatControlMessage.userName stringByAppendingString:@""];
-        
-        NSString *localizedMessage = seatControlMessage.seatBan ? @"关闭连麦" : @"开启连麦";
-        NSString *str =[NSString stringWithFormat:@"%@%@%@",headString,userName,localizedMessage];
-        NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:str];
-        [attributedString addAttribute:NSForegroundColorAttributeName value:(HexRGB(0x00d6c9)) range:[str rangeOfString:userName]];
-        [attributedString addAttribute:NSForegroundColorAttributeName value:(HexRGB(0xffffff)) range:[str rangeOfString:localizedMessage]];
-        if (isCreator) {
-            [self addAttachmentImg:attributedString imgName:creatorImg];
-        }
-        [self.contentLabel setAttributedText:attributedString.copy];
-    }
-    else if ([model.content isMemberOfClass:[RCChatroomChatBan class]]) { // 禁言消息
-        RCChatroomChatBan *chatBanMsg = (RCChatroomChatBan *)model.content;
-        NSString *userName = [chatBanMsg.userName stringByAppendingString:@""];
-        
-        NSString *localizedMessage = chatBanMsg.chatBan ? @"关闭聊天" : @"开启聊天";
-        NSString *str =[NSString stringWithFormat:@"%@%@%@",headString,userName,localizedMessage];
-        NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:str];
-        [attributedString addAttribute:NSForegroundColorAttributeName value:(HexRGB(0x00d6c9)) range:[str rangeOfString:userName]];
-        [attributedString addAttribute:NSForegroundColorAttributeName value:(HexRGB(0xffffff)) range:[str rangeOfString:localizedMessage]];
-        if (isCreator) {
-            [self addAttachmentImg:attributedString imgName:creatorImg];
-        }
-        [self.contentLabel setAttributedText:attributedString.copy];
-    }
-    else if ([model.content isMemberOfClass:[RCChatroomSeatApply class]]) {
-        RCChatroomSeatApply *seatApply = (RCChatroomSeatApply *)model.content;
+    else if ([model.content isMemberOfClass:[KSLiveChatroomSeatApply class]]) {
+        KSLiveChatroomSeatApply *seatApply = (KSLiveChatroomSeatApply *)model.content;
         NSString *userName = @"";
         NSString *localizedMessage = @"";
         if (seatApply.type == SEATHANDLE_INVITE) {
@@ -147,8 +119,8 @@
         }
         [self.contentLabel setAttributedText:attributedString.copy];
     }
-    else if ([model.content isMemberOfClass:[RCChatroomSeatResponse class]]) {
-        RCChatroomSeatResponse *seatResponse = (RCChatroomSeatResponse *)model.content;
+    else if ([model.content isMemberOfClass:[KSLiveChatroomSeatResponse class]]) {
+        KSLiveChatroomSeatResponse *seatResponse = (KSLiveChatroomSeatResponse *)model.content;
         NSString *userName = @"";
         NSString *localizedMessage = @"";
         if (seatResponse.type == SEATRESPONSE_TEACHERAPPROVE) {
@@ -176,20 +148,8 @@
         }
         [self.contentLabel setAttributedText:attributedString.copy];
     }
-    
-    else if ([model.content isMemberOfClass:[RCChatroomFollow class]]) {
-        RCUserInfo *userInfo = model.userInfo;
-        NSString *userName = [userInfo.name stringByAppendingString:@":"];
-        NSString *localizedMessage = @"关注了主讲人";
-        NSString *str =[NSString stringWithFormat:@"%@%@",userName,localizedMessage];
-        NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:str];
-        [attributedString addAttribute:NSForegroundColorAttributeName value:(HexRGB(0x00d6c9)) range:[str rangeOfString:userName]];
-        [attributedString addAttribute:NSForegroundColorAttributeName value:(HexRGB(0xffffff)) range:[str rangeOfString:localizedMessage]];
-        [self.contentLabel setAttributedText:attributedString.copy];
-        return;
-    }
-    else if ([model.content isMemberOfClass:[RCChatroomLike class]]) {
-        RCChatroomLike *likeMessage = (RCChatroomLike *)model.content;
+    else if ([model.content isMemberOfClass:[KSLiveChatroomLike class]]) {
+        KSLiveChatroomLike *likeMessage = (KSLiveChatroomLike *)model.content;
         RCUserInfo *userInfo = model.userInfo;
         NSString *userName = [userInfo.name stringByAppendingString:@""];
         NSString *localizedMessage = [NSString stringWithFormat:@"给主讲人点了%d个赞",likeMessage.counts];

+ 12 - 8
KulexiuForTeacher/KulexiuForTeacher/Module/Live/View/LiveRoomHeadView.xib

@@ -1,18 +1,22 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="13142" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="20037" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES">
+    <device id="retina6_1" orientation="portrait" appearance="light"/>
     <dependencies>
-        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="12042"/>
-        <capability name="Safe area layout guides" minToolsVersion="9.0"/>
+        <deployment identifier="iOS"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="20020"/>
         <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
     </dependencies>
     <objects>
         <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
         <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
-        <view contentMode="scaleToFill" id="iN0-l3-epB">
-            <rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
+        <view contentMode="scaleToFill" id="iN0-l3-epB" customClass="LiveRoomHeadView">
+            <rect key="frame" x="0.0" y="0.0" width="414" height="129"/>
             <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
-            <color key="backgroundColor" systemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/>
-            <viewLayoutGuide key="safeArea" id="vUN-kp-3ea"/>
+            <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+            <nil key="simulatedTopBarMetrics"/>
+            <nil key="simulatedBottomBarMetrics"/>
+            <freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
+            <point key="canvasLocation" x="131.8840579710145" y="29.799107142857142"/>
         </view>
     </objects>
 </document>

+ 18 - 12
KulexiuForTeacher/KulexiuForTeacher/Module/Live/View/SeatContentView.m

@@ -98,17 +98,17 @@
 }
 
 - (void)queryUserInfoWithUserId:(NSString *)userId {
-    [KSRequestManager queryFriendDetailRequest:KS_GET userId:userId success:^(NSDictionary * _Nonnull dic) {
-        if ([dic integerValueForKey:@"code"] == 200 && [dic boolValueForKey:@"status"]) {
-            NSDictionary *result = [dic dictionaryValueForKey:@"data"];
-            self.nameLabel.text = [result stringValueForKey:@"friendNickname"];
-        }
-        else {
-            self.nameLabel.text = @"连麦用户";
-        }
-    } faliure:^(NSError * _Nonnull error) {
-        self.nameLabel.text = @"连麦用户";
-    }];
+//    [KSRequestManager queryFriendDetailRequest:KS_GET userId:userId success:^(NSDictionary * _Nonnull dic) {
+//        if ([dic integerValueForKey:@"code"] == 200 && [dic boolValueForKey:@"status"]) {
+//            NSDictionary *result = [dic dictionaryValueForKey:@"data"];
+//            self.nameLabel.text = [result stringValueForKey:@"friendNickname"];
+//        }
+//        else {
+//            self.nameLabel.text = @"连麦用户";
+//        }
+//    } faliure:^(NSError * _Nonnull error) {
+//        self.nameLabel.text = @"连麦用户";
+//    }];
 }
 
 @end
@@ -124,7 +124,7 @@
 }
 
 - (void)refreshSeatUI {
-    [self removeAllSubviews];
+    [self removeAllSubviews:self];
     CGFloat space = 10;
     CGFloat width = 54;
     CGFloat height = 70;
@@ -136,6 +136,12 @@
     }
 }
 
+- (void)removeAllSubviews:(UIView *)view {
+    while (view.subviews.count) {
+        [view.subviews.lastObject removeFromSuperview];
+    }
+}
+
 /*
 // Only override drawRect: if you perform custom drawing.
 // An empty implementation adversely affects performance during animation.

+ 139 - 0
KulexiuForTeacher/Pods/Pods.xcodeproj/xcuserdata/wangzhi.xcuserdatad/xcschemes/xcschememanagement.plist

@@ -0,0 +1,139 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>SchemeUserState</key>
+	<dict>
+		<key>AFNetworking.xcscheme_^#shared#^_</key>
+		<dict>
+			<key>orderHint</key>
+			<integer>26</integer>
+		</dict>
+		<key>Bugly.xcscheme_^#shared#^_</key>
+		<dict>
+			<key>orderHint</key>
+			<integer>0</integer>
+		</dict>
+		<key>IQKeyboardManager.xcscheme_^#shared#^_</key>
+		<dict>
+			<key>orderHint</key>
+			<integer>1</integer>
+		</dict>
+		<key>JCore.xcscheme_^#shared#^_</key>
+		<dict>
+			<key>orderHint</key>
+			<integer>4</integer>
+		</dict>
+		<key>JPush.xcscheme_^#shared#^_</key>
+		<dict>
+			<key>orderHint</key>
+			<integer>6</integer>
+		</dict>
+		<key>JXCategoryView.xcscheme_^#shared#^_</key>
+		<dict>
+			<key>orderHint</key>
+			<integer>20</integer>
+		</dict>
+		<key>JXPagingView.xcscheme_^#shared#^_</key>
+		<dict>
+			<key>orderHint</key>
+			<integer>15</integer>
+		</dict>
+		<key>MBProgressHUD.xcscheme_^#shared#^_</key>
+		<dict>
+			<key>orderHint</key>
+			<integer>8</integer>
+		</dict>
+		<key>MJExtension.xcscheme_^#shared#^_</key>
+		<dict>
+			<key>orderHint</key>
+			<integer>19</integer>
+		</dict>
+		<key>MJRefresh.xcscheme_^#shared#^_</key>
+		<dict>
+			<key>orderHint</key>
+			<integer>18</integer>
+		</dict>
+		<key>Masonry.xcscheme_^#shared#^_</key>
+		<dict>
+			<key>orderHint</key>
+			<integer>11</integer>
+		</dict>
+		<key>Pods-KulexiuForTeacher.xcscheme_^#shared#^_</key>
+		<dict>
+			<key>orderHint</key>
+			<integer>17</integer>
+		</dict>
+		<key>RSKImageCropper.xcscheme_^#shared#^_</key>
+		<dict>
+			<key>orderHint</key>
+			<integer>23</integer>
+		</dict>
+		<key>Reachability.xcscheme_^#shared#^_</key>
+		<dict>
+			<key>orderHint</key>
+			<integer>21</integer>
+		</dict>
+		<key>RongCloudIM.xcscheme_^#shared#^_</key>
+		<dict>
+			<key>orderHint</key>
+			<integer>13</integer>
+		</dict>
+		<key>RongCloudRTC.xcscheme_^#shared#^_</key>
+		<dict>
+			<key>orderHint</key>
+			<integer>7</integer>
+		</dict>
+		<key>SDWebImage.xcscheme_^#shared#^_</key>
+		<dict>
+			<key>orderHint</key>
+			<integer>9</integer>
+		</dict>
+		<key>SSZipArchive.xcscheme_^#shared#^_</key>
+		<dict>
+			<key>orderHint</key>
+			<integer>22</integer>
+		</dict>
+		<key>SocketRocket.xcscheme_^#shared#^_</key>
+		<dict>
+			<key>orderHint</key>
+			<integer>10</integer>
+		</dict>
+		<key>UMAPM.xcscheme_^#shared#^_</key>
+		<dict>
+			<key>orderHint</key>
+			<integer>12</integer>
+		</dict>
+		<key>UMCommon.xcscheme_^#shared#^_</key>
+		<dict>
+			<key>orderHint</key>
+			<integer>24</integer>
+		</dict>
+		<key>UMDevice.xcscheme_^#shared#^_</key>
+		<dict>
+			<key>orderHint</key>
+			<integer>3</integer>
+		</dict>
+		<key>Whiteboard-Whiteboard.xcscheme_^#shared#^_</key>
+		<dict>
+			<key>orderHint</key>
+			<integer>25</integer>
+		</dict>
+		<key>Whiteboard.xcscheme_^#shared#^_</key>
+		<dict>
+			<key>orderHint</key>
+			<integer>2</integer>
+		</dict>
+		<key>YYModel.xcscheme_^#shared#^_</key>
+		<dict>
+			<key>orderHint</key>
+			<integer>14</integer>
+		</dict>
+		<key>dsBridge.xcscheme_^#shared#^_</key>
+		<dict>
+			<key>orderHint</key>
+			<integer>16</integer>
+		</dict>
+	</dict>
+</dict>
+</plist>