Bläddra i källkod

作品发布分享流程修改

Steven 1 år sedan
förälder
incheckning
6d2827ef0b
22 ändrade filer med 612 tillägg och 29 borttagningar
  1. 11 5
      KulexiuForTeacher/KulexiuForTeacher.xcodeproj/project.pbxproj
  2. 1 1
      KulexiuForTeacher/KulexiuForTeacher.xcodeproj/xcshareddata/xcschemes/KulexiuForTeacher.xcscheme
  3. 6 0
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/ShareIcon/Contents.json
  4. 22 0
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/ShareIcon/save_linkIcon.imageset/Contents.json
  5. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/ShareIcon/save_linkIcon.imageset/save_linkIcon@2x.png
  6. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/ShareIcon/save_linkIcon.imageset/save_linkIcon@3x.png
  7. 21 0
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/ShareIcon/shareImage.imageset/Contents.json
  8. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/ShareIcon/shareImage.imageset/shareImage@2x.png
  9. 22 0
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/ShareIcon/share_friendCircle.imageset/Contents.json
  10. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/ShareIcon/share_friendCircle.imageset/share_friendCircle@2x.png
  11. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/ShareIcon/share_friendCircle.imageset/share_friendCircle@3x.png
  12. 22 0
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/ShareIcon/share_friendIcon.imageset/Contents.json
  13. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/ShareIcon/share_friendIcon.imageset/share_friendIcon@2x.png
  14. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/ShareIcon/share_friendIcon.imageset/share_friendIcon@3x.png
  15. 28 6
      KulexiuForTeacher/KulexiuForTeacher/Common/Base/KSBaseWKWebViewController.m
  16. 63 2
      KulexiuForTeacher/KulexiuForTeacher/Common/MediaMerge/AudioMerge/KSMediaMergeView.m
  17. 31 0
      KulexiuForTeacher/KulexiuForTeacher/Common/MediaMerge/AudioMerge/ShareFunctionView.h
  18. 108 0
      KulexiuForTeacher/KulexiuForTeacher/Common/MediaMerge/AudioMerge/ShareFunctionView.m
  19. 254 0
      KulexiuForTeacher/KulexiuForTeacher/Common/MediaMerge/AudioMerge/ShareFunctionView.xib
  20. 3 2
      KulexiuForTeacher/KulexiuForTeacher/Common/Tools/UMShare/KSUMShareManager.h
  21. 20 13
      KulexiuForTeacher/KulexiuForTeacher/Common/Tools/UMShare/KSUMShareManager.m
  22. BIN
      KulexiuForTeacher/KulexiuForTeacher/shareImage@2x.png

+ 11 - 5
KulexiuForTeacher/KulexiuForTeacher.xcodeproj/project.pbxproj

@@ -665,6 +665,8 @@
 		BC3ACD9C2890D88E00060E97 /* IncomeRecordHeadView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BC3ACD9B2890D88E00060E97 /* IncomeRecordHeadView.xib */; };
 		BC3ACD9F2891261800060E97 /* MyMusicNavView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC3ACD9E2891261800060E97 /* MyMusicNavView.m */; };
 		BC3ACDA12891261F00060E97 /* MyMusicNavView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BC3ACDA02891261F00060E97 /* MyMusicNavView.xib */; };
+		BC3BF6452B9FED9B00831494 /* ShareFunctionView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BC3BF6432B9FED9A00831494 /* ShareFunctionView.xib */; };
+		BC3BF6462B9FED9B00831494 /* ShareFunctionView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC3BF6442B9FED9B00831494 /* ShareFunctionView.m */; };
 		BC3DE082280D88670027DC0E /* EvaluateListModel.m in Sources */ = {isa = PBXBuildFile; fileRef = BC3DE081280D88670027DC0E /* EvaluateListModel.m */; };
 		BC3DE088280D89E90027DC0E /* EvaluateDetailViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = BC3DE087280D89E90027DC0E /* EvaluateDetailViewController.m */; };
 		BC4058922863028200111BC5 /* NotiferNavView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC4058912863028200111BC5 /* NotiferNavView.m */; };
@@ -1139,7 +1141,6 @@
 		BCDB093E2805C0EF00D0BDAD /* NewClassPopCell.m in Sources */ = {isa = PBXBuildFile; fileRef = BCDB093A2805C0ED00D0BDAD /* NewClassPopCell.m */; };
 		BCDB093F2805C0EF00D0BDAD /* NewClassPopCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = BCDB093B2805C0EE00D0BDAD /* NewClassPopCell.xib */; };
 		BCDB09402805C0EF00D0BDAD /* NewClassPopView.m in Sources */ = {isa = PBXBuildFile; fileRef = BCDB093D2805C0EF00D0BDAD /* NewClassPopView.m */; };
-		BCDE358A2897B48E00A9A560 /* shareImage@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = BCDE35892897B48E00A9A560 /* shareImage@2x.png */; };
 		BCDE3591289A7E4900A9A560 /* KSGroupTagImageView.m in Sources */ = {isa = PBXBuildFile; fileRef = BCDE358F289A7E4900A9A560 /* KSGroupTagImageView.m */; };
 		BCDE3594289B960100A9A560 /* HomeAlbumView.m in Sources */ = {isa = PBXBuildFile; fileRef = BCDE3593289B960100A9A560 /* HomeAlbumView.m */; };
 		BCDE3596289B960A00A9A560 /* HomeAlbumView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BCDE3595289B960A00A9A560 /* HomeAlbumView.xib */; };
@@ -2427,6 +2428,9 @@
 		BC3ACD9D2891261800060E97 /* MyMusicNavView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MyMusicNavView.h; sourceTree = "<group>"; };
 		BC3ACD9E2891261800060E97 /* MyMusicNavView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MyMusicNavView.m; sourceTree = "<group>"; };
 		BC3ACDA02891261F00060E97 /* MyMusicNavView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = MyMusicNavView.xib; sourceTree = "<group>"; };
+		BC3BF6422B9FED9900831494 /* ShareFunctionView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ShareFunctionView.h; sourceTree = "<group>"; };
+		BC3BF6432B9FED9A00831494 /* ShareFunctionView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = ShareFunctionView.xib; sourceTree = "<group>"; };
+		BC3BF6442B9FED9B00831494 /* ShareFunctionView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ShareFunctionView.m; sourceTree = "<group>"; };
 		BC3DE080280D88660027DC0E /* EvaluateListModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EvaluateListModel.h; sourceTree = "<group>"; };
 		BC3DE081280D88670027DC0E /* EvaluateListModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EvaluateListModel.m; sourceTree = "<group>"; };
 		BC3DE086280D89E90027DC0E /* EvaluateDetailViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = EvaluateDetailViewController.h; sourceTree = "<group>"; };
@@ -3174,7 +3178,6 @@
 		BCDB093B2805C0EE00D0BDAD /* NewClassPopCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = NewClassPopCell.xib; sourceTree = "<group>"; };
 		BCDB093C2805C0EE00D0BDAD /* NewClassPopCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NewClassPopCell.h; sourceTree = "<group>"; };
 		BCDB093D2805C0EF00D0BDAD /* NewClassPopView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NewClassPopView.m; sourceTree = "<group>"; };
-		BCDE35892897B48E00A9A560 /* shareImage@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "shareImage@2x.png"; sourceTree = "<group>"; };
 		BCDE358F289A7E4900A9A560 /* KSGroupTagImageView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KSGroupTagImageView.m; sourceTree = "<group>"; };
 		BCDE3590289A7E4900A9A560 /* KSGroupTagImageView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KSGroupTagImageView.h; sourceTree = "<group>"; };
 		BCDE3592289B960100A9A560 /* HomeAlbumView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = HomeAlbumView.h; sourceTree = "<group>"; };
@@ -3509,7 +3512,6 @@
 			children = (
 				BC255E802B29424900A1FC27 /* SwiftImportHeader.h */,
 				BC255E812B29424900A1FC27 /* WebViewBaseConfig.h */,
-				BCDE35892897B48E00A9A560 /* shareImage@2x.png */,
 				277935D927E325B90010E277 /* Module */,
 				2779309427E30F2D0010E277 /* Common */,
 				275E8ADD27E1B25200DD3F6E /* KulexiuForTeacher.entitlements */,
@@ -5958,6 +5960,9 @@
 				BC38C40F2AF900E100ABFCC2 /* KSAudioAnimationView.xib */,
 				BC38C41A2AF900E100ABFCC2 /* KSMediaMergeView.h */,
 				BC38C4072AF900E100ABFCC2 /* KSMediaMergeView.m */,
+				BC3BF6422B9FED9900831494 /* ShareFunctionView.h */,
+				BC3BF6442B9FED9B00831494 /* ShareFunctionView.m */,
+				BC3BF6432B9FED9A00831494 /* ShareFunctionView.xib */,
 				BC38C4082AF900E100ABFCC2 /* KSMergeAudioControlView.h */,
 				BC38C4192AF900E100ABFCC2 /* KSMergeAudioControlView.m */,
 				BC38C4142AF900E100ABFCC2 /* KSMergeAudioControlView.xib */,
@@ -8065,7 +8070,7 @@
 			isa = PBXProject;
 			attributes = {
 				BuildIndependentTargetsInParallel = 1;
-				LastUpgradeCheck = 1500;
+				LastUpgradeCheck = 1520;
 				TargetAttributes = {
 					275E8A6327E18F2300DD3F6E = {
 						CreatedOnToolsVersion = 13.2.1;
@@ -8277,6 +8282,7 @@
 				BC71DEFB2A89F470003F165E /* TXQuitChooseView.xib in Resources */,
 				BC7CFFB62817E90700CAEB21 /* KSSegView.xib in Resources */,
 				2779362227E334470010E277 /* KSUpdateAlert.xib in Resources */,
+				BC3BF6452B9FED9B00831494 /* ShareFunctionView.xib in Resources */,
 				BC71DEF32A89F470003F165E /* TXChatBottomView.xib in Resources */,
 				BC71D2072887FDD40010F14B /* img_22.png in Resources */,
 				277D433127E9A50800107DB7 /* PhoneCheckBodyView.xib in Resources */,
@@ -8443,7 +8449,6 @@
 				BC7CFFD22817FF6D00CAEB21 /* CardDisplayView.xib in Resources */,
 				BC2456E5286BE86600D1F7C0 /* MineStyleEmptyView.xib in Resources */,
 				27F9CB0127EC3D42003E0FE4 /* GroupListViewCell.xib in Resources */,
-				BCDE358A2897B48E00A9A560 /* shareImage@2x.png in Resources */,
 				BC8B6E582856ED0600866917 /* UMSocialSDKResources.bundle in Resources */,
 				BC965AEA2926332D00AB90B0 /* ClassroomCoursewarePlayView.xib in Resources */,
 				BC1191F8280EBC8600A716F7 /* AccompanyDetailBottomView.xib in Resources */,
@@ -9157,6 +9162,7 @@
 				BCECE21D2B3D5F0800C0D555 /* FeedbackSortView.m in Sources */,
 				275FA55827F30AE300EB6240 /* VideoCourseModel.m in Sources */,
 				BC38C47C2AFA1F4B00ABFCC2 /* KSDraftMergeViewController.m in Sources */,
+				BC3BF6462B9FED9B00831494 /* ShareFunctionView.m in Sources */,
 				275B172927EB26920081FDEF /* ChatAddressHeaderView.m in Sources */,
 				BC7CFFA22817D72200CAEB21 /* IncomeListModel.m in Sources */,
 				2755C06C27EC7F0E007D9070 /* KSChatComplainController.m in Sources */,

+ 1 - 1
KulexiuForTeacher/KulexiuForTeacher.xcodeproj/xcshareddata/xcschemes/KulexiuForTeacher.xcscheme

@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <Scheme
-   LastUpgradeVersion = "1500"
+   LastUpgradeVersion = "1520"
    version = "1.7">
    <BuildAction
       parallelizeBuildables = "YES"

+ 6 - 0
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/ShareIcon/Contents.json

@@ -0,0 +1,6 @@
+{
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

+ 22 - 0
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/ShareIcon/save_linkIcon.imageset/Contents.json

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

BIN
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/ShareIcon/save_linkIcon.imageset/save_linkIcon@2x.png


BIN
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/ShareIcon/save_linkIcon.imageset/save_linkIcon@3x.png


+ 21 - 0
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/ShareIcon/shareImage.imageset/Contents.json

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

BIN
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/ShareIcon/shareImage.imageset/shareImage@2x.png


+ 22 - 0
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/ShareIcon/share_friendCircle.imageset/Contents.json

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

BIN
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/ShareIcon/share_friendCircle.imageset/share_friendCircle@2x.png


BIN
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/ShareIcon/share_friendCircle.imageset/share_friendCircle@3x.png


+ 22 - 0
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/ShareIcon/share_friendIcon.imageset/Contents.json

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

BIN
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/ShareIcon/share_friendIcon.imageset/share_friendIcon@2x.png


BIN
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/ShareIcon/share_friendIcon.imageset/share_friendIcon@3x.png


+ 28 - 6
KulexiuForTeacher/KulexiuForTeacher/Common/Base/KSBaseWKWebViewController.m

@@ -859,19 +859,36 @@ typedef NS_ENUM(NSInteger, CHOOSETYPE) {
     }];
 }
 
+- (KSSHARETYPE)getTypeWithTypeString:(NSString *)typeString {
+    if ([typeString isEqualToString:@"image"]) { // 图片
+        return KSSHARETYPE_IMAGE;
+    }
+    else if ([typeString isEqualToString:@"link"]) { // 链接
+        return KSSHARETYPE_URL;
+    }
+    else {
+        return KSSHARETYPE_VODEO;
+    }
+}
+
 - (void)shareToWeChat:(NSDictionary *)parm {
     
     NSDictionary *content = [parm ks_dictionaryValueForKey:@"content"];
     if ([[content ks_stringValueForKey:@"shareType"] isEqualToString:@"wechat"]) {
         NSString *typeString = [content ks_stringValueForKey:@"type"];
-        KSSHARETYPE shareType = [typeString isEqualToString:@"image"] ? KSSHARETYPE_IMAGE : KSSHARETYPE_VODEO;
+        KSSHARETYPE shareType = [self getTypeWithTypeString:typeString];
         NSString *shareTitle = [content ks_stringValueForKey:@"title"];
         NSString *descMessage = [content ks_stringValueForKey:@"desc"];
-        NSString *videoUrl = [content ks_stringValueForKey:@"video"];
+        NSString *url = [content ks_stringValueForKey:@"video"];
+        if (shareType == KSSHARETYPE_URL) {
+            url = [content ks_stringValueForKey:@"url"];
+        }
         NSString *imgStr = [content ks_stringValueForKey:@"image"];
         UIImage *shareImage = [self imageWithBase64String:imgStr];
+        NSString *thumImage = [content ks_stringValueForKey:@"thumb"];
+
         MJWeakSelf;
-        self.shareManager = [KSUMShareManager shareInstanceToWechatWithImage:shareImage url:videoUrl shareTitle:shareTitle descMessage:descMessage shareType:shareType callback:^(BOOL isSuccess, NSString * _Nonnull descMessage) {
+        self.shareManager = [KSUMShareManager shareInstanceToWechatWithImage:shareImage url:url shareTitle:shareTitle descMessage:descMessage shareType:shareType thumImage:thumImage callback:^(BOOL isSuccess, NSString * _Nonnull descMessage) {
             NSMutableDictionary *responParm = [NSMutableDictionary dictionary];
             [responParm setValue:[parm ks_stringValueForKey:@"api"] forKey:@"api"];
             NSMutableDictionary *content = [NSMutableDictionary dictionary];
@@ -885,14 +902,19 @@ typedef NS_ENUM(NSInteger, CHOOSETYPE) {
     }
     else if ([[content ks_stringValueForKey:@"shareType"] isEqualToString:@"wechat_circle"]) { // 微信朋友圈
         NSString *typeString = [content ks_stringValueForKey:@"type"];
-        KSSHARETYPE shareType = [typeString isEqualToString:@"image"] ? KSSHARETYPE_IMAGE : KSSHARETYPE_VODEO;
+        KSSHARETYPE shareType = [self getTypeWithTypeString:typeString];
         NSString *shareTitle = [content ks_stringValueForKey:@"title"];
         NSString *descMessage = [content ks_stringValueForKey:@"desc"];
-        NSString *videoUrl = [content ks_stringValueForKey:@"video"];
+        NSString *url = [content ks_stringValueForKey:@"video"];
+        if (shareType == KSSHARETYPE_URL) {
+            url = [content ks_stringValueForKey:@"url"];
+        }
         NSString *imgStr = [content ks_stringValueForKey:@"image"];
         UIImage *shareImage = [self imageWithBase64String:imgStr];
+        NSString *thumImage = [content ks_stringValueForKey:@"thumb"];
+
         MJWeakSelf;
-        self.shareManager = [KSUMShareManager shareInstanceToWechatCircleWithImage:shareImage url:videoUrl shareTitle:shareTitle descMessage:descMessage shareType:shareType callback:^(BOOL isSuccess, NSString * _Nonnull descMessage) {
+        self.shareManager = [KSUMShareManager shareInstanceToWechatCircleWithImage:shareImage url:url shareTitle:shareTitle descMessage:descMessage shareType:shareType thumImage:thumImage callback:^(BOOL isSuccess, NSString * _Nonnull descMessage) {
             NSMutableDictionary *responParm = [NSMutableDictionary dictionary];
             [responParm setValue:[parm ks_stringValueForKey:@"api"] forKey:@"api"];
             NSMutableDictionary *content = [NSMutableDictionary dictionary];

+ 63 - 2
KulexiuForTeacher/KulexiuForTeacher/Common/MediaMerge/AudioMerge/KSMediaMergeView.m

@@ -20,7 +20,8 @@
 #import <RSKImageCropper/RSKImageCropper.h>
 #import "KSVideoCropViewController.h"
 #import "KSAudioSessionManager.h"
-
+#import "ShareFunctionView.h"
+#import "KSUMShareManager.h"
 
 @interface KSMediaMergeView ()<kSNewPlayerManagerDelegate,KSVideoPlayerViewDelegate,RSKImageCropViewControllerDelegate,RSKImageCropViewControllerDataSource>
 
@@ -117,6 +118,8 @@
 
 @property (nonatomic, assign) BOOL fromDraftPage; // 是否从草稿页面进入
 
+@property (nonatomic, strong) KSUMShareManager *shareManager;
+
 @end
 
 @implementation KSMediaMergeView
@@ -1108,8 +1111,12 @@
     [KSNetworkingManager saveMusicMessage:KS_POST jsonConfig:self.jsonConfig img:self.coverImage videoUrl:fileUrl accompanyUrl:self.remoteBgAudioUrl desc:self.desc type:type musicPracticeRecordId:self.recordId videoImg:self.videoCoverUrl success:^(NSDictionary * _Nonnull dic) {
         if ([dic ks_integerValueForKey:@"code"] == 200) {
             if (isFormal) {
+                NSString *productId = @"";
+                if ([[dic objectForKey:@"data"] isKindOfClass:[NSString class]]) {
+                    productId = [dic ks_stringValueForKey:@"data"];
+                }
                 [LOADING_MANAGER KSShowProgressMsg:@"发布成功" promptCompletion:^{
-                    [self removeView];
+                    [self showShareView:self.desc productId:productId];
                 }];
             }
             else {
@@ -1135,6 +1142,60 @@
     }];
 }
 
+- (void)showShareView:(NSString *)desc productId:(NSString *)productId {
+    if ([NSString isEmptyString:productId]) {
+        [self removeView];
+        return;
+    }
+    ShareFunctionView *shareView = [ShareFunctionView shareInstance];
+    [shareView showShareView:self];
+    [shareView shareOutCallback:^(MINESHARETYPE type) {
+        [self shareAction:type desc:desc productId:productId];
+    }];
+    
+}
+
+- (void)shareAction:(MINESHARETYPE)type desc:(NSString *)desc productId:(NSString *)productId {
+    
+    NSString *shareTitle = @"我在酷乐秀发布了演奏作品";
+    NSString *url = [NSString stringWithFormat:@"%@%@?id=%@",WEBHOST, @"/#/shareCreation", productId];
+    UIImage *image = [UIImage new];
+    NSString *descMessage = desc;
+    id thumImage = [NSString isEmptyString:self.coverImage] ? [UIImage imageNamed:@"music_placeholder"] : self.coverImage;
+    switch (type) {
+        case MINESHARETYPE_FRIEND:
+        {
+            self.shareManager = [KSUMShareManager shareInstanceToWechatWithImage:image url:url shareTitle:shareTitle descMessage:descMessage shareType:KSSHARETYPE_URL thumImage:thumImage callback:^(BOOL isSuccess, NSString * _Nonnull descMessage) {
+
+            }];
+        }
+            break;
+        case MINESHARETYPE_CIRCLE:
+        {
+            self.shareManager = [KSUMShareManager shareInstanceToWechatCircleWithImage:image url:url shareTitle:shareTitle descMessage:descMessage shareType:KSSHARETYPE_URL thumImage:thumImage callback:^(BOOL isSuccess, NSString * _Nonnull descMessage) {
+
+            }];
+            
+        }
+            break;
+        case MINESHARETYPE_SAVE:
+        {
+            // 复制
+            UIPasteboard *pasteboard = [UIPasteboard generalPasteboard];
+            pasteboard.string = url;
+            [LOADING_MANAGER MBShowAUTOHidingInWindow:@"复制成功"];
+        }
+            break;
+        case MINESHARETYPE_CANCEL:
+        {
+            [self removeView];
+        }
+        default:
+            break;
+    }
+
+}
+
 - (void)showSaveDraftTipsAlert {
     MJWeakSelf;
     [self.alertView configTitle:@"提示" descMessage:@"已成功保存到草稿,草稿7天未发布将自动删除。" leftButtonTitle:@"确认" rightButtonTitle:@"查看草稿" leftButtonAction:^{

+ 31 - 0
KulexiuForTeacher/KulexiuForTeacher/Common/MediaMerge/AudioMerge/ShareFunctionView.h

@@ -0,0 +1,31 @@
+//
+//  ShareFunctionView.h
+//  KulexiuSchoolStudent
+//
+//  Created by 王智 on 2024/3/8.
+//
+
+#import <UIKit/UIKit.h>
+
+typedef NS_ENUM(NSInteger, MINESHARETYPE) {
+    MINESHARETYPE_FRIEND,  // 微信好友
+    MINESHARETYPE_CIRCLE,  // 朋友圈
+    MINESHARETYPE_SAVE,    // 保存链接
+    MINESHARETYPE_CANCEL,  // 取消下载
+};
+
+typedef void(^ShareChooseCallback)(MINESHARETYPE type);
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface ShareFunctionView : UIView
+
++ (instancetype)shareInstance;
+
+- (void)showShareView:(UIView *)displayView;
+
+- (void)shareOutCallback:(ShareChooseCallback)callback;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 108 - 0
KulexiuForTeacher/KulexiuForTeacher/Common/MediaMerge/AudioMerge/ShareFunctionView.m

@@ -0,0 +1,108 @@
+//
+//  ShareFunctionView.m
+//  KulexiuSchoolStudent
+//
+//  Created by 王智 on 2024/3/8.
+//
+
+#import "ShareFunctionView.h"
+
+@interface ShareFunctionView ()<UIGestureRecognizerDelegate>
+
+@property (weak, nonatomic) IBOutlet UIView *containerView;
+
+@property (weak, nonatomic) IBOutlet NSLayoutConstraint *bottomSpace;
+
+@property (nonatomic, copy) ShareChooseCallback callback;
+
+@end
+
+@implementation ShareFunctionView
+
+- (void)awakeFromNib {
+    [super awakeFromNib];
+//    [self addGesture];
+}
+
++ (instancetype)shareInstance {
+    ShareFunctionView *view = [[[NSBundle mainBundle] loadNibNamed:@"ShareFunctionView" owner:nil options:nil] firstObject];
+    return view;
+}
+
+- (void)showShareView:(UIView *)displayView {
+    if (displayView) {
+        [displayView addSubview:self];
+        [self mas_makeConstraints:^(MASConstraintMaker *make) {
+            make.left.right.top.bottom.mas_equalTo(displayView);
+        }];
+    }
+    else {
+        UIView *showView = [NSObject getKeyWindow];
+        [showView addSubview:self];
+        [self mas_makeConstraints:^(MASConstraintMaker *make) {
+            make.left.right.top.bottom.mas_equalTo(showView);
+        }];
+    }
+}
+
+- (void)shareOutCallback:(ShareChooseCallback)callback {
+    if (callback) {
+        self.callback = callback;
+    }
+}
+
+- (IBAction)shareFriend:(id)sender {
+    if (self.callback) {
+        self.callback(MINESHARETYPE_FRIEND);
+    }
+}
+
+- (IBAction)shareCircle:(id)sender {
+    if (self.callback) {
+        self.callback(MINESHARETYPE_CIRCLE);
+    }
+}
+
+- (IBAction)saveLink:(id)sender {
+    if (self.callback) {
+        self.callback(MINESHARETYPE_SAVE);
+    }
+}
+
+
+- (IBAction)cancelAction:(id)sender {
+    [self cancelShareAction];
+}
+
+- (void)cancelShareAction {
+    if (self.callback) {
+        self.callback(MINESHARETYPE_CANCEL);
+    }
+}
+
+#pragma mark ---- gesture
+- (void)addGesture {
+    UITapGestureRecognizer *gesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapAction:)];
+    gesture.delegate = self;
+    [self addGestureRecognizer:gesture];
+}
+
+- (void)tapAction:(UITapGestureRecognizer *)gesture {
+    [self cancelShareAction];
+}
+
+- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
+    if ([touch.view isDescendantOfView:self.containerView]) {
+        return NO;
+    }
+    return YES;
+}
+/*
+// Only override drawRect: if you perform custom drawing.
+// An empty implementation adversely affects performance during animation.
+- (void)drawRect:(CGRect)rect {
+    // Drawing code
+}
+*/
+
+@end

+ 254 - 0
KulexiuForTeacher/KulexiuForTeacher/Common/MediaMerge/AudioMerge/ShareFunctionView.xib

@@ -0,0 +1,254 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="22505" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES">
+    <device id="retina6_12" orientation="portrait" appearance="light"/>
+    <dependencies>
+        <deployment identifier="iOS"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22504"/>
+        <capability name="System colors in document resources" minToolsVersion="11.0"/>
+        <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" customClass="ShareFunctionView">
+            <rect key="frame" x="0.0" y="0.0" width="393" height="662"/>
+            <autoresizingMask key="autoresizingMask"/>
+            <subviews>
+                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="xxd-Rj-n4H">
+                    <rect key="frame" x="46.666666666666657" y="229" width="300" height="204.33333333333337"/>
+                    <subviews>
+                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="作品发布成功!快来分享吧!" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="whi-jN-odv">
+                            <rect key="frame" x="22.000000000000014" y="15" width="204.33333333333337" height="22"/>
+                            <constraints>
+                                <constraint firstAttribute="height" constant="22" id="mcC-RU-mid"/>
+                            </constraints>
+                            <fontDescription key="fontDescription" type="system" pointSize="16"/>
+                            <color key="textColor" red="0.20000000000000001" green="0.20000000000000001" blue="0.20000000000000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                            <nil key="highlightedColor"/>
+                        </label>
+                        <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="cancle_button" translatesAutoresizingMaskIntoConstraints="NO" id="d68-wP-nqr">
+                            <rect key="frame" x="278" y="11" width="12" height="12"/>
+                            <constraints>
+                                <constraint firstAttribute="width" constant="12" id="2dO-Ib-kPr"/>
+                                <constraint firstAttribute="height" constant="12" id="UWh-M8-xRo"/>
+                            </constraints>
+                        </imageView>
+                        <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="1X7-2b-H7z">
+                            <rect key="frame" x="260" y="0.0" width="40" height="40"/>
+                            <constraints>
+                                <constraint firstAttribute="height" constant="40" id="mfV-tg-6hm"/>
+                                <constraint firstAttribute="width" constant="40" id="twM-LS-3el"/>
+                            </constraints>
+                            <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
+                            <connections>
+                                <action selector="cancelAction:" destination="iN0-l3-epB" eventType="touchUpInside" id="c7H-59-kBo"/>
+                            </connections>
+                        </button>
+                        <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="3o6-xF-kdP">
+                            <rect key="frame" x="52" y="60.999999999999993" width="52" height="68.333333333333314"/>
+                            <subviews>
+                                <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="share_friendIcon" translatesAutoresizingMaskIntoConstraints="NO" id="hP0-qM-Y11">
+                                    <rect key="frame" x="4" y="0.0" width="44" height="44"/>
+                                    <constraints>
+                                        <constraint firstAttribute="width" constant="44" id="dFC-Nr-TLC"/>
+                                        <constraint firstAttribute="height" constant="44" id="r6X-iY-jcE"/>
+                                    </constraints>
+                                </imageView>
+                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="微信好友" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="vjl-Z1-6Mv">
+                                    <rect key="frame" x="0.0" y="54" width="52" height="14.333333333333329"/>
+                                    <constraints>
+                                        <constraint firstAttribute="width" constant="52" id="5M4-h2-Hz5"/>
+                                    </constraints>
+                                    <fontDescription key="fontDescription" type="system" pointSize="12"/>
+                                    <color key="textColor" red="0.39215686274509803" green="0.396078431372549" blue="0.40000000000000002" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                                    <nil key="highlightedColor"/>
+                                </label>
+                                <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Iho-8X-SD1">
+                                    <rect key="frame" x="0.0" y="0.0" width="52" height="68.333333333333329"/>
+                                    <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
+                                    <connections>
+                                        <action selector="shareFriend:" destination="iN0-l3-epB" eventType="touchUpInside" id="eSM-hz-qsf"/>
+                                    </connections>
+                                </button>
+                            </subviews>
+                            <color key="backgroundColor" systemColor="systemBackgroundColor"/>
+                            <constraints>
+                                <constraint firstItem="Iho-8X-SD1" firstAttribute="top" secondItem="3o6-xF-kdP" secondAttribute="top" id="E9B-P3-Ipy"/>
+                                <constraint firstItem="hP0-qM-Y11" firstAttribute="top" secondItem="3o6-xF-kdP" secondAttribute="top" id="Hxy-Co-Vhl"/>
+                                <constraint firstItem="vjl-Z1-6Mv" firstAttribute="top" secondItem="hP0-qM-Y11" secondAttribute="bottom" constant="10" id="N6s-Ve-z05"/>
+                                <constraint firstItem="Iho-8X-SD1" firstAttribute="leading" secondItem="3o6-xF-kdP" secondAttribute="leading" id="Qh1-Gg-sJL"/>
+                                <constraint firstItem="hP0-qM-Y11" firstAttribute="centerX" secondItem="3o6-xF-kdP" secondAttribute="centerX" id="Uif-5u-jbS"/>
+                                <constraint firstAttribute="trailing" secondItem="Iho-8X-SD1" secondAttribute="trailing" id="dJE-5d-b5Y"/>
+                                <constraint firstItem="hP0-qM-Y11" firstAttribute="centerX" secondItem="3o6-xF-kdP" secondAttribute="centerX" id="dL8-Et-tDy"/>
+                                <constraint firstAttribute="trailing" secondItem="vjl-Z1-6Mv" secondAttribute="trailing" id="fS1-aW-f6t"/>
+                                <constraint firstItem="vjl-Z1-6Mv" firstAttribute="leading" secondItem="3o6-xF-kdP" secondAttribute="leading" id="i3i-iB-r6u"/>
+                                <constraint firstAttribute="bottom" secondItem="Iho-8X-SD1" secondAttribute="bottom" id="jvV-NO-JXW"/>
+                                <constraint firstAttribute="bottom" secondItem="vjl-Z1-6Mv" secondAttribute="bottom" id="s7r-eh-W7i"/>
+                            </constraints>
+                        </view>
+                        <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="cJu-Gs-vEw">
+                            <rect key="frame" x="13" y="146.33333333333331" width="274" height="1"/>
+                            <color key="backgroundColor" red="0.94901960784313721" green="0.94901960784313721" blue="0.94901960784313721" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                            <constraints>
+                                <constraint firstAttribute="height" constant="1" id="h5e-T1-Xll"/>
+                            </constraints>
+                        </view>
+                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="取消" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="KgM-5w-lll">
+                            <rect key="frame" x="133.33333333333334" y="162.33333333333331" width="33.333333333333343" height="22"/>
+                            <constraints>
+                                <constraint firstAttribute="height" constant="22" id="233-tf-otD"/>
+                            </constraints>
+                            <fontDescription key="fontDescription" type="system" pointSize="16"/>
+                            <color key="textColor" red="0.66666666666666663" green="0.66666666666666663" blue="0.66666666666666663" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                            <nil key="highlightedColor"/>
+                        </label>
+                        <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Hbd-Au-HVO">
+                            <rect key="frame" x="0.0" y="147.33333333333331" width="300" height="57"/>
+                            <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
+                            <connections>
+                                <action selector="cancelAction:" destination="iN0-l3-epB" eventType="touchUpInside" id="RDg-wT-LHI"/>
+                            </connections>
+                        </button>
+                        <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="pii-x4-YtS">
+                            <rect key="frame" x="124" y="60.999999999999993" width="52" height="68.333333333333314"/>
+                            <subviews>
+                                <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="share_friendCircle" translatesAutoresizingMaskIntoConstraints="NO" id="5ej-dh-tsG">
+                                    <rect key="frame" x="4" y="0.0" width="44" height="44"/>
+                                    <constraints>
+                                        <constraint firstAttribute="width" constant="44" id="GeQ-L3-drg"/>
+                                        <constraint firstAttribute="height" constant="44" id="cdb-cb-4rs"/>
+                                    </constraints>
+                                </imageView>
+                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="朋友圈" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="12Q-cw-qeX">
+                                    <rect key="frame" x="0.0" y="54" width="52" height="14.333333333333329"/>
+                                    <constraints>
+                                        <constraint firstAttribute="width" constant="52" id="6pb-Kd-q83"/>
+                                    </constraints>
+                                    <fontDescription key="fontDescription" type="system" pointSize="12"/>
+                                    <color key="textColor" red="0.3921568627" green="0.39607843139999999" blue="0.40000000000000002" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                                    <nil key="highlightedColor"/>
+                                </label>
+                                <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="pJm-Pm-dKW">
+                                    <rect key="frame" x="0.0" y="0.0" width="52" height="68.333333333333329"/>
+                                    <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
+                                    <connections>
+                                        <action selector="shareCircle:" destination="iN0-l3-epB" eventType="touchUpInside" id="rGy-7k-Iyh"/>
+                                    </connections>
+                                </button>
+                            </subviews>
+                            <color key="backgroundColor" systemColor="systemBackgroundColor"/>
+                            <constraints>
+                                <constraint firstItem="5ej-dh-tsG" firstAttribute="centerX" secondItem="pii-x4-YtS" secondAttribute="centerX" id="45O-ma-CiK"/>
+                                <constraint firstAttribute="bottom" secondItem="pJm-Pm-dKW" secondAttribute="bottom" id="7CI-AM-1OX"/>
+                                <constraint firstItem="5ej-dh-tsG" firstAttribute="top" secondItem="pii-x4-YtS" secondAttribute="top" id="8Ff-be-1ov"/>
+                                <constraint firstAttribute="trailing" secondItem="12Q-cw-qeX" secondAttribute="trailing" id="QhJ-iA-bhb"/>
+                                <constraint firstAttribute="trailing" secondItem="pJm-Pm-dKW" secondAttribute="trailing" id="TDv-0N-obo"/>
+                                <constraint firstAttribute="bottom" secondItem="12Q-cw-qeX" secondAttribute="bottom" id="WPN-UM-Kah"/>
+                                <constraint firstItem="12Q-cw-qeX" firstAttribute="top" secondItem="5ej-dh-tsG" secondAttribute="bottom" constant="10" id="hZ0-PK-ZlL"/>
+                                <constraint firstItem="pJm-Pm-dKW" firstAttribute="leading" secondItem="pii-x4-YtS" secondAttribute="leading" id="iD2-2P-i69"/>
+                                <constraint firstItem="5ej-dh-tsG" firstAttribute="centerX" secondItem="pii-x4-YtS" secondAttribute="centerX" id="mFK-Da-0mO"/>
+                                <constraint firstItem="pJm-Pm-dKW" firstAttribute="top" secondItem="pii-x4-YtS" secondAttribute="top" id="qTJ-SH-oRz"/>
+                                <constraint firstItem="12Q-cw-qeX" firstAttribute="leading" secondItem="pii-x4-YtS" secondAttribute="leading" id="rSX-aV-7am"/>
+                            </constraints>
+                        </view>
+                        <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="972-C6-GND">
+                            <rect key="frame" x="196" y="60.999999999999993" width="52" height="68.333333333333314"/>
+                            <subviews>
+                                <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="save_linkIcon" translatesAutoresizingMaskIntoConstraints="NO" id="HFC-kg-Cnl">
+                                    <rect key="frame" x="4" y="0.0" width="44" height="44"/>
+                                    <constraints>
+                                        <constraint firstAttribute="height" constant="44" id="Pun-mH-KQi"/>
+                                        <constraint firstAttribute="width" constant="44" id="bAc-gW-UQ6"/>
+                                    </constraints>
+                                </imageView>
+                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="复制链接" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="NrI-8j-lth">
+                                    <rect key="frame" x="0.0" y="54" width="52" height="14.333333333333329"/>
+                                    <constraints>
+                                        <constraint firstAttribute="width" constant="52" id="z0T-Iz-msj"/>
+                                    </constraints>
+                                    <fontDescription key="fontDescription" type="system" pointSize="12"/>
+                                    <color key="textColor" red="0.3921568627" green="0.39607843139999999" blue="0.40000000000000002" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                                    <nil key="highlightedColor"/>
+                                </label>
+                                <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="mlB-f7-6X8">
+                                    <rect key="frame" x="0.0" y="0.0" width="52" height="68.333333333333329"/>
+                                    <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
+                                    <connections>
+                                        <action selector="saveLink:" destination="iN0-l3-epB" eventType="touchUpInside" id="rSH-Ut-2gO"/>
+                                    </connections>
+                                </button>
+                            </subviews>
+                            <color key="backgroundColor" systemColor="systemBackgroundColor"/>
+                            <constraints>
+                                <constraint firstItem="mlB-f7-6X8" firstAttribute="leading" secondItem="972-C6-GND" secondAttribute="leading" id="33I-aM-kwu"/>
+                                <constraint firstItem="NrI-8j-lth" firstAttribute="top" secondItem="HFC-kg-Cnl" secondAttribute="bottom" constant="10" id="7Pn-OD-jM1"/>
+                                <constraint firstItem="HFC-kg-Cnl" firstAttribute="centerX" secondItem="972-C6-GND" secondAttribute="centerX" id="BKc-lH-1f1"/>
+                                <constraint firstItem="NrI-8j-lth" firstAttribute="leading" secondItem="972-C6-GND" secondAttribute="leading" id="GCP-e1-0HQ"/>
+                                <constraint firstAttribute="bottom" secondItem="mlB-f7-6X8" secondAttribute="bottom" id="GwM-Fx-IV6"/>
+                                <constraint firstAttribute="bottom" secondItem="NrI-8j-lth" secondAttribute="bottom" id="KEg-Ts-4em"/>
+                                <constraint firstAttribute="trailing" secondItem="mlB-f7-6X8" secondAttribute="trailing" id="Ktg-ph-Fod"/>
+                                <constraint firstItem="HFC-kg-Cnl" firstAttribute="top" secondItem="972-C6-GND" secondAttribute="top" id="aXq-Jg-dZT"/>
+                                <constraint firstAttribute="trailing" secondItem="NrI-8j-lth" secondAttribute="trailing" id="k9k-fX-vxJ"/>
+                                <constraint firstItem="mlB-f7-6X8" firstAttribute="top" secondItem="972-C6-GND" secondAttribute="top" id="nnB-0i-WJM"/>
+                                <constraint firstItem="HFC-kg-Cnl" firstAttribute="centerX" secondItem="972-C6-GND" secondAttribute="centerX" id="y5F-za-Lsz"/>
+                            </constraints>
+                        </view>
+                    </subviews>
+                    <color key="backgroundColor" systemColor="systemBackgroundColor"/>
+                    <constraints>
+                        <constraint firstItem="1X7-2b-H7z" firstAttribute="top" secondItem="xxd-Rj-n4H" secondAttribute="top" id="0eY-1Q-fY5"/>
+                        <constraint firstItem="whi-jN-odv" firstAttribute="leading" secondItem="xxd-Rj-n4H" secondAttribute="leading" constant="22" id="77b-d3-fXo"/>
+                        <constraint firstItem="pii-x4-YtS" firstAttribute="leading" secondItem="3o6-xF-kdP" secondAttribute="trailing" constant="20" id="8oP-dH-jon"/>
+                        <constraint firstItem="Hbd-Au-HVO" firstAttribute="top" secondItem="cJu-Gs-vEw" secondAttribute="bottom" id="AXs-66-0Hc"/>
+                        <constraint firstItem="cJu-Gs-vEw" firstAttribute="top" secondItem="3o6-xF-kdP" secondAttribute="bottom" constant="17" id="DJm-3W-Ppo"/>
+                        <constraint firstAttribute="trailing" secondItem="1X7-2b-H7z" secondAttribute="trailing" id="Fg7-FP-q51"/>
+                        <constraint firstItem="pii-x4-YtS" firstAttribute="centerX" secondItem="xxd-Rj-n4H" secondAttribute="centerX" id="HkN-nL-ZkK"/>
+                        <constraint firstAttribute="trailing" secondItem="d68-wP-nqr" secondAttribute="trailing" constant="10" id="I0M-Uk-GhE"/>
+                        <constraint firstAttribute="trailing" secondItem="cJu-Gs-vEw" secondAttribute="trailing" constant="13" id="Idm-7d-lED"/>
+                        <constraint firstAttribute="bottom" secondItem="KgM-5w-lll" secondAttribute="bottom" constant="20" id="KaZ-ue-dRl"/>
+                        <constraint firstItem="3o6-xF-kdP" firstAttribute="top" secondItem="whi-jN-odv" secondAttribute="bottom" constant="24" id="QqV-SP-EIG"/>
+                        <constraint firstAttribute="trailing" secondItem="Hbd-Au-HVO" secondAttribute="trailing" id="Rgn-1H-6vP"/>
+                        <constraint firstItem="972-C6-GND" firstAttribute="leading" secondItem="pii-x4-YtS" secondAttribute="trailing" constant="20" id="Rlx-5Z-6Ld"/>
+                        <constraint firstItem="pii-x4-YtS" firstAttribute="centerY" secondItem="3o6-xF-kdP" secondAttribute="centerY" id="YaR-Tg-ZcD"/>
+                        <constraint firstItem="whi-jN-odv" firstAttribute="top" secondItem="xxd-Rj-n4H" secondAttribute="top" constant="15" id="ZWU-fk-uQU"/>
+                        <constraint firstItem="cJu-Gs-vEw" firstAttribute="leading" secondItem="xxd-Rj-n4H" secondAttribute="leading" constant="13" id="bD5-oG-A0K"/>
+                        <constraint firstAttribute="bottom" secondItem="Hbd-Au-HVO" secondAttribute="bottom" id="bw7-c0-8jw"/>
+                        <constraint firstItem="KgM-5w-lll" firstAttribute="centerX" secondItem="xxd-Rj-n4H" secondAttribute="centerX" id="iF6-pQ-QO3"/>
+                        <constraint firstItem="Hbd-Au-HVO" firstAttribute="leading" secondItem="xxd-Rj-n4H" secondAttribute="leading" id="mdL-48-aTV"/>
+                        <constraint firstItem="KgM-5w-lll" firstAttribute="top" secondItem="cJu-Gs-vEw" secondAttribute="bottom" constant="15" id="oKd-gp-JKZ"/>
+                        <constraint firstItem="972-C6-GND" firstAttribute="centerY" secondItem="3o6-xF-kdP" secondAttribute="centerY" id="q9s-ei-XU2"/>
+                        <constraint firstItem="d68-wP-nqr" firstAttribute="top" secondItem="xxd-Rj-n4H" secondAttribute="top" constant="11" id="qKv-jP-uao"/>
+                        <constraint firstAttribute="width" constant="300" id="tqA-Z0-lUX"/>
+                    </constraints>
+                    <userDefinedRuntimeAttributes>
+                        <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
+                            <real key="value" value="10"/>
+                        </userDefinedRuntimeAttribute>
+                    </userDefinedRuntimeAttributes>
+                </view>
+            </subviews>
+            <color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.5" colorSpace="custom" customColorSpace="sRGB"/>
+            <constraints>
+                <constraint firstItem="xxd-Rj-n4H" firstAttribute="centerY" secondItem="iN0-l3-epB" secondAttribute="centerY" id="ERe-kV-nbc"/>
+                <constraint firstItem="xxd-Rj-n4H" firstAttribute="centerX" secondItem="iN0-l3-epB" secondAttribute="centerX" id="PTm-7m-F6B"/>
+            </constraints>
+            <nil key="simulatedTopBarMetrics"/>
+            <nil key="simulatedBottomBarMetrics"/>
+            <freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
+            <connections>
+                <outlet property="bottomSpace" destination="KaZ-ue-dRl" id="xJR-P0-MOI"/>
+                <outlet property="containerView" destination="xxd-Rj-n4H" id="xuA-Pw-lve"/>
+            </connections>
+            <point key="canvasLocation" x="104.58015267175573" y="-166.90140845070422"/>
+        </view>
+    </objects>
+    <resources>
+        <image name="cancle_button" width="20" height="20"/>
+        <image name="save_linkIcon" width="44" height="44"/>
+        <image name="share_friendCircle" width="44" height="44"/>
+        <image name="share_friendIcon" width="44" height="44"/>
+        <systemColor name="systemBackgroundColor">
+            <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+        </systemColor>
+    </resources>
+</document>

+ 3 - 2
KulexiuForTeacher/KulexiuForTeacher/Common/Tools/UMShare/KSUMShareManager.h

@@ -10,6 +10,7 @@
 typedef NS_ENUM(NSInteger, KSSHARETYPE) {
     KSSHARETYPE_IMAGE,  // 图片
     KSSHARETYPE_VODEO,  // 视频
+    KSSHARETYPE_URL,    // 链接
 };
 
 typedef void(^KSShareActionCallback)(BOOL isSuccess, NSString * _Nonnull descMessage);
@@ -24,9 +25,9 @@ NS_ASSUME_NONNULL_BEGIN
 
 + (instancetype)shareInstanceShowWithImage:(UIImage *)image showSaveLink:(BOOL)showSaveLink saveLinkUrl:(NSString *)saveLinkUrl url:(NSString *)url shareTitle:(NSString *)shareTitle descMessage:(NSString *)descMessage shareType:(KSSHARETYPE)type showInView:(UIViewController *)ctrl callback:(KSShareActionCallback)callback;
 
-+ (instancetype)shareInstanceToWechatWithImage:(UIImage *)image url:(NSString *)url shareTitle:(NSString *)shareTitle descMessage:(NSString *)descMessage shareType:(KSSHARETYPE)type  callback:(KSShareActionCallback)callback;
++ (instancetype)shareInstanceToWechatWithImage:(UIImage *)image url:(NSString *)url shareTitle:(NSString *)shareTitle descMessage:(NSString *)descMessage shareType:(KSSHARETYPE)type thumImage:(_Nullable id)thumImage callback:(KSShareActionCallback)callback;
 
-+ (instancetype)shareInstanceToWechatCircleWithImage:(UIImage *)image url:(NSString *)url shareTitle:(NSString *)shareTitle descMessage:(NSString *)descMessage shareType:(KSSHARETYPE)type  callback:(KSShareActionCallback)callback;
++ (instancetype)shareInstanceToWechatCircleWithImage:(UIImage *)image url:(NSString *)url shareTitle:(NSString *)shareTitle descMessage:(NSString *)descMessage shareType:(KSSHARETYPE)type thumImage:(_Nullable id)thumImage callback:(KSShareActionCallback)callback;
 @end
 
 NS_ASSUME_NONNULL_END

+ 20 - 13
KulexiuForTeacher/KulexiuForTeacher/Common/Tools/UMShare/KSUMShareManager.m

@@ -29,6 +29,8 @@
 
 @property (nonatomic, strong) NSString *saveLinkUrl;
 
+@property (nonatomic, strong) id thumImage;
+
 @end
 
 @implementation KSUMShareManager
@@ -83,7 +85,7 @@
         if (platformType == UMSocialPlatformType_UserDefine_Begin+1) { // 分享到群组
             if (weakSelf.shareType == KSSHARETYPE_IMAGE) {
                 KSImageShareViewController *shareGroupCtrl = [[KSImageShareViewController alloc] init];
-                shareGroupCtrl.shareImage = self.shareImage;
+                shareGroupCtrl.shareImage = weakSelf.shareImage;
                 [shareGroupCtrl shareGroupCallback:^(BOOL isSuccess, NSString *descMsg) {
                     if (weakSelf.callback) {
                         weakSelf.callback(isSuccess,descMsg);
@@ -114,19 +116,18 @@
             }
             NSString *descMessage = @"";
             if (weakSelf.shareMessage) {
-                descMessage = self.shareMessage;
+                descMessage = weakSelf.shareMessage;
             }
             // 创建分享对象
             if (weakSelf.shareType == KSSHARETYPE_IMAGE) {
                 UMShareImageObject *shareObj = [UMShareImageObject shareObjectWithTitle:shareTitle descr:descMessage thumImage:[UIImage imageNamed:@"shareImage"]];
-                shareObj.shareImage = self.shareImage;
+                shareObj.shareImage = weakSelf.shareImage;
                 //分享消息对象设置分享内容对象
                 messageObject.shareObject = shareObj;
             }
             else if (weakSelf.shareType == KSSHARETYPE_VODEO) {
                 UMShareWebpageObject *shareObj = [UMShareWebpageObject shareObjectWithTitle:shareTitle descr:descMessage thumImage:[UIImage imageNamed:@"shareImage"]];
-                //            NSString *shareUrl = [self.shareUrl stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
-                shareObj.webpageUrl = self.shareUrl;
+                shareObj.webpageUrl = weakSelf.shareUrl;
                 //分享消息对象设置分享内容对象
                 messageObject.shareObject = shareObj;
             }
@@ -162,13 +163,15 @@
     return [NSObject getKeyWindow];
 }
 
-+ (instancetype)shareInstanceToWechatWithImage:(UIImage *)image url:(NSString *)url shareTitle:(NSString *)shareTitle descMessage:(NSString *)descMessage shareType:(KSSHARETYPE)type  callback:(KSShareActionCallback)callback {
++ (instancetype)shareInstanceToWechatWithImage:(UIImage *)image url:(NSString *)url shareTitle:(NSString *)shareTitle descMessage:(NSString *)descMessage shareType:(KSSHARETYPE)type thumImage:(_Nullable id)thumImage callback:(KSShareActionCallback)callback {
     KSUMShareManager *manager = [[self alloc] init];
     manager.shareType = type;
     manager.shareImage = image;
     manager.shareUrl = url;
     manager.shareTitle = shareTitle;
     manager.shareMessage = descMessage;
+    manager.thumImage = thumImage;
+
     if (callback) {
         manager.callback = callback;
     }
@@ -176,13 +179,15 @@
     return manager;
 }
 
-+ (instancetype)shareInstanceToWechatCircleWithImage:(UIImage *)image url:(NSString *)url shareTitle:(NSString *)shareTitle descMessage:(NSString *)descMessage shareType:(KSSHARETYPE)type  callback:(KSShareActionCallback)callback {
++ (instancetype)shareInstanceToWechatCircleWithImage:(UIImage *)image url:(NSString *)url shareTitle:(NSString *)shareTitle descMessage:(NSString *)descMessage shareType:(KSSHARETYPE)type thumImage:(_Nullable id)thumImage callback:(KSShareActionCallback)callback {
     KSUMShareManager *manager = [[self alloc] init];
     manager.shareType = type;
     manager.shareImage = image;
     manager.shareUrl = url;
     manager.shareTitle = shareTitle;
     manager.shareMessage = descMessage;
+    manager.thumImage = thumImage;
+
     if (callback) {
         manager.callback = callback;
     }
@@ -217,9 +222,10 @@
         //分享消息对象设置分享内容对象
         messageObject.shareObject = shareObj;
     }
-    else if (self.shareType == KSSHARETYPE_VODEO) {
-        UMShareWebpageObject *shareObj = [UMShareWebpageObject shareObjectWithTitle:shareTitle descr:descMessage thumImage:[UIImage imageNamed:@"shareImage"]];
-        //            NSString *shareUrl = [self.shareUrl stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
+    else if (self.shareType == KSSHARETYPE_VODEO || self.shareType == KSSHARETYPE_URL) {
+        id thumImage = self.thumImage == nil ? [UIImage imageNamed:@"shareImage"] : self.thumImage;
+
+        UMShareWebpageObject *shareObj = [UMShareWebpageObject shareObjectWithTitle:shareTitle descr:descMessage thumImage:thumImage];
         shareObj.webpageUrl = self.shareUrl;
         //分享消息对象设置分享内容对象
         messageObject.shareObject = shareObj;
@@ -275,9 +281,10 @@
         //分享消息对象设置分享内容对象
         messageObject.shareObject = shareObj;
     }
-    else if (self.shareType == KSSHARETYPE_VODEO) {
-        UMShareWebpageObject *shareObj = [UMShareWebpageObject shareObjectWithTitle:shareTitle descr:descMessage thumImage:[UIImage imageNamed:@"shareImage"]];
-        //            NSString *shareUrl = [self.shareUrl stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
+    else if (self.shareType == KSSHARETYPE_VODEO || self.shareType == KSSHARETYPE_URL) {
+        id thumImage = self.thumImage == nil ? [UIImage imageNamed:@"shareImage"] : self.thumImage;
+
+        UMShareWebpageObject *shareObj = [UMShareWebpageObject shareObjectWithTitle:shareTitle descr:descMessage thumImage:thumImage];
         shareObj.webpageUrl = self.shareUrl;
         //分享消息对象设置分享内容对象
         messageObject.shareObject = shareObj;

BIN
KulexiuForTeacher/KulexiuForTeacher/shareImage@2x.png