Explorar o código

圈子页面数据加载完成

南鑫林 %!s(int64=5) %!d(string=hai) anos
pai
achega
4213d4c843
Modificáronse 37 ficheiros con 1788 adicións e 109 borrados
  1. 64 4
      RainbowPlanet/RainbowPlanet.xcodeproj/project.pbxproj
  2. 126 0
      RainbowPlanet/RainbowPlanet/Model/CommunityModel/CommunityCircleMessagesModel.swift
  3. 0 45
      RainbowPlanet/RainbowPlanet/Modules/CircleModule/Circle/View/CircleEssenceView.swift
  4. 471 0
      RainbowPlanet/RainbowPlanet/Modules/CircleModule/Circle/View/CircleEssenceView/CircleEssenceView.swift
  5. 56 3
      RainbowPlanet/RainbowPlanet/Modules/CircleModule/Circle/View/CircleHeaderView.swift
  6. 0 44
      RainbowPlanet/RainbowPlanet/Modules/CircleModule/Circle/View/CircleLeavingMessageView.swift
  7. 82 0
      RainbowPlanet/RainbowPlanet/Modules/CircleModule/Circle/View/CircleLeavingMessageView/Cell/CircleLeavingMessageCommentListContentTableViewCell.swift
  8. 51 0
      RainbowPlanet/RainbowPlanet/Modules/CircleModule/Circle/View/CircleLeavingMessageView/Cell/CircleLeavingMessageCommentListFooterView.swift
  9. 136 0
      RainbowPlanet/RainbowPlanet/Modules/CircleModule/Circle/View/CircleLeavingMessageView/Cell/CircleLeavingMessageCommentListTableViewCell.swift
  10. 119 0
      RainbowPlanet/RainbowPlanet/Modules/CircleModule/Circle/View/CircleLeavingMessageView/Cell/CircleLeavingMessageCommentTopStepTableViewCell.swift
  11. 107 0
      RainbowPlanet/RainbowPlanet/Modules/CircleModule/Circle/View/CircleLeavingMessageView/Cell/CircleLeavingMessageContentTableViewCell.swift
  12. 158 0
      RainbowPlanet/RainbowPlanet/Modules/CircleModule/Circle/View/CircleLeavingMessageView/Cell/CircleLeavingMessageUserTableViewCell.swift
  13. 200 0
      RainbowPlanet/RainbowPlanet/Modules/CircleModule/Circle/View/CircleLeavingMessageView/CircleLeavingMessageView.swift
  14. 14 6
      RainbowPlanet/RainbowPlanet/Modules/CircleModule/Circle/ViewController/CircleViewController.swift
  15. 1 0
      RainbowPlanet/RainbowPlanet/Modules/CircleModule/CircleUserList/View/CircleUserListTableViewCell.swift
  16. 1 1
      RainbowPlanet/RainbowPlanet/Modules/CircleModule/CircleUserList/ViewController/CircleUserListViewController.swift
  17. 1 1
      RainbowPlanet/RainbowPlanet/Modules/CommunityModule/Community/View/Cell/CardContent/User/CardContentUserTableViewCell.swift
  18. 42 1
      RainbowPlanet/RainbowPlanet/Service/SwiftMoyaService/SwiftMoyaServiceApi/SwiftMoyaServiceCommunity/SwiftMoyaNetWorkServiceCommunity.swift
  19. 27 4
      RainbowPlanet/RainbowPlanet/Service/SwiftMoyaService/SwiftMoyaServiceApi/SwiftMoyaServiceCommunity/SwiftMoyaServiceCommunityApi.swift
  20. 22 0
      RainbowPlanet/RainbowPlanet/Supporting Files/CommunityModule.xcassets/ico_notice.imageset/Contents.json
  21. BIN=BIN
      RainbowPlanet/RainbowPlanet/Supporting Files/CommunityModule.xcassets/ico_notice.imageset/ico_notice@2x.png
  22. BIN=BIN
      RainbowPlanet/RainbowPlanet/Supporting Files/CommunityModule.xcassets/ico_notice.imageset/ico_notice@3x.png
  23. 22 0
      RainbowPlanet/RainbowPlanet/Supporting Files/CommunityModule.xcassets/question_btn_dislike.imageset/Contents.json
  24. BIN=BIN
      RainbowPlanet/RainbowPlanet/Supporting Files/CommunityModule.xcassets/question_btn_dislike.imageset/question_btn_dislike@2x.png
  25. BIN=BIN
      RainbowPlanet/RainbowPlanet/Supporting Files/CommunityModule.xcassets/question_btn_dislike.imageset/question_btn_dislike@3x.png
  26. 22 0
      RainbowPlanet/RainbowPlanet/Supporting Files/CommunityModule.xcassets/question_btn_dislike_pre.imageset/Contents.json
  27. BIN=BIN
      RainbowPlanet/RainbowPlanet/Supporting Files/CommunityModule.xcassets/question_btn_dislike_pre.imageset/question_btn_dislike_pre@2x.png
  28. BIN=BIN
      RainbowPlanet/RainbowPlanet/Supporting Files/CommunityModule.xcassets/question_btn_dislike_pre.imageset/question_btn_dislike_pre@3x.png
  29. 22 0
      RainbowPlanet/RainbowPlanet/Supporting Files/CommunityModule.xcassets/question_btn_like.imageset/Contents.json
  30. BIN=BIN
      RainbowPlanet/RainbowPlanet/Supporting Files/CommunityModule.xcassets/question_btn_like.imageset/question_btn_like@2x.png
  31. BIN=BIN
      RainbowPlanet/RainbowPlanet/Supporting Files/CommunityModule.xcassets/question_btn_like.imageset/question_btn_like@3x.png
  32. 22 0
      RainbowPlanet/RainbowPlanet/Supporting Files/CommunityModule.xcassets/question_btn_like_pre.imageset/Contents.json
  33. BIN=BIN
      RainbowPlanet/RainbowPlanet/Supporting Files/CommunityModule.xcassets/question_btn_like_pre.imageset/question_btn_like_pre@2x.png
  34. BIN=BIN
      RainbowPlanet/RainbowPlanet/Supporting Files/CommunityModule.xcassets/question_btn_like_pre.imageset/question_btn_like_pre@3x.png
  35. 22 0
      RainbowPlanet/RainbowPlanet/Supporting Files/CommunityModule.xcassets/question_ico_img.imageset/Contents.json
  36. BIN=BIN
      RainbowPlanet/RainbowPlanet/Supporting Files/CommunityModule.xcassets/question_ico_img.imageset/question_ico_img@2x.png
  37. BIN=BIN
      RainbowPlanet/RainbowPlanet/Supporting Files/CommunityModule.xcassets/question_ico_img.imageset/question_ico_img@3x.png

+ 64 - 4
RainbowPlanet/RainbowPlanet.xcodeproj/project.pbxproj

@@ -475,6 +475,13 @@
 		A7F688FC2356F0C3000C313F /* CircleUserListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7F688FB2356F0C3000C313F /* CircleUserListViewController.swift */; };
 		A7F689002356F2A6000C313F /* CircleUserListTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7F688FF2356F2A6000C313F /* CircleUserListTableViewCell.swift */; };
 		A7F689022356F575000C313F /* CommunityCircleUserListModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7F689012356F574000C313F /* CommunityCircleUserListModel.swift */; };
+		A7F689072357153B000C313F /* CircleLeavingMessageUserTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7F689062357153B000C313F /* CircleLeavingMessageUserTableViewCell.swift */; };
+		A7F6890923571B9D000C313F /* CommunityCircleMessagesModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7F6890823571B9D000C313F /* CommunityCircleMessagesModel.swift */; };
+		A7F6890B2357233D000C313F /* CircleLeavingMessageContentTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7F6890A2357233D000C313F /* CircleLeavingMessageContentTableViewCell.swift */; };
+		A7F6890E23572CD6000C313F /* CircleLeavingMessageCommentListTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7F6890D23572CD6000C313F /* CircleLeavingMessageCommentListTableViewCell.swift */; };
+		A7F6891023572D15000C313F /* CircleLeavingMessageCommentListContentTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7F6890F23572D15000C313F /* CircleLeavingMessageCommentListContentTableViewCell.swift */; };
+		A7F6891423572D69000C313F /* CircleLeavingMessageCommentListFooterView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7F6891323572D69000C313F /* CircleLeavingMessageCommentListFooterView.swift */; };
+		A7F68916235738EB000C313F /* CircleLeavingMessageCommentTopStepTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7F68915235738EB000C313F /* CircleLeavingMessageCommentTopStepTableViewCell.swift */; };
 		A7FF1577228C824300A85748 /* OrderModule.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = A7FF1576228C824300A85748 /* OrderModule.xcassets */; };
 		A7FF1598228D092A00A85748 /* OrderListModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7FF1597228D092A00A85748 /* OrderListModel.swift */; };
 		A7FF159C228D9E3D00A85748 /* OrderRefundDetailModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7FF159B228D9E3C00A85748 /* OrderRefundDetailModel.swift */; };
@@ -1183,6 +1190,13 @@
 		A7F688FB2356F0C3000C313F /* CircleUserListViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CircleUserListViewController.swift; sourceTree = "<group>"; };
 		A7F688FF2356F2A6000C313F /* CircleUserListTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CircleUserListTableViewCell.swift; sourceTree = "<group>"; };
 		A7F689012356F574000C313F /* CommunityCircleUserListModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CommunityCircleUserListModel.swift; sourceTree = "<group>"; };
+		A7F689062357153B000C313F /* CircleLeavingMessageUserTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CircleLeavingMessageUserTableViewCell.swift; sourceTree = "<group>"; };
+		A7F6890823571B9D000C313F /* CommunityCircleMessagesModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CommunityCircleMessagesModel.swift; sourceTree = "<group>"; };
+		A7F6890A2357233D000C313F /* CircleLeavingMessageContentTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CircleLeavingMessageContentTableViewCell.swift; sourceTree = "<group>"; };
+		A7F6890D23572CD6000C313F /* CircleLeavingMessageCommentListTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CircleLeavingMessageCommentListTableViewCell.swift; sourceTree = "<group>"; };
+		A7F6890F23572D15000C313F /* CircleLeavingMessageCommentListContentTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CircleLeavingMessageCommentListContentTableViewCell.swift; sourceTree = "<group>"; };
+		A7F6891323572D69000C313F /* CircleLeavingMessageCommentListFooterView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CircleLeavingMessageCommentListFooterView.swift; sourceTree = "<group>"; };
+		A7F68915235738EB000C313F /* CircleLeavingMessageCommentTopStepTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CircleLeavingMessageCommentTopStepTableViewCell.swift; sourceTree = "<group>"; };
 		A7FF1576228C824300A85748 /* OrderModule.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = OrderModule.xcassets; sourceTree = "<group>"; };
 		A7FF1597228D092A00A85748 /* OrderListModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OrderListModel.swift; sourceTree = "<group>"; };
 		A7FF159B228D9E3C00A85748 /* OrderRefundDetailModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OrderRefundDetailModel.swift; sourceTree = "<group>"; };
@@ -3336,10 +3350,10 @@
 		A784F2C223544B0800E49140 /* CircleModule */ = {
 			isa = PBXGroup;
 			children = (
+				A784F2C323544B1B00E49140 /* Circle */,
 				A7F688FA2356F069000C313F /* CircleUserList */,
 				A7F688ED2355C17B000C313F /* CircleQuestionsAnswers */,
 				A7F688EA2355AA45000C313F /* CircleShareContent */,
-				A784F2C323544B1B00E49140 /* Circle */,
 			);
 			path = CircleModule;
 			sourceTree = "<group>";
@@ -3364,9 +3378,9 @@
 		A784F2CA23544F0100E49140 /* View */ = {
 			isa = PBXGroup;
 			children = (
-				A7F688E423556077000C313F /* CircleHeaderView.swift */,
-				A7F688E623556EA1000C313F /* CircleEssenceView.swift */,
-				A7F688E823556F6E000C313F /* CircleLeavingMessageView.swift */,
+				A7F6890523571437000C313F /* CircleHeaderView */,
+				A7F6890323571413000C313F /* CircleEssenceView */,
+				A7F6890423571426000C313F /* CircleLeavingMessageView */,
 			);
 			path = View;
 			sourceTree = "<group>";
@@ -4127,6 +4141,7 @@
 		A7D5F25D22C0612A00F8E9AF /* CommunityModel */ = {
 			isa = PBXGroup;
 			children = (
+				A7F6890823571B9D000C313F /* CommunityCircleMessagesModel.swift */,
 				A7F689012356F574000C313F /* CommunityCircleUserListModel.swift */,
 				A7F688F82356C975000C313F /* CommunityCircleSubmitAnswerModel.swift */,
 				A7F688F02355C3E9000C313F /* CommunityCircleQuestionsAnswersModel.swift */,
@@ -4584,6 +4599,44 @@
 			path = View;
 			sourceTree = "<group>";
 		};
+		A7F6890323571413000C313F /* CircleEssenceView */ = {
+			isa = PBXGroup;
+			children = (
+				A7F688E623556EA1000C313F /* CircleEssenceView.swift */,
+			);
+			path = CircleEssenceView;
+			sourceTree = "<group>";
+		};
+		A7F6890423571426000C313F /* CircleLeavingMessageView */ = {
+			isa = PBXGroup;
+			children = (
+				A7F6890C23572CA5000C313F /* Cell */,
+				A7F688E823556F6E000C313F /* CircleLeavingMessageView.swift */,
+			);
+			path = CircleLeavingMessageView;
+			sourceTree = "<group>";
+		};
+		A7F6890523571437000C313F /* CircleHeaderView */ = {
+			isa = PBXGroup;
+			children = (
+				A7F688E423556077000C313F /* CircleHeaderView.swift */,
+			);
+			path = CircleHeaderView;
+			sourceTree = "<group>";
+		};
+		A7F6890C23572CA5000C313F /* Cell */ = {
+			isa = PBXGroup;
+			children = (
+				A7F689062357153B000C313F /* CircleLeavingMessageUserTableViewCell.swift */,
+				A7F6890A2357233D000C313F /* CircleLeavingMessageContentTableViewCell.swift */,
+				A7F6890D23572CD6000C313F /* CircleLeavingMessageCommentListTableViewCell.swift */,
+				A7F6890F23572D15000C313F /* CircleLeavingMessageCommentListContentTableViewCell.swift */,
+				A7F6891323572D69000C313F /* CircleLeavingMessageCommentListFooterView.swift */,
+				A7F68915235738EB000C313F /* CircleLeavingMessageCommentTopStepTableViewCell.swift */,
+			);
+			path = Cell;
+			sourceTree = "<group>";
+		};
 		BD01B1F722BC673900CE9F36 /* PublishTakePhoto */ = {
 			isa = PBXGroup;
 			children = (
@@ -5785,6 +5838,7 @@
 				A77BB46B2329EFDB00DCAE32 /* NXLPermissionMotion.swift in Sources */,
 				A7C0FDF522B65FE000BC1E86 /* FeaturedTopicsCollectionViewCell.swift in Sources */,
 				A7BB6857226965C100AB07A2 /* SelfRecommendationHeaderCollectionReusableView.swift in Sources */,
+				A7F6890B2357233D000C313F /* CircleLeavingMessageContentTableViewCell.swift in Sources */,
 				BDE3045F228554CA001D050F /* ProductCartAmountModel.swift in Sources */,
 				A7BB68672269B1DD00AB07A2 /* AddressPOIViewController.swift in Sources */,
 				A7284A7322546460000BAEC4 /* SwiftMoyaServicePayApi.swift in Sources */,
@@ -5810,6 +5864,8 @@
 				A73D7C682268A032002A4CE3 /* SwiftyStarRatingView.swift in Sources */,
 				BD13B6B922BA0327008BB323 /* PublishEditController.swift in Sources */,
 				A71AA5102272156A008FF1A5 /* ExpressAddressListViewController.swift in Sources */,
+				A7F6891023572D15000C313F /* CircleLeavingMessageCommentListContentTableViewCell.swift in Sources */,
+				A7F6891423572D69000C313F /* CircleLeavingMessageCommentListFooterView.swift in Sources */,
 				A7D07CC922B7769600186014 /* RainbowBeanPhysicalCollectionViewCell.swift in Sources */,
 				A74144A7232F28370062FB6F /* PublishConfirmPhotoNewViewController.swift in Sources */,
 				A78168F0234203D700033496 /* PublishNewEffectBeautyCollectionViewCell.swift in Sources */,
@@ -5822,6 +5878,7 @@
 				A7D46090227617D200A5A54E /* SQLModel.swift in Sources */,
 				A790706522B9DFAD008CE279 /* TextLimitTool.m in Sources */,
 				A7811C81231AB05300C2D8DE /* CommunityReportViewController.swift in Sources */,
+				A7F6890E23572CD6000C313F /* CircleLeavingMessageCommentListTableViewCell.swift in Sources */,
 				A72C01222275404A0065E0C3 /* ProvinceCityAreaModel.swift in Sources */,
 				A7FF159C228D9E3D00A85748 /* OrderRefundDetailModel.swift in Sources */,
 				A76B786922CE04940047EC1B /* CommunityRecommendDetailHTMLTableViewCell.swift in Sources */,
@@ -5960,6 +6017,7 @@
 				BDE8AD1622CC59EE00E03C65 /* CommunityVideoListModel.swift in Sources */,
 				A7284401224DBB7700F82F30 /* SwiftMoyaNetWorkServiceUser.swift in Sources */,
 				A7C0FDE922B4BC5600BC1E86 /* CardContentCommentListContentTableViewCell.swift in Sources */,
+				A7F689072357153B000C313F /* CircleLeavingMessageUserTableViewCell.swift in Sources */,
 				A77BB4632329EF1200DCAE32 /* NXLPermissionNotification.swift in Sources */,
 				A7EF3E0C23013EDE001E4D26 /* CommunityImageAuthModel.swift in Sources */,
 				A7811C8C231AD26300C2D8DE /* OtherPersonalCenterReportSureView.swift in Sources */,
@@ -6218,6 +6276,7 @@
 				A7F2D6DF22B25B5D0093000B /* CardContentPicVideoCollectionViewLayout.swift in Sources */,
 				A7D77DF422DDEED10048D5F6 /* FloorHeaderViewFloorHeaderView.swift in Sources */,
 				A72623E722C469B700AEF875 /* SearchMemberListModel.swift in Sources */,
+				A7F68916235738EB000C313F /* CircleLeavingMessageCommentTopStepTableViewCell.swift in Sources */,
 				A7A98DFD227E84F4005306E9 /* SwiftMoyaServiceProductApi.swift in Sources */,
 				BD01B1FB22BC673A00CE9F36 /* PublishTakePhotoController.swift in Sources */,
 				A7D07CCF22B77E0200186014 /* UserPersonalCenterOrderCollectionViewCell.swift in Sources */,
@@ -6244,6 +6303,7 @@
 				A770E5E022CF19FA00CBD0A4 /* CommunityRouterModuleType.swift in Sources */,
 				BD29A92E228F99780018CFC3 /* OrderCommentParameterModel.swift in Sources */,
 				A7284440224DFACD00F82F30 /* InfoModel.swift in Sources */,
+				A7F6890923571B9D000C313F /* CommunityCircleMessagesModel.swift in Sources */,
 				A72A72B522321DE000B21995 /* Extension+UITextView.swift in Sources */,
 				A7DAB33922DC2B83005B964E /* ShareRouterModuleType.swift in Sources */,
 				BDD9377722DF3B47002D11B3 /* PublishMusicListController.swift in Sources */,

+ 126 - 0
RainbowPlanet/RainbowPlanet/Model/CommunityModel/CommunityCircleMessagesModel.swift

@@ -0,0 +1,126 @@
+//
+//	CommunityCircleMessagesModel.swift
+//	Model file generated using JSONExport: https://github.com/Ahmed-Ali/JSONExport
+
+import Foundation 
+import ObjectMapper
+
+
+class CommunityCircleMessagesModel : NSObject, Mappable{
+
+	var data : [CommunityCircleMessageModel]?
+	var pagination : PaginationModel?
+
+
+	class func newInstance(map: Map) -> Mappable?{
+		return CommunityCircleMessagesModel()
+	}
+	required init?(map: Map){}
+	private override init(){}
+
+	func mapping(map: Map)
+	{
+		data <- map["data"]
+		pagination <- map["pagination"]
+		
+	}
+
+}
+
+class CommunityCircleMessageModel : NSObject, Mappable{
+    
+    var action : Int?
+    var bad : Int?
+    var comment : [CommunityCircleMessageCommentModel]?
+    var commentCount : Int?
+    var content : String?
+    var createdAt : String?
+    var good : Int?
+    var id : Int?
+    var imgs : [String]?
+    var user : CommunityCircleMessageUserModel?
+    var contentHeight : CGFloat?
+    
+    
+    class func newInstance(map: Map) -> Mappable?{
+        return CommunityCircleMessageModel()
+    }
+    required init?(map: Map){}
+    private override init(){}
+    
+    func mapping(map: Map)
+    {
+        action <- map["action"]
+        bad <- map["bad"]
+        comment <- map["comment"]
+        commentCount <- map["comment_count"]
+        content <- map["content"]
+        createdAt <- map["created_at"]
+        good <- map["good"]
+        id <- map["id"]
+        imgs <- map["imgs"]
+        user <- map["user"]
+        
+    }
+    
+}
+
+class CommunityCircleMessageCommentModel : NSObject, Mappable{
+    
+    var content : String?
+    var id : Int?
+    var isDelete : Int?
+    var reply : [String]?
+    var replyCount : Int?
+    var uid : Int?
+    var username : String?
+    
+    
+    class func newInstance(map: Map) -> Mappable?{
+        return CommunityCircleMessageCommentModel()
+    }
+    required init?(map: Map){}
+    private override init(){}
+    
+    func mapping(map: Map)
+    {
+        content <- map["content"]
+        id <- map["id"]
+        isDelete <- map["is_delete"]
+        reply <- map["reply"]
+        replyCount <- map["reply_count"]
+        uid <- map["uid"]
+        username <- map["username"]
+        
+    }
+    
+}
+
+
+class CommunityCircleMessageUserModel : NSObject, Mappable{
+    
+    var avatar : String?
+    var gender : Int?
+    var inviteCode : String?
+    var uid : Int?
+    var username : String?
+    
+    
+    class func newInstance(map: Map) -> Mappable?{
+        return CommunityCircleMessageUserModel()
+    }
+    required init?(map: Map){}
+    private override init(){}
+    
+    func mapping(map: Map)
+    {
+        avatar <- map["avatar"]
+        gender <- map["gender"]
+        inviteCode <- map["invite_code"]
+        uid <- map["uid"]
+        username <- map["username"]
+        
+    }
+    
+}
+

+ 0 - 45
RainbowPlanet/RainbowPlanet/Modules/CircleModule/Circle/View/CircleEssenceView.swift

@@ -1,45 +0,0 @@
-//
-//  CircleEssenceView.swift
-//  RainbowPlanet
-//
-//  Created by 南鑫林 on 2019/10/15.
-//  Copyright © 2019 RainbowPlanet. All rights reserved.
-//
-
-import UIKit
-import JXPagingView
-
-class CircleEssenceView: BaseView {
-    
-    deinit {
-        listViewDidScrollCallback = nil
-        if observe != nil {
-            NotificationCenter.default.removeObserver(observe!)
-        }
-    }
-    weak var observe : NSObjectProtocol?
-    var listViewDidScrollCallback: ((UIScrollView) -> ())?
-
-    /*
-    // Only override draw() if you perform custom drawing.
-    // An empty implementation adversely affects performance during animation.
-    override func draw(_ rect: CGRect) {
-        // Drawing code
-    }
-    */
-
-}
-
-extension CircleEssenceView : JXPagingViewListViewDelegate {
-    public func listView() -> UIView {
-        return self
-    }
-    
-    public func listViewDidScrollCallback(callback: @escaping (UIScrollView) -> ()) {
-        self.listViewDidScrollCallback = callback
-    }
-    
-    public func listScrollView() -> UIScrollView {
-        return UIScrollView()
-    }
-}

+ 471 - 0
RainbowPlanet/RainbowPlanet/Modules/CircleModule/Circle/View/CircleEssenceView/CircleEssenceView.swift

@@ -0,0 +1,471 @@
+//
+//  CircleEssenceView.swift
+//  RainbowPlanet
+//
+//  Created by 南鑫林 on 2019/10/15.
+//  Copyright © 2019 RainbowPlanet. All rights reserved.
+//
+
+import UIKit
+import JXPagingView
+import SwiftyMediator
+
+class CircleEssenceView: BaseView {
+    
+    deinit {
+        listViewDidScrollCallback = nil
+        if observe != nil {
+            NotificationCenter.default.removeObserver(observe!)
+        }
+    }
+    weak var observe : NSObjectProtocol?
+    var listViewDidScrollCallback: ((UIScrollView) -> ())?
+    var circleId : Int?
+    var communityRecommendDataModels = Array<CommunityRecommendDataModel>()
+    /// 评论需要的模型
+    var communityRecommendDataModel : CommunityRecommendDataModel?
+    
+    override func setupViews() {
+        addSubview(tableView)
+    }
+    
+    override func setupLayouts() {
+        tableView.snp.makeConstraints { (make) in
+            make.top.left.right.equalToSuperview()
+            make.height.equalTo(kScreenHeight - kNavBarTotalHeight - 44)
+        }
+    }
+    
+    override func setupData() {
+        
+        tableView.addHeader(withBeginRefresh: true, animation: false) {
+            [weak self] (page) in
+            self?.communityCircleArticlesApi(page: page)
+        }
+        tableView.addAutoNormalFooter(withAutomaticallyRefresh: true, loadMoreBlock: {
+            [weak self] (page) in
+            self?.communityCircleArticlesApi(page: page)
+        })
+        
+        observe = NotificationCenter.default.addObserver(forName: NSNotification.Name("followApi"), object: nil, queue: OperationQueue.main) { [weak self] (notification) in
+            let followStatusModel = notification.object as? FollowStatusModel
+            if !(self?.communityRecommendDataModels.isEmpty ?? true) {
+                for communityRecommendDataModel in (self?.communityRecommendDataModels)! {
+                    if communityRecommendDataModel.uid == followStatusModel?.uid {
+                        communityRecommendDataModel.isFollow = followStatusModel?.isFollowStatus
+                    }
+                }
+            }
+            self?.tableView.reloadData()
+        }
+        observe = NotificationCenter.default.addObserver(forName: NSNotification.Name("unlikeApi"), object: nil, queue: OperationQueue.main) { [weak self] (notification) in
+            let followStatusModel = notification.object as? FollowStatusModel
+            if !(self?.communityRecommendDataModels.isEmpty ?? true) {
+                for communityRecommendDataModel in (self?.communityRecommendDataModels)! {
+                    if communityRecommendDataModel.id == followStatusModel?.postId {
+                        communityRecommendDataModel.isDislike = followStatusModel?.isFollowStatus
+                    }
+                }
+            }
+            self?.tableView.reloadData()
+        }
+        
+        observe = NotificationCenter.default.addObserver(forName: NSNotification.Name("islikeApi"), object: nil, queue: OperationQueue.main) { [weak self] (notification) in
+            let followStatusModel = notification.object as? FollowStatusModel
+            if !(self?.communityRecommendDataModels.isEmpty ?? true) {
+                for communityRecommendDataModel in (self?.communityRecommendDataModels)! {
+                    if communityRecommendDataModel.id == followStatusModel?.postId {
+                        communityRecommendDataModel.isLike = followStatusModel?.isFollowStatus
+                    }
+                }
+            }
+            self?.tableView.reloadData()
+        }
+        
+        observe = NotificationCenter.default.addObserver(forName: NSNotification.Name("isCollectApi"), object: nil, queue: OperationQueue.main) { [weak self] (notification) in
+            let followStatusModel = notification.object as? FollowStatusModel
+            if !(self?.communityRecommendDataModels.isEmpty ?? true) {
+                for communityRecommendDataModel in (self?.communityRecommendDataModels)! {
+                    if communityRecommendDataModel.id == followStatusModel?.postId {
+                        communityRecommendDataModel.isCollect = followStatusModel?.isFollowStatus
+                    }
+                }
+            }
+            self?.tableView.reloadData()
+        }
+        
+        observe = NotificationCenter.default.addObserver(forName: NSNotification.Name("isCommnetLikeApi"), object: nil, queue: OperationQueue.main) { [weak self] (notification) in
+            let followStatusModel = notification.object as? FollowStatusModel
+            if !(self?.communityRecommendDataModels.isEmpty ?? true) {
+                for communityRecommendDataModel in (self?.communityRecommendDataModels)! {
+                    if communityRecommendDataModel.id == followStatusModel?.postId {
+                        if !(communityRecommendDataModel.comment?.isEmpty ?? true ){
+                            for communityRecommendCommentModel in communityRecommendDataModel.comment! {
+                                if communityRecommendCommentModel.id == followStatusModel?.commnetId {
+                                    communityRecommendCommentModel.isLike = followStatusModel?.isFollowStatus
+                                    communityRecommendCommentModel.likeCount = followStatusModel?.commentLikeCount
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+            self?.tableView.reloadData()
+        }
+        
+        observe = NotificationCenter.default.addObserver(forName: NSNotification.Name("communityDeletePostApi"), object: nil, queue: OperationQueue.main) { [weak self] (notification) in
+            let postId = notification.object as? Int
+            if !(self?.communityRecommendDataModels.isEmpty ?? true) {
+                for (index,communityRecommendDataModel) in (self?.communityRecommendDataModels)!.enumerated() {
+                    if communityRecommendDataModel.id == postId {
+                        self?.communityRecommendDataModels.remove(at: index)
+                    }
+                }
+                self?.tableView.reloadData()
+            }
+        }
+    }
+    
+    
+    private lazy var tableView: UITableView = {
+        let tableView = UITableView(frame: CGRect.zero, style: UITableView.Style.grouped)
+        tableView.separatorStyle = .none
+        tableView.backgroundColor = UIColor.clear
+        tableView.dataSource = self
+        tableView.delegate = self
+        return tableView
+    }()
+    
+    /// 帖子
+    func communityCircleArticlesApi(page:Int) {
+        SwiftMoyaNetWorkServiceCommunity.shared().communityCircleArticlesApi(id: circleId ?? 0, page: page, completion: {
+            [weak self] (communityRecommendFeedModel) -> (Void) in
+            let communityRecommendFeedModel = communityRecommendFeedModel as? CommunityRecommendFeedModel
+            if communityRecommendFeedModel?.pagination?.currentPage == 1{
+                self?.communityRecommendDataModels.removeAll()
+                self?.tableView.resetNoMoreData()
+            }
+            self?.communityRecommendDataModels = (self?.communityRecommendDataModels)! + (communityRecommendFeedModel?.data!)!
+            self?.tableView.reloadData()
+            MJRefreshManager.mjRefreshManagerPaginationNoHiddenFooter(tableView: self?.tableView, pagination: communityRecommendFeedModel?.pagination)
+        }) {
+            [weak self] loadingStatus in
+            MJRefreshManager.mjRefreshManagerLoadingStatus(tableView: self?.tableView,loadingStatus: loadingStatus)
+        }
+    }
+    
+    /// 删除帖子
+    func communityDeleteApi(postId:Int,section:Int) {
+        SwiftMoyaNetWorkServiceCommunity.shared().communityDeleteApi(postId: postId) { [weak self] (data) -> (Void) in
+            self?.communityRecommendDataModels.remove(at: section)
+            self?.tableView.reloadData()
+        }
+    }
+    
+    /// 评论
+    func communityPostCommentApi(text:String,complete: @escaping () -> ()) {
+        let communityCustomCommnetModel = CommunityCustomCommnetModel()
+        communityCustomCommnetModel.postId = communityRecommendDataModel?.id ?? 0
+        communityCustomCommnetModel.content = text
+        SwiftMoyaNetWorkServiceCommunity.shared().communityPostCommentApi(communityCustomCommnetModel: communityCustomCommnetModel) {
+            [weak self] (communityPostCommentIdModel) -> (Void) in
+            
+            let communityPostCommentIdModel = communityPostCommentIdModel as? CommunityPostCommentIdModel
+            
+            let communityRecommendCommentModel = CommunityRecommendCommentModel()
+            communityRecommendCommentModel.content = text
+            communityRecommendCommentModel.id = communityPostCommentIdModel?.id
+            communityRecommendCommentModel.username = UserModel.shared().getModel()?.username
+            communityRecommendCommentModel.uid = UserModel.shared().getModel()?.uid
+            
+            if  self?.communityRecommendDataModel?.comment?.isEmpty ?? true {
+                self?.communityRecommendDataModel?.comment = Array<CommunityRecommendCommentModel>()
+            }
+            
+            self?.communityRecommendDataModel?.comment?.insert(communityRecommendCommentModel, at: 0)
+            
+            VirusViewModel.shared.comment(communityRecommendDataModel:  self?.communityRecommendDataModel, id: communityPostCommentIdModel?.id ?? 0,content: text)
+            let count = self?.communityRecommendDataModel?.commentCount ?? 0 + 1
+            self?.communityRecommendDataModel?.commentCount = count
+            self?.tableView.reloadData()
+            complete()
+        }
+    }
+    
+    /// 显示键盘
+    func showKeyBoardCommentView() {
+        KeyBoardInputView.show(inputViewResultClosure: {
+            [weak self] (text) in
+            self?.communityPostCommentApi(text: text, complete: {
+                [weak self] in
+                self?.communityRecommendDataModel = nil
+            })
+        }) {
+            [weak self] in
+            self?.communityRecommendDataModel = nil
+        }
+    }
+
+}
+
+extension CircleEssenceView : UITableViewDelegate,UITableViewDataSource {
+    
+    func numberOfSections(in tableView: UITableView) -> Int {
+        return communityRecommendDataModels.isEmpty ? 0 : communityRecommendDataModels.count
+    }
+    
+    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
+        return 6
+    }
+    
+    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
+        let communityRecommendDataModel = communityRecommendDataModels[indexPath.section]
+        switch indexPath.row {
+        //贴子用户
+        case 0:
+            let cell = CardContentUserTableViewCell.cellWith(tableView: tableView, indexPath: indexPath)
+            cell.communityRecommendDataModel = communityRecommendDataModel
+
+            cell.followClosure = {
+                [weak self] in
+                CommunityFollowUserViewModel.shared.follow(communityRecommendDataModel: communityRecommendDataModel, communityRecommendDataModels: (self?.communityRecommendDataModels)!, tableView: (self?.tableView)!)
+            }
+            cell.likeClosure = {[weak self]  y in
+                if UserModel.shared().isEqualUid(uid: communityRecommendDataModel.uid ?? 0) {
+                    CardContentUserDeleteView.sheetDeleteView(y: y, sureClosure: { [weak self] (cardContentUserDeleteView) in
+                        self?.communityDeleteApi(postId: communityRecommendDataModel.id ?? 0, section: indexPath.section)
+                        
+                    })
+                }else {
+                    VirusViewModel.shared.like(communityRecommendDataModel: communityRecommendDataModel, y: y, tableView: (self?.tableView)!)
+                    
+                }
+            }
+            return cell
+            
+        //内容标题
+        case 1:
+            
+            if PostType(rawValue: communityRecommendDataModel.type ?? "html") == .html {
+                let cell = CardTitleHTMLTableViewCell.cellWith(tableView: tableView, indexPath: indexPath)
+                cell.communityRecommendDataModel = communityRecommendDataModel
+                return cell
+            }else {
+                let cell = CardContentTitleTableViewCell.cellWith(tableView: tableView, indexPath: indexPath)
+                cell.communityRecommendDataModel = communityRecommendDataModel
+                return cell
+            }
+        //图片视频
+        case 2:
+            if PostType(rawValue: communityRecommendDataModel.type ?? "html") == .html {
+                let cell = CardContentPicHTMLTableViewCell.cellWith(tableView: tableView, indexPath: indexPath)
+                cell.communityRecommendDataModel = communityRecommendDataModel
+                return cell
+            }else {
+                let cell = CardContentPicVideoTableViewCell.cellWith(tableView: tableView, indexPath: indexPath)
+                cell.type = .recommend
+                cell.communityRecommendDataModel = communityRecommendDataModel
+                return cell
+            }
+        //点赞,收藏,分享
+        case 3:
+            let cell = CardContentActionTableViewCell.cellWith(tableView: tableView, indexPath: indexPath)
+            cell.communityRecommendDataModel = communityRecommendDataModel
+            cell.praiseClosureName = {
+                [weak self] (button:UIButton)  in
+                VirusViewModel.shared.praise(communityRecommendDataModel: communityRecommendDataModel, tableView: (self?.tableView)!)
+            }
+            cell.collectClosureName = {
+                [weak self] (button:UIButton) in
+                VirusViewModel.shared.collection(communityRecommendDataModel: communityRecommendDataModel, tableView: (self?.tableView)!)
+            }
+            
+            return cell
+        //评论列表
+        case 4:
+            let cell = CardContentCommentListTableViewCell.cellWith(tableView: tableView, indexPath: indexPath)
+            cell.communityRecommendDataModel = communityRecommendDataModel
+            return cell
+        //评论
+        case 5:
+            let cell = CardContentCommnetTableViewCell.cellWith(tableView: tableView, indexPath: indexPath)
+            cell.addCommnetClosureName = {
+                [weak self] in
+                self?.communityRecommendDataModel = self?.communityRecommendDataModels[indexPath.section]
+                self?.showKeyBoardCommentView()
+            }
+            cell.isAvatar = true
+            return cell
+        default:
+            return UITableViewCell()
+        }
+        
+    }
+    
+    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
+        let communityRecommendDataModel = communityRecommendDataModels[indexPath.section]
+        
+        switch indexPath.row {
+        //贴子用户
+        case 0:
+            break
+        //图片视频/内容标题/评论列表
+        case 1,2:
+            if PostType(rawValue: communityRecommendDataModel.type ?? "video") == .video {
+                Mediator.push(CommunityRouterModuleType.pushPostDetailVoide(postId: "\(communityRecommendDataModel.id ?? 0)", departType: .others, topicId: 0))
+            }else {
+                Mediator.push(CommunityRouterModuleType.pushPostDetailContent(postId: "\(communityRecommendDataModel.id ?? 0)"))
+            }
+            break
+        //点赞,收藏,分享
+        case 3:
+            break
+        //评论
+        case 5:
+            break
+        default:
+            break
+        }
+    }
+    
+    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
+        
+        let communityRecommendDataModel = communityRecommendDataModels[indexPath.section]
+        switch indexPath.row {
+        //贴子用户
+        case 0:
+            if communityRecommendDataModel.uid != nil {
+                return 80
+            }
+            return 0
+            
+        //内容标题
+        case 1:
+            
+            if PostType(rawValue: communityRecommendDataModel.type ?? "html") == .html {
+                var titleStr = communityRecommendDataModel.title ?? ""
+                titleStr = titleStr.replacingOccurrences(of: "\n", with: "").replacingOccurrences(of: "\r", with: "")
+                let subtitleLabelHeight =  titleStr.heightForComment(font: kMediumFont16!, width: kScreenWidth-28, maxHeight: 44.0)
+                return subtitleLabelHeight
+            }else {
+                var titleStr = communityRecommendDataModel.title ?? ""
+                titleStr = titleStr.replacingOccurrences(of: "\n", with: "").replacingOccurrences(of: "\r", with: "")
+                
+                var str = communityRecommendDataModel.content ?? ""
+                str = str.replacingOccurrences(of: "\n", with: "").replacingOccurrences(of: "\r", with: "")
+                
+                let subtitleLabelHeight =  str.heightForComment(font: kRegularFont14!, width: kScreenWidth-28, maxHeight: 40.0)
+                
+                if titleStr == "" {
+                    return subtitleLabelHeight
+                }else {
+                    return 22 + 6 + subtitleLabelHeight
+                }
+            }
+            
+            
+        //图片视频
+        case 2:
+            
+            if PostType(rawValue: communityRecommendDataModel.type ?? "html") == .html {
+                
+                return 82
+            }else {
+                let cardContentPicVideoModel = CardContentPicVideoModel()
+                cardContentPicVideoModel.postType = PostType(rawValue: communityRecommendDataModel.type ?? "html")
+                
+                let imgStr = communityRecommendDataModel.img
+                if communityRecommendDataModel.imgs?.count ?? 0 == 0 {
+                    if communityRecommendDataModel.img != "" && communityRecommendDataModel.img != nil {
+                        cardContentPicVideoModel.number = 1
+                        cardContentPicVideoModel.width = getImageWidth(imgStr: (imgStr)!)
+                        cardContentPicVideoModel.height = getImageHeight(imgStr: (imgStr)!)
+                        return cardContentPicVideoModel.collectionViewHeight() + 12
+                    }else {
+                        return 0
+                    }
+                }else {
+                    if communityRecommendDataModel.imgs?.count ?? 0 == 1 {
+                        if communityRecommendDataModel.img != "" || communityRecommendDataModel.img != nil {
+                            cardContentPicVideoModel.number = 1
+                            cardContentPicVideoModel.width = getImageWidth(imgStr: (imgStr)!)
+                            cardContentPicVideoModel.height = getImageHeight(imgStr: (imgStr)!)
+                            return cardContentPicVideoModel.collectionViewHeight() + 12
+                        }else {
+                            return 0
+                        }
+                    }else {
+                        cardContentPicVideoModel.number = communityRecommendDataModel.imgs?.count ?? 0
+                        return cardContentPicVideoModel.collectionViewHeight() + 12
+                    }
+                }
+            }
+        //点赞,收藏,分享
+        case 3:
+            return 54
+        //评论列表
+        case 4:
+            if !(communityRecommendDataModel.comment?.isEmpty ?? true) {
+                
+                var height : CGFloat?
+                for communityRecommendCommentModel in communityRecommendDataModel.comment!.prefix(2) {
+                    
+                    let nameStr = "\(communityRecommendCommentModel.username ?? ""):"
+                    let contentStr = "\(communityRecommendCommentModel.content ?? "")"
+                    let likeCountStr = "\(communityRecommendCommentModel.likeCount ?? 0)"
+                    let likeWidth = likeCountStr.widthForComment(font: kRegularFont14!, height: 25.5)
+                    
+                    let str =  nameStr + contentStr
+                    let strHeight = (str.heightForComment(font: kRegularFont14!, width:  kScreenWidth-28-10-20-5-likeWidth) + 5)
+                    height = (height ?? 0) + strHeight
+                }
+                
+                if (communityRecommendDataModel.commentCount ?? 0) <= 2 {
+                    return (height ?? 0)
+                }else {
+                    return 23 + (height ?? 0)
+                }
+            }
+            return 0
+        //评论
+        case 5:
+            return 50
+        default:
+            return 0
+        }
+    }
+    
+    func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
+        return 0.000001
+        
+    }
+    
+    func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
+        return 10
+    }
+    
+    func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
+        
+        return nil
+    }
+    
+    func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
+        let view = UIView(frame: CGRect(x: 0, y: 0, width: kScreenWidth, height: 10))
+        view.backgroundColor = kf7f8faColor
+        return view
+    }
+}
+
+extension CircleEssenceView : JXPagingViewListViewDelegate {
+    public func listView() -> UIView {
+        return self
+    }
+    
+    public func listViewDidScrollCallback(callback: @escaping (UIScrollView) -> ()) {
+        self.listViewDidScrollCallback = callback
+    }
+    
+    public func listScrollView() -> UIScrollView {
+        return UIScrollView()
+    }
+}

+ 56 - 3
RainbowPlanet/RainbowPlanet/Modules/CircleModule/Circle/View/CircleHeaderView.swift

@@ -25,6 +25,9 @@ class CircleHeaderView: BaseView {
         midBgView.addSubview(memberNumberLabel)
         midBgView.addSubview(albumNameLabel)
         midBgView.addSubview(albumNumberLabel)
+        addSubview(bottomView)
+        bottomView.addSubview(iconImageView)
+        bottomView.addSubview(noticeLabel)
     }
     
     override func setupLayouts() {
@@ -70,6 +73,27 @@ class CircleHeaderView: BaseView {
             make.centerY.equalTo(memberNameLabel)
             make.left.equalTo(albumNameLabel.snp.right)
         }
+        
+        bottomView.snp.makeConstraints { (make) in
+            make.top.equalTo(midBgView.snp.bottom).offset(10)
+            make.left.equalTo(6)
+            make.right.equalTo(-6)
+            make.height.equalTo(64)
+        }
+        
+        iconImageView.snp.makeConstraints { (make) in
+            make.centerY.equalToSuperview()
+            make.left.equalTo(10)
+        }
+        
+        noticeLabel.snp.makeConstraints { (make) in
+            make.top.equalTo(12)
+            make.left.equalTo(iconImageView.snp.right).offset(6)
+            make.right.equalTo(6)
+            make.height.equalTo(40)
+        }
+        
+        
     }
     
     override func setupData() {
@@ -117,7 +141,7 @@ class CircleHeaderView: BaseView {
         
     }
     
-    private lazy var bgImageView: UIImageView = {
+    lazy var bgImageView: UIImageView = {
         let bgImageView = UIImageView(frame: CGRect(x: 0, y: 0, width: kScreenWidth, height: 114 + kNavBarTotalHeight + 8))
         bgImageView.image = kImage(name: "default_pic")
         bgImageView.contentMode = .scaleAspectFill
@@ -125,13 +149,13 @@ class CircleHeaderView: BaseView {
         return bgImageView
     }()
     
-    private lazy var bgView: UIView = {
+    lazy var bgView: UIView = {
         let bgView = UIView(frame: CGRect(x: 0, y: 0, width: kScreenWidth, height: 114 + kNavBarTotalHeight + 8))
         bgView.backgroundColor = UIColor(hexString: "000000", alpha: 0.5)
         return bgView
     }()
     
-    private lazy var titleLabel: UILabel = {
+    lazy var titleLabel: UILabel = {
         let titleLabel = UILabel()
         titleLabel.text = "昵称"
         titleLabel.textColor = .white
@@ -218,6 +242,28 @@ class CircleHeaderView: BaseView {
         return albumNumberLabel
     }()
     
+    lazy var bottomView: UIView = {
+        let bottomView = UIView()
+        bottomView.backgroundColor = kf7f8faColor
+        bottomView.cornerRadius = 32
+        bottomView.masksToBounds = true
+        return bottomView
+    }()
+    
+    lazy var iconImageView: UIImageView = {
+        let iconImageView = UIImageView()
+        iconImageView.image = kImage(name: "ico_notice")
+        return iconImageView
+    }()
+    
+    lazy var noticeLabel: UILabel = {
+        let noticeLabel = UILabel()
+        noticeLabel.textColor = .black
+        noticeLabel.font = kRegularFont14
+        noticeLabel.numberOfLines = 2
+        return noticeLabel
+    }()
+    
     var communityCircleModel :CommunityCircleModel? {
         didSet {
             bgImageView.kf.setImage(with: kURLImage(name: communityCircleModel?.image ?? "default_pic"), placeholder: kImage(name: "default_pic"))
@@ -226,6 +272,13 @@ class CircleHeaderView: BaseView {
             memberNumberLabel.text = "  \(communityCircleModel?.members?.extra ?? "")"
             albumNumberLabel.text = "  \(communityCircleModel?.pictures?.extra ?? "")"
             
+            if communityCircleModel?.notice == nil ||  communityCircleModel?.notice == "" {
+                bottomView.isHidden = true
+            } else {
+                bottomView.isHidden = false
+                noticeLabel.text = communityCircleModel?.notice
+            }
+            
             if communityCircleModel?.isJoin == 0 {
                 circleButton.isSelected = false
             }else if communityCircleModel?.isJoin == 1 {

+ 0 - 44
RainbowPlanet/RainbowPlanet/Modules/CircleModule/Circle/View/CircleLeavingMessageView.swift

@@ -1,44 +0,0 @@
-//
-//  CircleLeavingMessageView.swift
-//  RainbowPlanet
-//
-//  Created by 南鑫林 on 2019/10/15.
-//  Copyright © 2019 RainbowPlanet. All rights reserved.
-//
-
-import UIKit
-import JXPagingView
-
-class CircleLeavingMessageView: BaseView {
-
-    deinit {
-        listViewDidScrollCallback = nil
-        if observe != nil {
-            NotificationCenter.default.removeObserver(observe!)
-        }
-    }
-    weak var observe : NSObjectProtocol?
-    var listViewDidScrollCallback: ((UIScrollView) -> ())?
-    /*
-    // Only override draw() if you perform custom drawing.
-    // An empty implementation adversely affects performance during animation.
-    override func draw(_ rect: CGRect) {
-        // Drawing code
-    }
-    */
-
-}
-
-extension CircleLeavingMessageView : JXPagingViewListViewDelegate {
-    public func listView() -> UIView {
-        return self
-    }
-    
-    public func listViewDidScrollCallback(callback: @escaping (UIScrollView) -> ()) {
-        self.listViewDidScrollCallback = callback
-    }
-    
-    public func listScrollView() -> UIScrollView {
-        return UIScrollView()
-    }
-}

+ 82 - 0
RainbowPlanet/RainbowPlanet/Modules/CircleModule/Circle/View/CircleLeavingMessageView/Cell/CircleLeavingMessageCommentListContentTableViewCell.swift

@@ -0,0 +1,82 @@
+//
+//  CircleLeavingMessageCommentListContentTableViewCell.swift
+//  RainbowPlanet
+//
+//  Created by 南鑫林 on 2019/10/16.
+//  Copyright © 2019 RainbowPlanet. All rights reserved.
+//
+
+import UIKit
+
+class CircleLeavingMessageCommentListContentTableViewCell: UITableViewCell {
+
+    class func cellWith(tableView:UITableView,indexPath:IndexPath) -> CircleLeavingMessageCommentListContentTableViewCell {
+        let ID = "CircleLeavingMessageCommentListContentTableViewCell"
+        tableView.register(CircleLeavingMessageCommentListContentTableViewCell.self, forCellReuseIdentifier: ID)
+        let cell : CircleLeavingMessageCommentListContentTableViewCell = tableView.dequeueReusableCell(withIdentifier: ID, for: indexPath) as! CircleLeavingMessageCommentListContentTableViewCell
+        cell.indexPath = indexPath
+        return cell
+    }
+    
+    override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
+        super.init(style: style, reuseIdentifier: reuseIdentifier)
+        setupViews()
+        setupLayouts()
+    }
+    
+    required init?(coder aDecoder: NSCoder) {
+        fatalError("init(coder:) has not been implemented")
+    }
+    
+    var indexPath: IndexPath? {
+        didSet {
+            
+        }
+    }
+    //MRAK: - 设置View
+    private func setupViews() {
+        self.selectionStyle = .none
+        addSubview(commentLabel)
+        
+        
+    }
+    
+    private func setupLayouts() {
+        commentLabel.snp.makeConstraints { (make) in
+            make.top.equalToSuperview()
+            make.left.equalTo(14)
+            make.right.equalTo(-14)
+        }
+    }
+    
+    private lazy var commentLabel: FMLinkLabel = {
+        let commentLabel = FMLinkLabel()
+        commentLabel.numberOfLines = 0
+        commentLabel.textColor = k333333Color
+        commentLabel.font = kRegularFont14
+        commentLabel.isUserInteractionEnabled = false
+        commentLabel.textAlignment = .left
+        return commentLabel
+    }()
+    
+    var communityCircleMessageModel: CommunityCircleMessageModel? {
+        didSet {
+            
+        }
+    }
+    
+    var communityCircleMessageCommentModel : CommunityCircleMessageCommentModel? {
+        didSet {
+            let nameStr = "\(communityCircleMessageCommentModel?.username ?? ""):"
+            let contentStr = "\(communityCircleMessageCommentModel?.content ?? "")"
+            commentLabel.text =  nameStr + contentStr
+            if nameStr != "" {
+                self.commentLabel.addClickText(nameStr, attributeds: [NSAttributedString.Key.font:kBoldFont14], transmitBody: nil) {
+                    (data) in
+                    
+                }
+            }
+        }
+    }
+    
+}

+ 51 - 0
RainbowPlanet/RainbowPlanet/Modules/CircleModule/Circle/View/CircleLeavingMessageView/Cell/CircleLeavingMessageCommentListFooterView.swift

@@ -0,0 +1,51 @@
+//
+//  CircleLeavingMessageCommentListFooterView.swift
+//  RainbowPlanet
+//
+//  Created by 南鑫林 on 2019/10/16.
+//  Copyright © 2019 RainbowPlanet. All rights reserved.
+//
+
+import UIKit
+
+class CircleLeavingMessageCommentListFooterView: BaseView {
+    //MRAK: - 设置View
+    override func setupViews() {
+        addSubview(allCommentLabel)
+        self.addTapGesture(1, target: self, action: #selector(tapAction))
+    }
+    
+    override func setupLayouts() {
+        allCommentLabel.snp.makeConstraints { (make) in
+            make.top.equalToSuperview().offset(5)
+            make.left.equalTo(14)
+            make.right.equalTo(-14)
+            make.bottom.equalToSuperview()
+        }
+    }
+    
+    private lazy var allCommentLabel: UILabel = {
+        let allCommentLabel = UILabel()
+        allCommentLabel.text = "共3条评论"
+        allCommentLabel.textColor = k999999Color
+        allCommentLabel.font = kRegularFont13
+        return allCommentLabel
+    }()
+    
+    @objc func tapAction() {
+//        if communityRecommendDataModel != nil {
+//            if PostType(rawValue: communityRecommendDataModel?.type ?? "video") == .video {
+//                Mediator.push(CommunityRouterModuleType.pushPostDetailVoide(postId: "\(communityRecommendDataModel?.id ?? 0)", departType: .others, topicId: 0))
+//            }else {
+//                Mediator.push(CommunityRouterModuleType.pushPostDetailContent(postId: "\(communityRecommendDataModel?.id ?? 0)"))
+//            }
+//        }
+    }
+    
+    var communityCircleMessageModel: CommunityCircleMessageModel? {
+        didSet {
+            allCommentLabel.text = "共\(communityCircleMessageModel?.commentCount ?? 0)条评论"
+        }
+    }
+
+}

+ 136 - 0
RainbowPlanet/RainbowPlanet/Modules/CircleModule/Circle/View/CircleLeavingMessageView/Cell/CircleLeavingMessageCommentListTableViewCell.swift

@@ -0,0 +1,136 @@
+//
+//  CircleContentCommentListTableViewCell.swift
+//  RainbowPlanet
+//
+//  Created by 南鑫林 on 2019/10/16.
+//  Copyright © 2019 RainbowPlanet. All rights reserved.
+//
+
+import UIKit
+
+class CircleLeavingMessageCommentListTableViewCell: UITableViewCell {
+
+    
+    class func cellWith(tableView:UITableView,indexPath:IndexPath) -> CircleLeavingMessageCommentListTableViewCell {
+        let ID = "CircleLeavingMessageCommentListTableViewCell"
+        tableView.register(CircleLeavingMessageCommentListTableViewCell.self, forCellReuseIdentifier: ID)
+        let cell : CircleLeavingMessageCommentListTableViewCell = tableView.dequeueReusableCell(withIdentifier: ID, for: indexPath) as! CircleLeavingMessageCommentListTableViewCell
+        cell.indexPath = indexPath
+        return cell
+    }
+    
+    override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
+        super.init(style: style, reuseIdentifier: reuseIdentifier)
+        setupViews()
+        setupLayouts()
+    }
+    
+    required init?(coder aDecoder: NSCoder) {
+        fatalError("init(coder:) has not been implemented")
+    }
+    
+    var indexPath: IndexPath? {
+        didSet {
+            
+        }
+    }
+    //MRAK: - 设置View
+    private func setupViews() {
+        self.selectionStyle = .none
+        backgroundColor = UIColor.white
+        addSubview(tableView)
+    }
+    
+    private func setupLayouts() {
+        tableView.snp.makeConstraints { (make) in
+            make.edges.equalToSuperview()
+        }
+    }
+    
+    private lazy var tableView: UITableView = {
+        let tableView = UITableView(frame: CGRect.zero, style: UITableView.Style.grouped)
+        tableView.separatorStyle = .none
+        tableView.backgroundColor = .white
+        tableView.tableHeaderView = headerView
+        tableView.dataSource = self
+        tableView.delegate = self
+        tableView.isScrollEnabled = false
+        return tableView
+    }()
+    
+    private lazy var headerView: UIView = {
+        let headerView = UIView(frame: CGRect(x: 0, y: 0, width: kScreenWidth, height: 10))
+        headerView.backgroundColor = .white
+        return headerView
+    }()
+    
+    private lazy var footerView: CircleLeavingMessageCommentListFooterView = {
+        let footerView = CircleLeavingMessageCommentListFooterView(frame: CGRect(x: 0, y: 0, width: kScreenWidth, height: 18))
+        footerView.backgroundColor = .white
+        return footerView
+    }()
+
+    
+    var communityCircleMessageModel: CommunityCircleMessageModel? {
+        didSet {
+            if communityCircleMessageModel?.commentCount ?? 0 > 2 {
+                footerView.communityCircleMessageModel = communityCircleMessageModel
+                tableView.tableFooterView = footerView
+            }
+            tableView.reloadData()
+        }
+    }
+}
+
+extension CircleLeavingMessageCommentListTableViewCell : UITableViewDelegate,UITableViewDataSource {
+    func numberOfSections(in tableView: UITableView) -> Int {
+        return communityCircleMessageModel?.comment?.isEmpty ?? true ? 0 : 1
+    }
+    
+    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
+        return communityCircleMessageModel?.comment?.isEmpty ?? true ? 0 : communityCircleMessageModel?.comment?.prefix(2).count ?? 0
+
+    }
+    
+    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
+        let cell = CircleLeavingMessageCommentListContentTableViewCell.cellWith(tableView: tableView, indexPath: indexPath)
+        cell.communityCircleMessageCommentModel = communityCircleMessageModel?.comment?[indexPath.row]
+        return cell
+    }
+    
+    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
+//        if PostType(rawValue: communityRecommendDataModel?.type ?? "video") == .video {
+//            Mediator.push(CommunityRouterModuleType.pushPostDetailVoide(postId: "\(communityRecommendDataModel?.id ?? 0)", departType: .others, topicId: 0))
+//        }else {
+//            Mediator.push(CommunityRouterModuleType.pushPostDetailContent(postId: "\(communityRecommendDataModel?.id ?? 0)"))
+//        }
+    }
+    
+    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
+        let communityCircleMessageCommentModel = communityCircleMessageModel?.comment?[indexPath.row]
+        let nameStr = "\(communityCircleMessageCommentModel?.username ?? ""):"
+        let contentStr = "\(communityCircleMessageCommentModel?.content ?? "")"
+        
+        let str =  nameStr + contentStr
+        let strHeight = (str.heightForComment(font: kRegularFont14!, width: kScreenWidth-28) + 5)
+        return strHeight
+    }
+    
+    
+    func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
+        return 0.000001
+    }
+    
+    func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
+        return 0.000001
+    }
+    
+    func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
+        return nil
+        
+    }
+    
+    func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
+        return nil
+    }
+}

+ 119 - 0
RainbowPlanet/RainbowPlanet/Modules/CircleModule/Circle/View/CircleLeavingMessageView/Cell/CircleLeavingMessageCommentTopStepTableViewCell.swift

@@ -0,0 +1,119 @@
+//
+//  CircleLeavingMessageCommentTopStepTableViewCell.swift
+//  RainbowPlanet
+//
+//  Created by 南鑫林 on 2019/10/16.
+//  Copyright © 2019 RainbowPlanet. All rights reserved.
+//
+
+import UIKit
+
+class CircleLeavingMessageCommentTopStepTableViewCell: UITableViewCell {
+
+    class func cellWith(tableView:UITableView,indexPath:IndexPath) -> CircleLeavingMessageCommentTopStepTableViewCell {
+        let ID = "CircleLeavingMessageCommentTopStepTableViewCell"
+        tableView.register(CircleLeavingMessageCommentTopStepTableViewCell.self, forCellReuseIdentifier: ID)
+        let cell : CircleLeavingMessageCommentTopStepTableViewCell = tableView.dequeueReusableCell(withIdentifier: ID, for: indexPath) as! CircleLeavingMessageCommentTopStepTableViewCell
+        cell.indexPath = indexPath
+        return cell
+    }
+    
+    override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
+        super.init(style: style, reuseIdentifier: reuseIdentifier)
+        setupViews()
+        setupLayouts()
+    }
+    
+    required init?(coder aDecoder: NSCoder) {
+        fatalError("init(coder:) has not been implemented")
+    }
+    
+    var indexPath: IndexPath? {
+        didSet {
+            
+        }
+    }
+    //MRAK: - 设置View
+    private func setupViews() {
+        self.selectionStyle = .none
+        addSubview(commentLabel)
+        addSubview(topButton)
+        addSubview(stepButton)
+        
+    }
+    
+    private func setupLayouts() {
+
+        
+        stepButton.snp.makeConstraints { (make) in
+            make.centerY.equalToSuperview()
+            make.right.equalTo(-14)
+            make.height.equalTo(20)
+        }
+        stepButton.layoutButton(edgeInsetsStyle: ButtonEdgeInsetsStyle.left, imageTitleSpace: 4)
+        
+        topButton.snp.makeConstraints { (make) in
+            make.centerY.equalToSuperview()
+            make.right.equalTo(stepButton.snp.left).offset(-20)
+            make.height.equalTo(20)
+        }
+        topButton.layoutButton(edgeInsetsStyle: ButtonEdgeInsetsStyle.left, imageTitleSpace: 4)
+        
+        commentLabel.snp.makeConstraints { (make) in
+            make.centerY.equalToSuperview()
+            make.left.equalTo(14)
+            make.right.equalTo(topButton.snp.left).offset(12)
+            make.height.equalTo(48)
+        }
+        
+    }
+    
+    private lazy var commentLabel: UILabel = {
+        let commentLabel = UILabel()
+        commentLabel.numberOfLines = 1
+        commentLabel.textColor = k333333Color
+        commentLabel.font = kRegularFont14
+        commentLabel.textAlignment = .left
+        commentLabel.text = "添加评论..."
+        return commentLabel
+    }()
+    
+    lazy var topButton: UIButton = {
+        let topButton = UIButton()
+        topButton.setImage(kImage(name: "question_btn_like"), for: UIControl.State.normal)
+        topButton.setImage(kImage(name: "question_btn_like_pre"), for: UIControl.State.selected)
+        topButton.setTitleColor(k666666Color, for: UIControl.State.normal)
+        topButton.setTitle("0", for: UIControl.State.normal)
+        return topButton
+    }()
+    
+    lazy var stepButton: UIButton = {
+        let stepButton = UIButton()
+        stepButton.setImage(kImage(name: "question_btn_dislike"), for: UIControl.State.normal)
+        stepButton.setImage(kImage(name: "question_btn_dislike_pre"), for: UIControl.State.selected)
+        stepButton.setTitleColor(k666666Color, for: UIControl.State.normal)
+        stepButton.setTitle("0", for: UIControl.State.normal)
+        return stepButton
+    }()
+    
+    var communityCircleMessageModel: CommunityCircleMessageModel? {
+        didSet {
+            
+            if communityCircleMessageModel?.action ?? 0 == 0 {
+                topButton.isSelected = false
+                stepButton.isSelected = false
+            }else if communityCircleMessageModel?.action ?? 0 == 1 {
+                topButton.isSelected = true
+                stepButton.isSelected = false
+            }else if communityCircleMessageModel?.action ?? 0 == -1 {
+                topButton.isSelected = false
+                stepButton.isSelected = true
+            }
+            topButton.setTitle("\(communityCircleMessageModel?.good ?? 0)", for: UIControl.State.normal)
+            topButton.layoutButton(edgeInsetsStyle: ButtonEdgeInsetsStyle.left, imageTitleSpace: 4)
+            stepButton.setTitle("\(communityCircleMessageModel?.bad ?? 0)", for: UIControl.State.normal)
+            stepButton.layoutButton(edgeInsetsStyle: ButtonEdgeInsetsStyle.left, imageTitleSpace: 4)
+        }
+    }
+
+}

+ 107 - 0
RainbowPlanet/RainbowPlanet/Modules/CircleModule/Circle/View/CircleLeavingMessageView/Cell/CircleLeavingMessageContentTableViewCell.swift

@@ -0,0 +1,107 @@
+//
+//  CircleLeavingMessageContentTableViewCell.swift
+//  RainbowPlanet
+//
+//  Created by 南鑫林 on 2019/10/16.
+//  Copyright © 2019 RainbowPlanet. All rights reserved.
+//
+
+import UIKit
+import SwiftyMediator
+import RxSwift
+
+class CircleLeavingMessageContentTableViewCell: UITableViewCell {
+
+    let disposeBag = DisposeBag()
+    
+    class func cellWith(tableView:UITableView,indexPath:IndexPath) -> CircleLeavingMessageContentTableViewCell {
+        let ID = "CircleLeavingMessageContentTableViewCell"
+        tableView.register(CircleLeavingMessageContentTableViewCell.self, forCellReuseIdentifier: ID)
+        let cell : CircleLeavingMessageContentTableViewCell = tableView.dequeueReusableCell(withIdentifier: ID, for: indexPath) as! CircleLeavingMessageContentTableViewCell
+        cell.indexPath = indexPath
+        return cell
+    }
+    
+    override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
+        super.init(style: style, reuseIdentifier: reuseIdentifier)
+        setupViews()
+        setupLayouts()
+        setupData()
+    }
+    
+    required init?(coder aDecoder: NSCoder) {
+        fatalError("init(coder:) has not been implemented")
+    }
+    
+    var indexPath: IndexPath? {
+        didSet {
+            
+        }
+    }
+    //MRAK: - 设置View
+    private func setupViews() {
+        self.selectionStyle = .none
+        backgroundColor = kf7f8faColor
+        addSubview(titleLabel)
+        addSubview(lookPicButton)
+        
+    }
+    
+    private func setupLayouts() {
+        titleLabel.snp.makeConstraints { (make) in
+            make.top.equalTo(30)
+            make.left.equalTo(14)
+            make.right.equalTo(-14)
+        }
+        lookPicButton.snp.makeConstraints { (make) in
+            make.bottom.equalTo(-20)
+            make.right.equalTo(-14)
+            make.height.equalTo(24)
+            make.width.equalTo(85)
+        }
+        lookPicButton.layoutButton(edgeInsetsStyle: ButtonEdgeInsetsStyle.left, imageTitleSpace: 4)
+    }
+    
+    func setupData() {
+        lookPicButton.rx.tap.subscribe(onNext: {[weak self] (data) in
+            Mediator.push(BrowsePictureRouterModuleType.pushBrowsePictureImageStrs(imageStrs: (self?.communityCircleMessageModel?.imgs)!, index: 0))
+        }).disposed(by: disposeBag)
+    }
+    
+    private lazy var titleLabel: UILabel = {
+        let titleLabel = UILabel()
+        titleLabel.textColor = k333333Color
+        titleLabel.font = kMediumFont15
+        return titleLabel
+    }()
+    
+    private lazy var lookPicButton: UIButton = {
+        let lookPicButton = UIButton(type: UIButton.ButtonType.custom)
+        lookPicButton.setImage(kImage(name: "question_ico_img"), for: UIControl.State.normal)
+        lookPicButton.setTitle("查看图片", for: UIControl.State.normal)
+        lookPicButton.titleLabel?.font = kRegularFont13
+        lookPicButton.backgroundColor = UIColor.white
+        lookPicButton.setTitleColor(k666666Color, for: UIControl.State.normal)
+        lookPicButton.cornerRadius = 12
+        lookPicButton.masksToBounds = true
+        return lookPicButton
+    }()
+    
+    var communityCircleMessageModel: CommunityCircleMessageModel? {
+        didSet {
+            titleLabel.text = communityCircleMessageModel?.content
+            titleLabel.snp.remakeConstraints { (make) in
+                make.top.equalTo(30)
+                make.left.equalTo(14)
+                make.right.equalTo(-14)
+                make.height.equalTo(communityCircleMessageModel?.contentHeight ?? 0.0)
+            }
+            if communityCircleMessageModel?.imgs?.isEmpty ?? true {
+                lookPicButton.isHidden = true
+            }else {
+                lookPicButton.isHidden = false
+            }
+        }
+    }
+    
+}

+ 158 - 0
RainbowPlanet/RainbowPlanet/Modules/CircleModule/Circle/View/CircleLeavingMessageView/Cell/CircleLeavingMessageUserTableViewCell.swift

@@ -0,0 +1,158 @@
+//
+//  CircleLeavingMessageUserTableViewCell.swift
+//  RainbowPlanet
+//
+//  Created by 南鑫林 on 2019/10/16.
+//  Copyright © 2019 RainbowPlanet. All rights reserved.
+//
+
+import UIKit
+import SwiftyMediator
+import RxSwift
+
+class CircleLeavingMessageUserTableViewCell: UITableViewCell {
+
+    let disposeBag = DisposeBag()
+    
+    typealias DeleteClosure = (_ y:CGFloat) -> Void
+    var deleteClosure : DeleteClosure?
+    
+    class func cellWith(tableView:UITableView,indexPath:IndexPath) -> CircleLeavingMessageUserTableViewCell {
+        let ID = "CircleLeavingMessageUserTableViewCell"
+        tableView.register(CircleLeavingMessageUserTableViewCell.self, forCellReuseIdentifier: ID)
+        let cell : CircleLeavingMessageUserTableViewCell = tableView.dequeueReusableCell(withIdentifier: ID, for: indexPath) as! CircleLeavingMessageUserTableViewCell
+        cell.indexPath = indexPath
+        return cell
+    }
+    
+    override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
+        super.init(style: style, reuseIdentifier: reuseIdentifier)
+        setupViews()
+        setupLayouts()
+        setupData()
+    }
+    
+    required init?(coder aDecoder: NSCoder) {
+        fatalError("init(coder:) has not been implemented")
+    }
+    
+    var indexPath: IndexPath? {
+        didSet {
+            
+        }
+    }
+    //MRAK: - 设置View
+    private func setupViews() {
+        self.selectionStyle = .none
+        backgroundColor = kf7f8faColor
+        addSubview(avatarButton)
+        addSubview(titleButton)
+        addSubview(timeLabel)
+        addSubview(setButton)
+        
+    }
+    
+    private func setupLayouts() {
+        avatarButton.snp.makeConstraints { (make) in
+            make.centerY.equalToSuperview()
+            make.size.equalTo(40)
+            make.left.equalTo(14)
+        }
+        titleButton.snp.makeConstraints { (make) in
+            make.top.equalTo(avatarButton).offset(2)
+            make.height.equalTo(21)
+            make.left.equalTo(avatarButton.snp.right).offset(16)
+            make.right.lessThanOrEqualTo(setButton.snp.left).offset(-80-46-5)
+        }
+
+        timeLabel.snp.makeConstraints { (make) in
+            make.bottom.equalTo(avatarButton).offset(4)
+            make.left.equalTo(titleButton)
+            
+        }
+        setButton.snp.makeConstraints { (make) in
+            make.centerY.equalToSuperview()
+            make.size.equalTo(22)
+            make.right.equalTo(-14)
+        }
+    }
+    
+    func setupData() {
+        avatarButton.rx.tap.subscribe(onNext: {
+            [weak self] (data) in
+            self?.pushUser()
+        }).disposed(by: disposeBag)
+        
+        titleButton.rx.tap.subscribe(onNext: {
+            [weak self] (data) in
+            self?.pushUser()
+        }).disposed(by: disposeBag)
+        
+        setButton.rx.tap.subscribe(onNext: {[weak self] (data) in
+            let window = kAppDelegate.window
+            let rect = self?.setButton.convert((self?.setButton.bounds)!, from: window)
+            let y = CGFloat(abs((rect?.origin.y)!))
+            if let deleteClosure = self?.deleteClosure {
+                deleteClosure(y)
+            }
+            
+        }).disposed(by: disposeBag)
+    }
+    
+    private lazy var avatarButton: UIButton = {
+        let avatarButton = UIButton(type: UIButton.ButtonType.custom)
+        avatarButton.setImage(kImage(name: "default_pic"), for: UIControl.State.normal)
+        avatarButton.imageView?.contentMode = .scaleAspectFill
+        avatarButton.cornerRadius = 20
+        avatarButton.masksToBounds = true
+        
+        return avatarButton
+    }()
+    
+    private lazy var titleButton: UIButton = {
+        let titleButton = UIButton(type: UIButton.ButtonType.custom)
+        titleButton.setTitle("用户昵称", for: UIControl.State.normal)
+        titleButton.setTitleColor(k333333Color, for: UIControl.State.normal)
+        titleButton.titleLabel?.font = kMediumFont14
+        titleButton.titleLabel?.lineBreakMode = NSLineBreakMode.byTruncatingTail
+        titleButton.titleLabel?.textAlignment = .left
+        titleButton.contentHorizontalAlignment = .left
+        
+        return titleButton
+    }()
+    
+    private lazy var timeLabel: UILabel = {
+        let timeLabel = UILabel()
+        timeLabel.text = "5小时前"
+        timeLabel.textColor = kbbbbbbColor
+        timeLabel.font = kRegularFont12
+        return timeLabel
+    }()
+    
+    private lazy var setButton: UIButton = {
+        let setButton = UIButton(type: UIButton.ButtonType.custom)
+        setButton.setImage(kImage(name: "btn_more"), for: UIControl.State.normal)
+        setButton.titleLabel?.font = kMediumFont13
+        return setButton
+    }()
+    
+    var communityCircleMessageModel: CommunityCircleMessageModel? {
+        didSet {
+            avatarButton.kf.setImage(with: kURLImage(name: communityCircleMessageModel?.user?.avatar ?? ""), for: UIControl.State.normal , placeholder: kImage(name: "default_avatar"))
+            titleButton.setTitle(communityCircleMessageModel?.user?.username, for: UIControl.State.normal)
+            timeLabel.text = communityCircleMessageModel?.createdAt
+            if communityCircleMessageModel?.user?.uid == UserModel.shared().getModel()?.uid {
+                setButton.isHidden = false
+            }else {
+                setButton.isHidden = true
+            }
+        }
+    }
+    
+    func pushUser() {
+        if communityCircleMessageModel?.user?.uid != UserModel.shared().getModel()?.uid {
+            Mediator.push(MineRouterModuleType.pushOtherPersonalCenter(uid: communityCircleMessageModel?.user?.uid ?? 0))
+        }
+    }
+
+}

+ 200 - 0
RainbowPlanet/RainbowPlanet/Modules/CircleModule/Circle/View/CircleLeavingMessageView/CircleLeavingMessageView.swift

@@ -0,0 +1,200 @@
+//
+//  CircleLeavingMessageView.swift
+//  RainbowPlanet
+//
+//  Created by 南鑫林 on 2019/10/15.
+//  Copyright © 2019 RainbowPlanet. All rights reserved.
+//
+
+import UIKit
+import JXPagingView
+
+class CircleLeavingMessageView: BaseView {
+
+    deinit {
+        listViewDidScrollCallback = nil
+        if observe != nil {
+            NotificationCenter.default.removeObserver(observe!)
+        }
+    }
+    weak var observe : NSObjectProtocol?
+    var listViewDidScrollCallback: ((UIScrollView) -> ())?
+    var circleId : Int?
+    var communityCircleMessageModels = Array<CommunityCircleMessageModel>()
+    
+    override func setupViews() {
+        addSubview(tableView)
+    }
+    
+    override func setupLayouts() {
+        tableView.snp.makeConstraints { (make) in
+            make.top.left.right.equalToSuperview()
+            make.height.equalTo(kScreenHeight - kNavBarTotalHeight - 44)
+        }
+    }
+    
+    override func setupData() {
+        
+        tableView.addHeader(withBeginRefresh: true, animation: false) {
+            [weak self] (page) in
+            self?.communityCircleMessagesGetApi(page: page)
+        }
+        tableView.addAutoNormalFooter(withAutomaticallyRefresh: true, loadMoreBlock: {
+            [weak self] (page) in
+            self?.communityCircleMessagesGetApi(page: page)
+        })
+    }
+    
+    private lazy var tableView: UITableView = {
+        let tableView = UITableView(frame: CGRect.zero, style: UITableView.Style.grouped)
+        tableView.separatorStyle = .none
+        tableView.backgroundColor = kf7f8faColor
+        tableView.dataSource = self
+        tableView.delegate = self
+        return tableView
+    }()
+    
+    
+    /// 提问呢列表
+    ///
+    /// - Parameter page: 分页
+    func communityCircleMessagesGetApi(page: Int) {
+        SwiftMoyaNetWorkServiceCommunity.shared().communityCircleMessagesGetApi(id: circleId ?? 0, page: page, completion: {
+            [weak self] (communityCircleMessagesModel) -> (Void) in
+            let communityCircleMessagesModel = communityCircleMessagesModel as? CommunityCircleMessagesModel
+            if communityCircleMessagesModel?.pagination?.currentPage == 1{
+                self?.communityCircleMessageModels.removeAll()
+                self?.tableView.resetNoMoreData()
+            }
+            self?.communityCircleMessageModels = (self?.communityCircleMessageModels)! + (communityCircleMessagesModel?.data!)!
+            self?.tableView.reloadData()
+            MJRefreshManager.mjRefreshManagerPaginationNoHiddenFooter(tableView: self?.tableView, pagination: communityCircleMessagesModel?.pagination)
+        }) {
+            [weak self] loadingStatus in
+            MJRefreshManager.mjRefreshManagerLoadingStatus(tableView: self?.tableView,loadingStatus: loadingStatus)
+        }
+    }
+
+}
+
+extension CircleLeavingMessageView : UITableViewDelegate,UITableViewDataSource {
+    
+    func numberOfSections(in tableView: UITableView) -> Int {
+        return communityCircleMessageModels.count
+    }
+    
+    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
+        return 4
+    }
+    
+    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
+        let communityCircleMessageModel = communityCircleMessageModels[indexPath.section]
+        switch indexPath.row {
+        //贴子用户
+        case 0:
+            let cell = CircleLeavingMessageUserTableViewCell.cellWith(tableView: tableView, indexPath: indexPath)
+            cell.deleteClosure = {
+                [weak self] y in
+            }
+            cell.communityCircleMessageModel = communityCircleMessageModel
+            return cell
+        //内容
+        case 1:
+            let cell = CircleLeavingMessageContentTableViewCell.cellWith(tableView: tableView, indexPath: indexPath)
+            cell.communityCircleMessageModel = communityCircleMessageModel
+            return cell
+        //评论列表
+        case 2:
+            let cell = CircleLeavingMessageCommentListTableViewCell.cellWith(tableView: tableView, indexPath: indexPath)
+            cell.communityCircleMessageModel = communityCircleMessageModel
+            return cell
+        //评论 顶踩
+        case 3:
+            let cell = CircleLeavingMessageCommentTopStepTableViewCell.cellWith(tableView: tableView, indexPath: indexPath)
+            cell.communityCircleMessageModel = communityCircleMessageModel
+            return cell
+        default:
+            return UITableViewCell()
+        }
+        
+    }
+    
+    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
+        
+    }
+    
+    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
+
+        switch indexPath.row {
+        //用户
+        case 0:
+           return 80
+        //内容
+        case 1:
+            let communityCircleMessageModel = communityCircleMessageModels[indexPath.section]
+            communityCircleMessageModel.contentHeight = communityCircleMessageModel.content?.heightForComment(font: kRegularFont15!, width: kScreenWidth - 28)
+            return ((communityCircleMessageModel.contentHeight ?? 0.0) + 100)
+        //评论
+        case 2:
+            let communityCircleMessageModel = communityCircleMessageModels[indexPath.section]
+
+            if !(communityCircleMessageModel.comment?.isEmpty ?? true) {
+                var height : CGFloat?
+                for communityCircleMessageModel in communityCircleMessageModel.comment!.prefix(2) {
+                    
+                    let nameStr = "\(communityCircleMessageModel.username ?? ""):"
+                    let contentStr = "\(communityCircleMessageModel.content ?? "")"
+                    
+                    let str =  nameStr + contentStr
+                    let strHeight = (str.heightForComment(font: kRegularFont14!, width:  kScreenWidth-28) + 10.0)
+                    height = (height ?? 0) + strHeight
+                }
+                
+                if (communityCircleMessageModel.commentCount ?? 0) <= 2 {
+                    return (height ?? 0)
+                }else {
+                    return 18 + (height ?? 0)
+                }
+            }
+            return 0
+        case 3:
+            return 48
+        default:
+            return 0
+        }
+    }
+    
+    func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
+        return 0.000001
+        
+    }
+    
+    func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
+        return 10
+    }
+    
+    func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
+        
+        return nil
+    }
+    
+    func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
+        let view = UIView(frame: CGRect(x: 0, y: 0, width: kScreenWidth, height: 10))
+        view.backgroundColor = kf7f8faColor
+        return view
+    }
+}
+
+extension CircleLeavingMessageView : JXPagingViewListViewDelegate {
+    public func listView() -> UIView {
+        return self
+    }
+    
+    public func listViewDidScrollCallback(callback: @escaping (UIScrollView) -> ()) {
+        self.listViewDidScrollCallback = callback
+    }
+    
+    public func listScrollView() -> UIScrollView {
+        return UIScrollView()
+    }
+}

+ 14 - 6
RainbowPlanet/RainbowPlanet/Modules/CircleModule/Circle/ViewController/CircleViewController.swift

@@ -26,15 +26,13 @@ class CircleViewController: BaseViewController {
     }
     
     var circleId : Int?
-    let JXTableHeaderViewHeight: Int = Int(114 + kNavBarTotalHeight + 104)
+    var JXTableHeaderViewHeight: Int = Int(114 + kNavBarTotalHeight + 104)
     let JXHeightForHeaderInSection: Int = 44
     var communityCircleModel : CommunityCircleModel?
     var cmsTemplateTitles = ["精选", "留言"]
     
     override func viewDidLoad() {
         super.viewDidLoad()
-        setupViews()
-        setupLayouts()
         setupData()
     }
     
@@ -69,7 +67,6 @@ class CircleViewController: BaseViewController {
             vc.circleNameStr = self?.communityCircleModel?.name ?? ""
             self?.navigationController?.pushViewController(vc, animated: true)
         }
-        reloadData()
         loadCircleData()
     }
     
@@ -78,7 +75,14 @@ class CircleViewController: BaseViewController {
     func loadCircleData() {
         SwiftMoyaNetWorkServiceCommunity.shared().communityCircleApi(id: circleId ?? 0, completion: {
             [weak self](communityCircleModel) -> (Void) in
+           
             self?.communityCircleModel = communityCircleModel as? CommunityCircleModel
+            if self?.communityCircleModel?.notice != nil &&  self?.communityCircleModel?.notice != "" {
+                self?.JXTableHeaderViewHeight = (self?.JXTableHeaderViewHeight ?? 0) + 84
+            }
+            self?.setupViews()
+            self?.setupLayouts()
+            self?.reloadData()
             self?.navigationBar.backgroundImageView.kf.setImage(with: kURLImage(name: self?.communityCircleModel?.image ?? "default_pic"), placeholder: kImage(name: "default_pic"))
             self?.avatarButton.kf.setImage(with: kURLImage(name: self?.communityCircleModel?.image ?? ""), for: UIControl.State.normal, placeholder: kImage(name: "default_avatar"))
             self?.nameButton.setTitle(self?.communityCircleModel?.name, for: UIControl.State.normal)
@@ -257,9 +261,11 @@ extension CircleViewController : JXPagingViewDelegate {
         switch index {
         case 0:
             let view = CircleEssenceView()
+            view.circleId = circleId
             return view
         default:
             let view = CircleLeavingMessageView()
+            view.circleId = circleId
             return view
         }
     }
@@ -274,14 +280,16 @@ extension CircleViewController : JXPagingViewDelegate {
             avatarButton.alpha = alpha
             nameButton.alpha = alpha
             navigationBgView.alpha = alpha
-            circleHeaderView.alpha = 1 - alpha
+            circleHeaderView.bgView.alpha = 1 - alpha
+            circleHeaderView.bgImageView.alpha = 1 - alpha
             
         } else {
             navigationBar.wr_setBackgroundAlpha(alpha: 0)
             avatarButton.alpha = 0
             nameButton.alpha = 0
             navigationBgView.alpha = 0
-            circleHeaderView.alpha = 1
+            circleHeaderView.bgView.alpha = 1
+            circleHeaderView.bgImageView.alpha = 1
         }
     }
 }

+ 1 - 0
RainbowPlanet/RainbowPlanet/Modules/CircleModule/CircleUserList/View/CircleUserListTableViewCell.swift

@@ -50,6 +50,7 @@ class CircleUserListTableViewCell: UITableViewCell {
         titleLabel.snp.makeConstraints { (make) in
             make.centerY.equalToSuperview()
             make.left.equalTo(avatarImageView.snp.right).offset(10)
+            make.right.equalTo(-14)
         }
         bottomLineLabel.snp.makeConstraints { (make) in
             make.bottom.left.right.equalToSuperview()

+ 1 - 1
RainbowPlanet/RainbowPlanet/Modules/CircleModule/CircleUserList/ViewController/CircleUserListViewController.swift

@@ -57,7 +57,7 @@ class CircleUserListViewController: BaseViewController {
     }()
     
     func communityCircleMembersApi(page:Int) {
-        SwiftMoyaNetWorkServiceCommunity.shared().communityCircleMembersApi(circleId: circleId ?? 0, completion: {
+        SwiftMoyaNetWorkServiceCommunity.shared().communityCircleMembersApi(circleId: circleId ?? 0, page: page, completion: {
             [weak self] (communityCircleUserListModel) -> (Void) in
             DIYEmptyView.emptyNoDataTableView(tableView: self?.tableView,imageStr: .one,detailStr: .one)
             let communityCircleUserListModel = communityCircleUserListModel as? CommunityCircleUserListModel

+ 1 - 1
RainbowPlanet/RainbowPlanet/Modules/CommunityModule/Community/View/Cell/CardContent/User/CardContentUserTableViewCell.swift

@@ -169,7 +169,7 @@ class CardContentUserTableViewCell: UITableViewCell {
                 kAppDelegate.setLogin()
             }else {
                 let window = kAppDelegate.window
-                let rect = self?.setButton.convert(setButton.bounds, from: window)
+                let rect = self?.setButton.convert((self?.setButton.bounds)!, from: window)
                 let y = CGFloat(abs((rect?.origin.y)!))
                 if let likeClosure = self?.likeClosure {
                     likeClosure(y)

+ 42 - 1
RainbowPlanet/RainbowPlanet/Service/SwiftMoyaService/SwiftMoyaServiceApi/SwiftMoyaServiceCommunity/SwiftMoyaNetWorkServiceCommunity.swift

@@ -654,13 +654,54 @@ public class SwiftMoyaNetWorkServiceCommunity: NSObject {
     ///   - id: 圈子Id
     ///   - completion: 完成
     ///   - fail: 失败
-    func communityCircleMembersApi(circleId:Int,completion: @escaping successCallBack,fail: @escaping failCallback) {
+    func communityCircleMembersApi(circleId:Int,page:Int,completion: @escaping successCallBack,fail: @escaping failCallback) {
         var parameters = Dictionary<String,Any>()
         parameters.updateValue(circleId, forKey: "id")
+        parameters.updateValue(page, forKey: "page")
         SwiftMoyaNetWorkManager.shared.requestObject(CommunityCircleUserListModel.self, target: MultiTarget(SwiftMoyaServiceCommunityApi.communityCircleMembers(parameters: parameters)), completion: { (communityCircleUserListModel) in
             completion(communityCircleUserListModel)
         }) { (loadingStatus) in
             fail(loadingStatus)
         }
     }
+    
+    // MARK: - 精华帖列表
+    /// 精华帖列表
+    ///
+    /// - Parameters:
+    ///   - id: 圈子Id
+    ///   - page: 分页
+    ///   - completion: 回调
+    func communityCircleArticlesApi(id:Int,page:Int = 1,completion: @escaping successCallBack,fail:@escaping failCallback) {
+        var parameters = Dictionary<String,Any>()
+        parameters.updateValue(page, forKey: "page")
+        parameters.updateValue(id, forKey: "id")
+        
+        SwiftMoyaNetWorkManager.shared.requestObject(CommunityRecommendFeedModel.self, target: MultiTarget(SwiftMoyaServiceCommunityApi.communityCircleArticles(parameters: parameters)), completion: {  (communityRecommendFeedModel) in
+            completion(communityRecommendFeedModel)
+        }) {
+            (loadingStatus) in
+            fail(loadingStatus)
+        }
+    }
+    
+    // MARK: - 提问-提问列表
+    /// 提问-提问列表
+    ///
+    /// - Parameters:
+    ///   - id: 圈子Id
+    ///   - page: 分页
+    ///   - completion: 回调
+    func communityCircleMessagesGetApi(id:Int,page:Int = 1,completion: @escaping successCallBack,fail:@escaping failCallback) {
+        var parameters = Dictionary<String,Any>()
+        parameters.updateValue(page, forKey: "page")
+        parameters.updateValue(id, forKey: "id")
+        
+        SwiftMoyaNetWorkManager.shared.requestObject(CommunityCircleMessagesModel.self, target: MultiTarget(SwiftMoyaServiceCommunityApi.communityCircleMessagesGet(parameters: parameters)), completion: {  (communityCircleMessagesModel) in
+            completion(communityCircleMessagesModel)
+        }) {
+            (loadingStatus) in
+            fail(loadingStatus)
+        }
+    }
 }

+ 27 - 4
RainbowPlanet/RainbowPlanet/Service/SwiftMoyaService/SwiftMoyaServiceApi/SwiftMoyaServiceCommunity/SwiftMoyaServiceCommunityApi.swift

@@ -132,6 +132,13 @@ public let kCommunityCircleQuestionApi = "/community/circle/question"
 ///  圈子用户列表
 public let kCommunityCircleMembersApi = "/community/circle/members"
 
+// MARK: -  圈子-精华帖列表
+///  圈子-精华帖列表
+public let kCommunityCircleArticlesApi = "/community/circle/articles"
+
+// MARK: -  提问-提问列表
+///  提问-提问列表
+public let kCommunityCircleMessagesApi = "/community/circle/messages"
 
 /// 社区
 ///
@@ -166,6 +173,8 @@ public let kCommunityCircleMembersApi = "/community/circle/members"
 /// - communityCircleJoinDelete : 退出圈子
 /// - communityCircleQuestion : 圈子进入问题
 /// - communityCircleMembers : 圈子用户列表
+/// - communityCircleArticles : 圈子-精华帖列表
+/// - communityCircleMessages : 提问-提问列表
 
 
 public enum SwiftMoyaServiceCommunityApi {
@@ -201,6 +210,8 @@ public enum SwiftMoyaServiceCommunityApi {
     case communityCircleJoinDelete(parameters:Dictionary<String, Any>)
     case communityCircleQuestion(parameters:Dictionary<String, Any>)
     case communityCircleMembers(parameters:Dictionary<String, Any>)
+    case communityCircleArticles(parameters:Dictionary<String, Any>)
+    case communityCircleMessagesGet(parameters:Dictionary<String, Any>)
     
 }
 
@@ -239,7 +250,9 @@ extension SwiftMoyaServiceCommunityApi: TargetType {
              .communityCircleJoinPost,
              .communityCircleJoinDelete,
              .communityCircleQuestion,
-             .communityCircleMembers
+             .communityCircleMembers,
+             .communityCircleArticles,
+             .communityCircleMessagesGet
             :
             return URL(string: kApiDataPrefix())!
         }
@@ -311,6 +324,10 @@ extension SwiftMoyaServiceCommunityApi: TargetType {
             return kCommunityCircleQuestionApi
         case .communityCircleMembers:
             return kCommunityCircleMembersApi
+        case .communityCircleArticles:
+            return kCommunityCircleArticlesApi
+        case .communityCircleMessagesGet:
+            return kCommunityCircleMessagesApi
         }
     }
     
@@ -345,7 +362,9 @@ extension SwiftMoyaServiceCommunityApi: TargetType {
              .communityCateMusicList,
              .communityCircle,
              .communityCircleQuestion,
-             .communityCircleMembers
+             .communityCircleMembers,
+             .communityCircleArticles,
+             .communityCircleMessagesGet
             :
             return .get
         case .communityMemberFollowTopicCancelFollow,
@@ -392,7 +411,9 @@ extension SwiftMoyaServiceCommunityApi: TargetType {
              .communityCircleJoinPost(var parameters),
              .communityCircleJoinDelete(var parameters),
              .communityCircleQuestion(var parameters),
-             .communityCircleMembers(var parameters)
+             .communityCircleMembers(var parameters),
+             .communityCircleArticles(var parameters),
+             .communityCircleMessagesGet(var parameters)
             :
             let sign = SwiftSign.shared().sign(signType:.AccessToken, parameters: parameters)
             parameters.updateValue(sign, forKey: "sign")
@@ -446,7 +467,9 @@ extension SwiftMoyaServiceCommunityApi: TargetType {
              .communityCircleJoinPost,
              .communityCircleJoinDelete,
              .communityCircleQuestion,
-             .communityCircleMembers
+             .communityCircleMembers,
+             .communityCircleArticles,
+             .communityCircleMessagesGet
             :
             return (headerParameters(headerType: .tokenHeader) as! [String : String])
         }

+ 22 - 0
RainbowPlanet/RainbowPlanet/Supporting Files/CommunityModule.xcassets/ico_notice.imageset/Contents.json

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

BIN=BIN
RainbowPlanet/RainbowPlanet/Supporting Files/CommunityModule.xcassets/ico_notice.imageset/ico_notice@2x.png


BIN=BIN
RainbowPlanet/RainbowPlanet/Supporting Files/CommunityModule.xcassets/ico_notice.imageset/ico_notice@3x.png


+ 22 - 0
RainbowPlanet/RainbowPlanet/Supporting Files/CommunityModule.xcassets/question_btn_dislike.imageset/Contents.json

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

BIN=BIN
RainbowPlanet/RainbowPlanet/Supporting Files/CommunityModule.xcassets/question_btn_dislike.imageset/question_btn_dislike@2x.png


BIN=BIN
RainbowPlanet/RainbowPlanet/Supporting Files/CommunityModule.xcassets/question_btn_dislike.imageset/question_btn_dislike@3x.png


+ 22 - 0
RainbowPlanet/RainbowPlanet/Supporting Files/CommunityModule.xcassets/question_btn_dislike_pre.imageset/Contents.json

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

BIN=BIN
RainbowPlanet/RainbowPlanet/Supporting Files/CommunityModule.xcassets/question_btn_dislike_pre.imageset/question_btn_dislike_pre@2x.png


BIN=BIN
RainbowPlanet/RainbowPlanet/Supporting Files/CommunityModule.xcassets/question_btn_dislike_pre.imageset/question_btn_dislike_pre@3x.png


+ 22 - 0
RainbowPlanet/RainbowPlanet/Supporting Files/CommunityModule.xcassets/question_btn_like.imageset/Contents.json

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

BIN=BIN
RainbowPlanet/RainbowPlanet/Supporting Files/CommunityModule.xcassets/question_btn_like.imageset/question_btn_like@2x.png


BIN=BIN
RainbowPlanet/RainbowPlanet/Supporting Files/CommunityModule.xcassets/question_btn_like.imageset/question_btn_like@3x.png


+ 22 - 0
RainbowPlanet/RainbowPlanet/Supporting Files/CommunityModule.xcassets/question_btn_like_pre.imageset/Contents.json

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

BIN=BIN
RainbowPlanet/RainbowPlanet/Supporting Files/CommunityModule.xcassets/question_btn_like_pre.imageset/question_btn_like_pre@2x.png


BIN=BIN
RainbowPlanet/RainbowPlanet/Supporting Files/CommunityModule.xcassets/question_btn_like_pre.imageset/question_btn_like_pre@3x.png


+ 22 - 0
RainbowPlanet/RainbowPlanet/Supporting Files/CommunityModule.xcassets/question_ico_img.imageset/Contents.json

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

BIN=BIN
RainbowPlanet/RainbowPlanet/Supporting Files/CommunityModule.xcassets/question_ico_img.imageset/question_ico_img@2x.png


BIN=BIN
RainbowPlanet/RainbowPlanet/Supporting Files/CommunityModule.xcassets/question_ico_img.imageset/question_ico_img@3x.png