瀏覽代碼

风采视频处理

Steven 2 年之前
父節點
當前提交
74b249071c
共有 100 個文件被更改,包括 1440 次插入5484 次删除
  1. 18 0
      KulexiuForTeacher/KulexiuForTeacher.xcodeproj/project.pbxproj
  2. 二進制
      KulexiuForTeacher/KulexiuForTeacher.xcworkspace/xcuserdata/wangzhi.xcuserdatad/UserInterfaceState.xcuserstate
  3. 10 14
      KulexiuForTeacher/KulexiuForTeacher.xcworkspace/xcuserdata/wangzhi.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist
  4. 22 0
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Chat/image_add.imageset/Contents.json
  5. 二進制
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Chat/image_add.imageset/image_add@2x.png
  6. 二進制
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Chat/image_add.imageset/image_add@3x.png
  7. 22 0
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/cancle_button.imageset/Contents.json
  8. 二進制
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/cancle_button.imageset/cancle_button@2x.png
  9. 二進制
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/cancle_button.imageset/cancle_button@3x.png
  10. 8 2
      KulexiuForTeacher/KulexiuForTeacher/Common/Tools/Category/UIView+ExtensionForDotLine.m
  11. 3 3
      KulexiuForTeacher/KulexiuForTeacher/Module/Login/View/PasswordBodyView.xib
  12. 1 1
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/CreateStyle/Controller/InstrumentChooseViewController.h
  13. 213 3
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/CreateStyle/Controller/MyStyleViewController.m
  14. 18 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/CreateStyle/Model/KSVideoHelper.h
  15. 68 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/CreateStyle/Model/KSVideoHelper.m
  16. 27 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/CreateStyle/Model/StyleVideoModel.h
  17. 141 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/CreateStyle/Model/StyleVideoModel.m
  18. 3 1
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/CreateStyle/View/MyStyleIntroduceCell.h
  19. 91 2
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/CreateStyle/View/MyStyleIntroduceCell.m
  20. 2 4
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/CreateStyle/View/MyStyleIntroduceCell.xib
  21. 9 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/CreateStyle/View/MyStyleVideoCell.h
  22. 62 3
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/CreateStyle/View/MyStyleVideoCell.m
  23. 1 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/CreateStyle/View/MyStyleVideoCell.xib
  24. 20 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/CreateStyle/View/MyStyleVideoChooseView.h
  25. 82 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/CreateStyle/View/MyStyleVideoChooseView.m
  26. 6 11
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/CreateStyle/View/MyStyleVideoView.h
  27. 21 27
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/CreateStyle/View/MyStyleVideoView.m
  28. 11 49
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/CreateStyle/View/MyStyleVideoView.xib
  29. 1 1
      KulexiuForTeacher/Podfile
  30. 6 6
      KulexiuForTeacher/Podfile.lock
  31. 1 1
      KulexiuForTeacher/Pods/Headers/Private/SDWebImage/NSData+ImageContentType.h
  32. 1 1
      KulexiuForTeacher/Pods/Headers/Private/SDWebImage/SDImageCache.h
  33. 1 1
      KulexiuForTeacher/Pods/Headers/Private/SDWebImage/SDWebImageCompat.h
  34. 0 1
      KulexiuForTeacher/Pods/Headers/Private/SDWebImage/SDWebImageDecoder.h
  35. 1 1
      KulexiuForTeacher/Pods/Headers/Private/SDWebImage/SDWebImageDownloader.h
  36. 1 1
      KulexiuForTeacher/Pods/Headers/Private/SDWebImage/SDWebImageDownloaderOperation.h
  37. 1 1
      KulexiuForTeacher/Pods/Headers/Private/SDWebImage/SDWebImageManager.h
  38. 1 1
      KulexiuForTeacher/Pods/Headers/Private/SDWebImage/SDWebImageOperation.h
  39. 1 1
      KulexiuForTeacher/Pods/Headers/Private/SDWebImage/SDWebImagePrefetcher.h
  40. 1 1
      KulexiuForTeacher/Pods/Headers/Private/SDWebImage/UIButton+WebCache.h
  41. 1 1
      KulexiuForTeacher/Pods/Headers/Private/SDWebImage/UIImage+GIF.h
  42. 1 1
      KulexiuForTeacher/Pods/Headers/Private/SDWebImage/UIImage+MultiFormat.h
  43. 1 1
      KulexiuForTeacher/Pods/Headers/Private/SDWebImage/UIImageView+HighlightedWebCache.h
  44. 1 1
      KulexiuForTeacher/Pods/Headers/Private/SDWebImage/UIImageView+WebCache.h
  45. 1 1
      KulexiuForTeacher/Pods/Headers/Private/SDWebImage/UIView+WebCacheOperation.h
  46. 1 1
      KulexiuForTeacher/Pods/Headers/Public/SDWebImage/NSData+ImageContentType.h
  47. 1 1
      KulexiuForTeacher/Pods/Headers/Public/SDWebImage/SDImageCache.h
  48. 1 1
      KulexiuForTeacher/Pods/Headers/Public/SDWebImage/SDWebImageCompat.h
  49. 0 1
      KulexiuForTeacher/Pods/Headers/Public/SDWebImage/SDWebImageDecoder.h
  50. 1 1
      KulexiuForTeacher/Pods/Headers/Public/SDWebImage/SDWebImageDownloader.h
  51. 1 1
      KulexiuForTeacher/Pods/Headers/Public/SDWebImage/SDWebImageDownloaderOperation.h
  52. 1 1
      KulexiuForTeacher/Pods/Headers/Public/SDWebImage/SDWebImageManager.h
  53. 1 1
      KulexiuForTeacher/Pods/Headers/Public/SDWebImage/SDWebImageOperation.h
  54. 1 1
      KulexiuForTeacher/Pods/Headers/Public/SDWebImage/SDWebImagePrefetcher.h
  55. 1 1
      KulexiuForTeacher/Pods/Headers/Public/SDWebImage/UIButton+WebCache.h
  56. 1 1
      KulexiuForTeacher/Pods/Headers/Public/SDWebImage/UIImage+GIF.h
  57. 1 1
      KulexiuForTeacher/Pods/Headers/Public/SDWebImage/UIImage+MultiFormat.h
  58. 1 1
      KulexiuForTeacher/Pods/Headers/Public/SDWebImage/UIImageView+HighlightedWebCache.h
  59. 1 1
      KulexiuForTeacher/Pods/Headers/Public/SDWebImage/UIImageView+WebCache.h
  60. 1 1
      KulexiuForTeacher/Pods/Headers/Public/SDWebImage/UIView+WebCacheOperation.h
  61. 6 6
      KulexiuForTeacher/Pods/Manifest.lock
  62. 269 148
      KulexiuForTeacher/Pods/Pods.xcodeproj/project.pbxproj
  63. 1 1
      KulexiuForTeacher/Pods/SDWebImage/LICENSE
  64. 264 246
      KulexiuForTeacher/Pods/SDWebImage/README.md
  65. 0 26
      KulexiuForTeacher/Pods/SDWebImage/SDWebImage/NSData+ImageContentType.h
  66. 0 49
      KulexiuForTeacher/Pods/SDWebImage/SDWebImage/NSData+ImageContentType.m
  67. 0 280
      KulexiuForTeacher/Pods/SDWebImage/SDWebImage/SDImageCache.h
  68. 0 657
      KulexiuForTeacher/Pods/SDWebImage/SDWebImage/SDImageCache.m
  69. 0 72
      KulexiuForTeacher/Pods/SDWebImage/SDWebImage/SDWebImageCompat.h
  70. 0 51
      KulexiuForTeacher/Pods/SDWebImage/SDWebImage/SDWebImageCompat.m
  71. 0 18
      KulexiuForTeacher/Pods/SDWebImage/SDWebImage/SDWebImageDecoder.h
  72. 0 92
      KulexiuForTeacher/Pods/SDWebImage/SDWebImage/SDWebImageDecoder.m
  73. 0 196
      KulexiuForTeacher/Pods/SDWebImage/SDWebImage/SDWebImageDownloader.h
  74. 0 318
      KulexiuForTeacher/Pods/SDWebImage/SDWebImage/SDWebImageDownloader.m
  75. 0 106
      KulexiuForTeacher/Pods/SDWebImage/SDWebImage/SDWebImageDownloaderOperation.h
  76. 0 506
      KulexiuForTeacher/Pods/SDWebImage/SDWebImage/SDWebImageDownloaderOperation.m
  77. 0 304
      KulexiuForTeacher/Pods/SDWebImage/SDWebImage/SDWebImageManager.h
  78. 0 375
      KulexiuForTeacher/Pods/SDWebImage/SDWebImage/SDWebImageManager.m
  79. 0 15
      KulexiuForTeacher/Pods/SDWebImage/SDWebImage/SDWebImageOperation.h
  80. 0 108
      KulexiuForTeacher/Pods/SDWebImage/SDWebImage/SDWebImagePrefetcher.h
  81. 0 140
      KulexiuForTeacher/Pods/SDWebImage/SDWebImage/SDWebImagePrefetcher.m
  82. 0 229
      KulexiuForTeacher/Pods/SDWebImage/SDWebImage/UIButton+WebCache.h
  83. 0 270
      KulexiuForTeacher/Pods/SDWebImage/SDWebImage/UIButton+WebCache.m
  84. 0 19
      KulexiuForTeacher/Pods/SDWebImage/SDWebImage/UIImage+GIF.h
  85. 0 161
      KulexiuForTeacher/Pods/SDWebImage/SDWebImage/UIImage+GIF.m
  86. 0 15
      KulexiuForTeacher/Pods/SDWebImage/SDWebImage/UIImage+MultiFormat.h
  87. 0 118
      KulexiuForTeacher/Pods/SDWebImage/SDWebImage/UIImage+MultiFormat.m
  88. 0 100
      KulexiuForTeacher/Pods/SDWebImage/SDWebImage/UIImageView+HighlightedWebCache.h
  89. 0 112
      KulexiuForTeacher/Pods/SDWebImage/SDWebImage/UIImageView+HighlightedWebCache.m
  90. 0 215
      KulexiuForTeacher/Pods/SDWebImage/SDWebImage/UIImageView+WebCache.h
  91. 0 281
      KulexiuForTeacher/Pods/SDWebImage/SDWebImage/UIImageView+WebCache.m
  92. 0 36
      KulexiuForTeacher/Pods/SDWebImage/SDWebImage/UIView+WebCacheOperation.h
  93. 0 55
      KulexiuForTeacher/Pods/SDWebImage/SDWebImage/UIView+WebCacheOperation.m
  94. 1 1
      KulexiuForTeacher/Pods/Target Support Files/Pods-KulexiuForTeacher/Pods-KulexiuForTeacher-acknowledgements.markdown
  95. 1 1
      KulexiuForTeacher/Pods/Target Support Files/Pods-KulexiuForTeacher/Pods-KulexiuForTeacher-acknowledgements.plist
  96. 2 0
      KulexiuForTeacher/Pods/Target Support Files/SDWebImage/SDWebImage.debug.xcconfig
  97. 2 0
      KulexiuForTeacher/Pods/Target Support Files/SDWebImage/SDWebImage.release.xcconfig
  98. 二進制
      KulexiuForTeacher/build/Debug-iphonesimulator/KulexiuForTeacher.app/Assets.car
  99. 二進制
      KulexiuForTeacher/build/Debug-iphonesimulator/KulexiuForTeacher.app/KulexiuForTeacher
  100. 二進制
      KulexiuForTeacher/build/Debug-iphonesimulator/KulexiuForTeacher.app/PasswordBodyView.nib

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

@@ -492,6 +492,9 @@
 		BCB635BF27F7256B00ACFDCF /* KSDocument.m in Sources */ = {isa = PBXBuildFile; fileRef = BCB635BD27F7256B00ACFDCF /* KSDocument.m */; };
 		BCC03F88280460C000461B7C /* InstrumentHeaderView.m in Sources */ = {isa = PBXBuildFile; fileRef = BCC03F86280460C000461B7C /* InstrumentHeaderView.m */; };
 		BCC03F89280460C000461B7C /* InstrumentHeaderView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BCC03F87280460C000461B7C /* InstrumentHeaderView.xib */; };
+		BCC03F8C280526B300461B7C /* MyStyleVideoChooseView.m in Sources */ = {isa = PBXBuildFile; fileRef = BCC03F8B280526B300461B7C /* MyStyleVideoChooseView.m */; };
+		BCC03F8F2805484200461B7C /* StyleVideoModel.m in Sources */ = {isa = PBXBuildFile; fileRef = BCC03F8D2805484200461B7C /* StyleVideoModel.m */; };
+		BCC03F9228054DC300461B7C /* KSVideoHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = BCC03F9128054DC300461B7C /* KSVideoHelper.m */; };
 		BCC9F35527F5F4FD00647449 /* LiveSeatMember.m in Sources */ = {isa = PBXBuildFile; fileRef = BCC9F35427F5F4FD00647449 /* LiveSeatMember.m */; };
 		BCC9F40727F69BD200647449 /* SealClass.strings in Resources */ = {isa = PBXBuildFile; fileRef = BCC9F35C27F69BD100647449 /* SealClass.strings */; };
 		BCC9F40927F69BD200647449 /* ZoomControl.m in Sources */ = {isa = PBXBuildFile; fileRef = BCC9F36427F69BD100647449 /* ZoomControl.m */; };
@@ -1495,6 +1498,12 @@
 		BCC03F85280460C000461B7C /* InstrumentHeaderView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = InstrumentHeaderView.h; sourceTree = "<group>"; };
 		BCC03F86280460C000461B7C /* InstrumentHeaderView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = InstrumentHeaderView.m; sourceTree = "<group>"; };
 		BCC03F87280460C000461B7C /* InstrumentHeaderView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = InstrumentHeaderView.xib; sourceTree = "<group>"; };
+		BCC03F8A280526B300461B7C /* MyStyleVideoChooseView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MyStyleVideoChooseView.h; sourceTree = "<group>"; };
+		BCC03F8B280526B300461B7C /* MyStyleVideoChooseView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MyStyleVideoChooseView.m; sourceTree = "<group>"; };
+		BCC03F8D2805484200461B7C /* StyleVideoModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = StyleVideoModel.m; sourceTree = "<group>"; };
+		BCC03F8E2805484200461B7C /* StyleVideoModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StyleVideoModel.h; sourceTree = "<group>"; };
+		BCC03F9028054DC300461B7C /* KSVideoHelper.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = KSVideoHelper.h; sourceTree = "<group>"; };
+		BCC03F9128054DC300461B7C /* KSVideoHelper.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = KSVideoHelper.m; sourceTree = "<group>"; };
 		BCC9F35327F5F4FD00647449 /* LiveSeatMember.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = LiveSeatMember.h; sourceTree = "<group>"; };
 		BCC9F35427F5F4FD00647449 /* LiveSeatMember.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = LiveSeatMember.m; sourceTree = "<group>"; };
 		BCC9F35B27F69BD100647449 /* KSRemoteUserManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KSRemoteUserManager.h; sourceTree = "<group>"; };
@@ -3508,8 +3517,12 @@
 		BC5EB5AE2804016200B4A3B0 /* Model */ = {
 			isa = PBXGroup;
 			children = (
+				BCC03F8E2805484200461B7C /* StyleVideoModel.h */,
+				BCC03F8D2805484200461B7C /* StyleVideoModel.m */,
 				BCF61BEA28042D190000ACFE /* InstrumentMessageModel.h */,
 				BCF61BEB28042D1A0000ACFE /* InstrumentMessageModel.m */,
+				BCC03F9028054DC300461B7C /* KSVideoHelper.h */,
+				BCC03F9128054DC300461B7C /* KSVideoHelper.m */,
 			);
 			path = Model;
 			sourceTree = "<group>";
@@ -3532,6 +3545,8 @@
 				BCF61BDA280417100000ACFE /* MyStyleVideoView.h */,
 				BCF61BDB280417100000ACFE /* MyStyleVideoView.m */,
 				BCF61BDD280417190000ACFE /* MyStyleVideoView.xib */,
+				BCC03F8A280526B300461B7C /* MyStyleVideoChooseView.h */,
+				BCC03F8B280526B300461B7C /* MyStyleVideoChooseView.m */,
 				BCF61BE5280425DA0000ACFE /* InstrumentChooseCell.h */,
 				BCF61BE6280425DA0000ACFE /* InstrumentChooseCell.m */,
 				BCF61BE7280425DA0000ACFE /* InstrumentChooseCell.xib */,
@@ -4456,6 +4471,7 @@
 				277932F227E310070010E277 /* TZGifPhotoPreviewController.m in Sources */,
 				275B16FD27EB083C0081FDEF /* ChatAddressViewController.m in Sources */,
 				275E8A6F27E18F2300DD3F6E /* ViewController.m in Sources */,
+				BCC03F9228054DC300461B7C /* KSVideoHelper.m in Sources */,
 				275B170827EB13D50081FDEF /* KSChatConversationViewController.m in Sources */,
 				2779320527E30FC30010E277 /* KSAudioRecordFileManager.m in Sources */,
 				277931C627E30FC20010E277 /* NSObject+KSImpChangeTool.m in Sources */,
@@ -4583,6 +4599,7 @@
 				27D83F5727F4224F00062476 /* LivePreviewBodyView.m in Sources */,
 				277932B927E30FFE0010E277 /* TADotView.m in Sources */,
 				2773204D27EDB72B008FAECA /* LFPopupMenu.m in Sources */,
+				BCC03F8F2805484200461B7C /* StyleVideoModel.m in Sources */,
 				BC0167A627FC06D600AE66A1 /* MyCourseViewController.m in Sources */,
 				BCA9CE3427FD93C700D558C6 /* AccompanyEvaluateCell.m in Sources */,
 				BCC9F42027F69BD200647449 /* PersonListCell.m in Sources */,
@@ -4716,6 +4733,7 @@
 				277932E227E310070010E277 /* TZImageCropManager.m in Sources */,
 				277932B327E30FFE0010E277 /* QWdynamicModel.m in Sources */,
 				BCF61BE8280425DA0000ACFE /* InstrumentChooseCell.m in Sources */,
+				BCC03F8C280526B300461B7C /* MyStyleVideoChooseView.m in Sources */,
 				2779329627E30FEB0010E277 /* MSSBrowseZoomScrollView.m in Sources */,
 				BCB635B927F722E800ACFDCF /* KSDocumentViewController.m in Sources */,
 				275E3DE727F4677F0010EC30 /* LiveRoomHeadView.m in Sources */,

二進制
KulexiuForTeacher/KulexiuForTeacher.xcworkspace/xcuserdata/wangzhi.xcuserdatad/UserInterfaceState.xcuserstate


+ 10 - 14
KulexiuForTeacher/KulexiuForTeacher.xcworkspace/xcuserdata/wangzhi.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist

@@ -87,33 +87,29 @@
       <BreakpointProxy
          BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
          <BreakpointContent
-            uuid = "503586AF-08CB-4771-BD50-9F7FA7E200FE"
+            uuid = "F2D61EE5-4015-44E6-8AD0-B683A9ACBA80"
             shouldBeEnabled = "Yes"
             ignoreCount = "0"
             continueAfterRunningActions = "No"
-            filePath = "KulexiuForTeacher/Module/Mine/CreateStyle/Controller/MyStyleViewController.m"
+            filePath = "KulexiuForTeacher/Common/Base/KSNetworkingManager.m"
             startingColumnNumber = "9223372036854775807"
             endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "151"
-            endingLineNumber = "151"
-            landmarkName = "-chooseInstrumentWithArray:"
+            startingLineNumber = "659"
+            endingLineNumber = "659"
+            landmarkName = "+saveTeacherStyleRequest:styleVideo:subjectId:subjectName:introduction:success:faliure:"
             landmarkType = "7">
          </BreakpointContent>
       </BreakpointProxy>
       <BreakpointProxy
-         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         BreakpointExtensionID = "Xcode.Breakpoint.ExceptionBreakpoint">
          <BreakpointContent
-            uuid = "38791F65-5E40-494F-A5B4-597E6F9463A6"
+            uuid = "412DE883-A827-4418-91BA-203294F9CA16"
             shouldBeEnabled = "Yes"
             ignoreCount = "0"
             continueAfterRunningActions = "No"
-            filePath = "KulexiuForTeacher/Module/Mine/CreateStyle/Controller/MyStyleViewController.m"
-            startingColumnNumber = "9223372036854775807"
-            endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "109"
-            endingLineNumber = "109"
-            landmarkName = "-submitMyStyle"
-            landmarkType = "7">
+            breakpointStackSelectionBehavior = "1"
+            scope = "1"
+            stopOnStyle = "0">
          </BreakpointContent>
       </BreakpointProxy>
    </Breakpoints>

+ 22 - 0
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Chat/image_add.imageset/Contents.json

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

二進制
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Chat/image_add.imageset/image_add@2x.png


二進制
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Chat/image_add.imageset/image_add@3x.png


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

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

二進制
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/cancle_button.imageset/cancle_button@2x.png


二進制
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/cancle_button.imageset/cancle_button@3x.png


+ 8 - 2
KulexiuForTeacher/KulexiuForTeacher/Common/Tools/Category/UIView+ExtensionForDotLine.m

@@ -22,14 +22,20 @@
     borderLayer.position = CGPointMake(CGRectGetMidX(self.bounds), CGRectGetMidY(self.bounds));
     borderLayer.path = [UIBezierPath bezierPathWithRoundedRect:borderLayer.bounds cornerRadius:cornerRadius].CGPath;
     borderLayer.lineWidth = width;
+    borderLayer.lineCap = @"square";
     //虚线边框---小边框的长度
     borderLayer.lineDashPattern = @[@(length),@(space)];
-    borderLayer.lineDashPhase = 0.1;
     //实线边框
     borderLayer.fillColor = [UIColor clearColor].CGColor;
     borderLayer.strokeColor = lineColor.CGColor;
+//    [self removeAllSublayers];
     [self.layer addSublayer :borderLayer];
-    
+}
+
+- (void)removeAllSublayers {
+    for (CALayer *layer in self.layer.sublayers) {
+        [layer removeFromSuperlayer];
+    }
 }
 
 @end

+ 3 - 3
KulexiuForTeacher/KulexiuForTeacher/Module/Login/View/PasswordBodyView.xib

@@ -1,9 +1,9 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="19529" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES">
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="20037" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES">
     <device id="retina6_1" orientation="portrait" appearance="light"/>
     <dependencies>
         <deployment identifier="iOS"/>
-        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="19519"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="20020"/>
         <capability name="System colors in document resources" minToolsVersion="11.0"/>
         <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
     </dependencies>
@@ -86,7 +86,7 @@
                         <textField opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" placeholder="请输入您的密码" textAlignment="natural" clearsOnBeginEditing="YES" minimumFontSize="17" clearButtonMode="whileEditing" translatesAutoresizingMaskIntoConstraints="NO" id="CMD-F6-CMg">
                             <rect key="frame" x="35" y="22" width="344" height="48"/>
                             <fontDescription key="fontDescription" type="system" pointSize="16"/>
-                            <textInputTraits key="textInputTraits" keyboardType="namePhonePad" returnKeyType="done" enablesReturnKeyAutomatically="YES" secureTextEntry="YES"/>
+                            <textInputTraits key="textInputTraits" keyboardType="alphabet" returnKeyType="done" enablesReturnKeyAutomatically="YES" secureTextEntry="YES"/>
                         </textField>
                         <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="slk-N9-8iH">
                             <rect key="frame" x="35" y="69" width="344" height="1"/>

+ 1 - 1
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/CreateStyle/Controller/InstrumentChooseViewController.h

@@ -8,7 +8,7 @@
 #import "KSBaseViewController.h"
 
 
-typedef void(^ChooseInstrumentCallback)(NSMutableArray *chooseArray);
+typedef void(^ChooseInstrumentCallback)(NSMutableArray * _Nullable chooseArray);
 
 NS_ASSUME_NONNULL_BEGIN
 

+ 213 - 3
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/CreateStyle/Controller/MyStyleViewController.m

@@ -11,8 +11,18 @@
 #import "MyStyleVideoCell.h"
 #import "MyStyleBottomView.h"
 #import "InstrumentChooseViewController.h"
+#import "KSMediaManager.h"
+#import "StyleVideoModel.h"
+#import "WMPlayer.h"
 
-@interface MyStyleViewController ()<UITableViewDelegate,UITableViewDataSource>
+@interface MyStyleViewController ()<UITableViewDelegate,UITableViewDataSource,WMPlayerDelegate>
+{
+    WMPlayer *_wmPlayer;
+    CGRect _playerFrame;
+}
+@property (nonatomic, strong) UIView *bgView;
+
+@property (nonatomic, assign) BOOL isRatation;
 
 @property (nonatomic, strong) NSMutableArray *instrumentArray;
 
@@ -24,6 +34,12 @@
 
 @property (nonatomic, strong) MyStyleBottomView *bottomView;
 
+@property (nonatomic, strong) KSMediaManager *mediaManager;
+
+@property (strong, nonatomic) MBProgressHUD *HUD;
+
+@property (nonatomic, assign) NSInteger chooseFileIndex;
+
 @end
 
 @implementation MyStyleViewController
@@ -62,7 +78,14 @@
             NSString *subjectIds = [result stringValueForKey:@"subjectId"];
             NSString *subjectNames = [result stringValueForKey:@"subjectName"];
             [self configWithSubjectMessage:subjectIds subjectName:subjectNames];
-            
+            // introduction
+            self.content = [result stringValueForKey:@"introduction"];
+            NSArray *videoList = [result arrayValueForKey:@"styleVideo"];
+            [self.videoArray removeAllObjects];
+            for (NSDictionary *parm in videoList) {
+                StyleVideoModel *model = [[StyleVideoModel alloc] initWithDictionary:parm];
+                [self.videoArray addObject:model];
+            }
         }
         else {
             [self MBPShow:MESSAGEKEY];
@@ -90,6 +113,7 @@
 }
 
 - (void)submitMyStyle {
+    [self.view endEditing:YES];
     if (self.instrumentArray.count <= 0) {
         [self MBPShow:@"至少选择一个可教授乐器"];
         return;
@@ -103,10 +127,31 @@
     }
     NSString *subjectIds = [subjectIdArray componentsJoinedByString:@","];
     NSString *subjectNames = [subjectNameArray componentsJoinedByString:@","];
+    NSMutableArray *videoArray = [NSMutableArray array];
+    for (StyleVideoModel *model in self.videoArray) {
+        NSMutableDictionary *parm = [NSMutableDictionary dictionary];
+        if (model.isChooseVideo) {
+            [parm setValue:model.videoUrl forKey:@"videoUrl"];
+        }
+        else {
+            [parm setValue:model.internalBaseClassIdentifier forKey:@"id"];
+            [parm setValue:model.videoUrl forKey:@"videoUrl"];
+        }
+        [videoArray addObject:parm];
+    }
     
     [self showhud];
-    [KSNetworkingManager saveTeacherStyleRequest:KS_POST styleVideo:self.videoArray subjectId:subjectIds subjectName:subjectNames introduction:self.content success:^(NSDictionary * _Nonnull dic) {
+    [KSNetworkingManager saveTeacherStyleRequest:KS_POST styleVideo:videoArray subjectId:subjectIds subjectName:subjectNames introduction:self.content success:^(NSDictionary * _Nonnull dic) {
         [self removehub];
+        if ([dic integerValueForKey:@"code"] == 200 && [dic boolValueForKey:@"status"]) {
+            MJWeakSelf;
+            [self KSShowMsg:@"保存成功" promptCompletion:^{
+                [weakSelf requestMyStyle];
+            }];
+        }
+        else {
+            [self MBPShow:MESSAGEKEY];
+        }
     } faliure:^(NSError * _Nonnull error) {
         [self removehub];
     }];
@@ -134,15 +179,104 @@
     }
     else if (indexPath.row == 1) {
         MyStyleIntroduceCell *cell = [tableView dequeueReusableCellWithIdentifier:@"MyStyleIntroduceCell"];
+        MJWeakSelf;
+        [cell configWithIntroduceMessage:self.content modifyCallback:^(NSString * _Nullable content) {
+            weakSelf.content = content;
+        }];
         return cell;
     }
     else {
         MyStyleVideoCell *cell = [tableView dequeueReusableCellWithIdentifier:@"MyStyleVideoCell"];
         [cell configWithSource:self.videoArray];
+        MJWeakSelf;
+        [cell opreationCallback:^(STYLEVIDEO type, UIView * _Nullable containerView) {
+            [weakSelf opreationVideoCell:type container:containerView];
+        }];
         return cell;
     }
 }
 
+- (void)opreationVideoCell:(STYLEVIDEO)type container:(UIView *)container {
+    switch (type) {
+        case STYLEVIDEO_CHOOSEFILE:
+        {
+            // 调用相册
+            self.mediaManager = [[KSMediaManager alloc] init];
+            self.mediaManager.mediaType = MEDIATYPE_VIDEO;
+            self.mediaManager.maxPhotoNumber = 1;
+            self.mediaManager.baseCtrl = self;
+            self.mediaManager.needCropImage = NO;
+            MJWeakSelf;
+            [self.mediaManager noAlertCallback:^(NSString * _Nullable videoUrl, NSMutableArray * _Nullable imageArray, NSMutableArray * _Nullable imageAsset) {
+                NSLog(@"%@", videoUrl);
+                // 上传视频
+                [weakSelf uploadVideoWithUrl:videoUrl];
+            }];
+            [self.mediaManager pushImagePickerController];
+        }
+            break;
+        case STYLEVIDEO_PLAY: // 播放
+        {
+            NSInteger index = container.tag - 1000;
+            if (self.videoArray.count > index) {
+                StyleVideoModel *model = self.videoArray[index];
+                [self playVideoWithUrl:model.videoUrl];
+            }
+            
+        }
+            break;
+        case STYLEVIDEO_DELETE: // 删除
+        {
+            NSInteger index = container.tag - 1000;
+            if (self.videoArray.count > index) {
+                [self.videoArray removeObjectAtIndex:index];
+            }
+            [self.tableView reloadData];
+        }
+            break;
+        default:
+            break;
+    }
+}
+
+#pragma mark --- 上传视频文件
+- (void)uploadVideoWithUrl:(NSString *)videoUrl {
+    [self hudTipWillShow:YES];
+    NSData *fileData = [NSData dataWithContentsOfURL:[NSURL fileURLWithPath:videoUrl]];
+    [KSNetworkingManager videoFileUpload:KS_POST fileData:fileData progress:^(int64_t bytesWritten, int64_t totalBytes) {
+        dispatch_main_async_safe(^{
+            // 显示进度
+            if (self.HUD) {
+                self.HUD.progress = bytesWritten / totalBytes;// progress是回调进度
+            }
+        });
+    } success:^(NSDictionary * _Nonnull dic) {
+        [self hudTipWillShow:NO];
+        if ([dic integerValueForKey:@"code"] == 200 && [dic boolValueForKey:@"status"]) {
+            NSString *fileUrl = [[dic dictionaryValueForKey:@"data"] stringValueForKey:@"url"];
+            // 删除文件
+            [self removeVideoWithPath:videoUrl];
+            StyleVideoModel *model = [[StyleVideoModel alloc] init];
+            model.videoUrl = fileUrl;
+            model.isChooseVideo = YES;
+            [self.videoArray addObject:model];
+            [self.tableView reloadData];
+        }
+        else {
+            [self MBPShow:MESSAGEKEY];
+            
+        }
+    } faliure:^(NSError * _Nonnull error) {
+        [self hudTipWillShow:NO];
+    }];
+}
+
+- (void)removeVideoWithPath:(NSString *)videoUrl {
+    NSFileManager *fileMamager = [NSFileManager defaultManager];
+    if ([fileMamager fileExistsAtPath:videoUrl]) {
+        [fileMamager removeItemAtPath:videoUrl error:nil];
+    }
+}
 
 - (void)chooseInstrumentWithArray:(NSMutableArray *)instrumentArray {
     InstrumentChooseViewController *ctrl = [[InstrumentChooseViewController alloc] init];
@@ -159,6 +293,60 @@
     [self.tableView reloadData];
 }
 
+#pragma mark ------ WMPlayer
+- (void)playVideoWithUrl:(NSString *)fileUrl {
+    fileUrl = [fileUrl stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
+    _playerFrame = CGRectMake(0, iPhoneXSafeTopMargin, kScreenWidth, kScreenHeight - iPhoneXSafeTopMargin - iPhoneXSafeBottomMargin);
+    _wmPlayer = [[WMPlayer alloc] initWithFrame:_playerFrame];
+    WMPlayerModel *playModel = [[WMPlayerModel alloc] init];
+    playModel.videoURL = [NSURL URLWithString:fileUrl];
+    _wmPlayer.playerModel = playModel;
+    _wmPlayer.delegate = self;
+    _bgView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, kScreenWidth, kScreenHeight)];
+    _bgView.backgroundColor = [UIColor blackColor];
+    [[UIApplication sharedApplication].keyWindow addSubview:_bgView];
+    [[UIApplication sharedApplication].keyWindow addSubview:_wmPlayer];
+    [[UIApplication sharedApplication].keyWindow bringSubviewToFront:_wmPlayer];
+    
+    [_wmPlayer play];
+}
+
+- (void)wmplayer:(WMPlayer *)wmplayer clickedCloseButton:(UIButton *)backBtn {
+    [wmplayer removePlayer];
+    [_bgView removeFromSuperview];
+    [self setNeedsStatusBarAppearanceUpdate];
+}
+
+- (void)wmplayer:(WMPlayer *)wmplayer clickedFullScreenButton:(UIButton *)fullScreenBtn {
+    self.isRatation = !self.isRatation;
+    
+    if (self.isRatation) {
+        [wmplayer removeFromSuperview];
+        [UIView animateWithDuration:1.0f animations:^{
+            wmplayer.transform = CGAffineTransformMakeRotation(M_PI_2);
+            
+        } completion:^(BOOL finished) {
+            wmplayer.frame = CGRectMake(0, iPhoneXSafeTopMargin, kScreenWidth, kScreenHeight - iPhoneXSafeTopMargin - iPhoneXSafeBottomMargin);
+            [[UIApplication sharedApplication].keyWindow addSubview:wmplayer];
+            [[UIApplication sharedApplication].keyWindow bringSubviewToFront:wmplayer];
+        }];
+    }
+    else {
+        [wmplayer removeFromSuperview];
+        
+        [UIView animateWithDuration:1.0f animations:^{
+            //        复原
+            wmplayer.transform = CGAffineTransformIdentity;
+            
+        } completion:^(BOOL finished) {
+            wmplayer.frame = CGRectMake(0, iPhoneXSafeTopMargin, kScreenWidth, kScreenHeight - iPhoneXSafeTopMargin - iPhoneXSafeBottomMargin);
+            [[UIApplication sharedApplication].keyWindow addSubview:wmplayer];
+            [[UIApplication sharedApplication].keyWindow bringSubviewToFront:wmplayer];
+        }];
+    }
+}
+
+
 #pragma mark ---- lazying
 - (UITableView *)tableView {
     if (!_tableView) {
@@ -190,6 +378,28 @@
     }
     return _videoArray;
 }
+
+- (void)hudTipWillShow:(BOOL)willShow{
+    if (willShow) {
+        [self resignFirstResponder];
+        UIWindow *keyWindow = [UIApplication sharedApplication].keyWindow;
+        if (!_HUD) {
+            _HUD = [MBProgressHUD showHUDAddedTo:keyWindow animated:YES];
+            _HUD.removeFromSuperViewOnHide = YES;
+            _HUD.mode = MBProgressHUDModeDeterminateHorizontalBar;
+            _HUD.label.text = @"正在上传视频文件...";
+            _HUD.contentColor = [UIColor whiteColor];
+            _HUD.bezelView.style = MBProgressHUDBackgroundStyleSolidColor;
+            _HUD.bezelView.backgroundColor = [UIColor colorWithHexString:@"#000000" alpha:0.8];
+        }else{
+            _HUD.progress = 0;
+            [keyWindow addSubview:_HUD];
+            [_HUD showAnimated:YES];
+        }
+    }else{
+        [_HUD hideAnimated:YES];
+    }
+}
 /*
 #pragma mark - Navigation
 

+ 18 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/CreateStyle/Model/KSVideoHelper.h

@@ -0,0 +1,18 @@
+//
+//  KSVideoHelper.h
+//  KulexiuForTeacher
+//
+//  Created by 王智 on 2022/4/12.
+//
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface KSVideoHelper : NSObject
+
++ (void)getVideoPreviewImageUrl:(NSString *)videoUrl forImageView:(UIImageView *)imageView placeholder:(UIImage *)placeHolder;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 68 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/CreateStyle/Model/KSVideoHelper.m

@@ -0,0 +1,68 @@
+//
+//  KSVideoHelper.m
+//  KulexiuForTeacher
+//
+//  Created by 王智 on 2022/4/12.
+//
+
+#import "KSVideoHelper.h"
+#import <AVFoundation/AVAsset.h>
+#import <AVFoundation/AVAssetImageGenerator.h>
+#import <AVFoundation/AVTime.h>
+#import <SDWebImage/SDImageCache.h>
+
+@implementation KSVideoHelper
+
++ (void)getVideoPreviewImageUrl:(NSString *)videoUrl forImageView:(UIImageView *)imageView placeholder:(UIImage *)placeHolder {
+
+    [[SDImageCache sharedImageCache] queryCacheOperationForKey:videoUrl done:^(UIImage * _Nullable image, NSData * _Nullable data, SDImageCacheType cacheType) {
+        //是否有缓存图片
+        if(image){
+            imageView.image = image;
+        }else{
+            //获取视频第一帧
+            [self getVideoFirstViewImage:videoUrl forImageView:imageView placeHolderImage:placeHolder];
+        }
+    }];
+}
+
+// 获取视频第一帧
++ (void)getVideoFirstViewImage:(NSString *)videoURL forImageView:(UIImageView *)imageView placeHolderImage:(UIImage *)placeHolder {
+   
+    NSString *url = videoURL;
+    __block UIImage *videoImage;
+    dispatch_async(dispatch_get_global_queue(0, 0), ^{
+        AVURLAsset *asset = [[AVURLAsset alloc] initWithURL:[NSURL URLWithString:url] options:nil];
+        NSParameterAssert(asset);
+        AVAssetImageGenerator *assetImageGenerator =[[AVAssetImageGenerator alloc] initWithAsset:asset];
+        assetImageGenerator.appliesPreferredTrackTransform = YES;
+        assetImageGenerator.apertureMode =AVAssetImageGeneratorApertureModeEncodedPixels;
+        CGImageRef thumbnailImageRef = NULL;
+        NSError *thumbnailImageGenerationError = nil;
+        thumbnailImageRef = [assetImageGenerator copyCGImageAtTime:CMTimeMake(0, 60)actualTime:NULL error:&thumbnailImageGenerationError];
+        if(!thumbnailImageRef)
+        NSLog(@"thumbnailImageGenerationError %@",thumbnailImageGenerationError);
+        videoImage = thumbnailImageRef ? [[UIImage alloc]initWithCGImage:thumbnailImageRef]: nil;
+        
+        dispatch_async(dispatch_get_main_queue(), ^{
+            //主线程更新UI
+            if(videoImage){
+                imageView.image = videoImage;
+                //缓存图片
+                [[SDImageCache sharedImageCache] storeImage:videoImage forKey:videoURL toDisk:NO completion:^{
+                    
+                }];
+                
+            }else{
+                //如果不是视频就设置图片
+                [imageView sd_setImageWithURL:[NSURL URLWithString:videoURL] placeholderImage:placeHolder];
+            }
+        });
+          
+    });
+
+}
+
+@end
+
+

+ 27 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/CreateStyle/Model/StyleVideoModel.h

@@ -0,0 +1,27 @@
+//
+//  StyleVideoModel.h
+//
+//  Created by Steven  on 2022/4/12
+//  Copyright (c) 2022 __MyCompanyName__. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+
+
+@interface StyleVideoModel : NSObject <NSCoding, NSCopying>
+
+@property (nonatomic, strong) NSString *userId;
+@property (nonatomic, assign) double browse;
+@property (nonatomic, strong) NSString *internalBaseClassIdentifier;
+@property (nonatomic, strong) NSString *updateTime;
+@property (nonatomic, strong) NSString *describe;
+@property (nonatomic, strong) NSString *videoUrl;
+@property (nonatomic, strong) NSString *createTime;
+@property (nonatomic, assign) BOOL isChooseVideo; // 是否本地选择的视频
+
++ (instancetype)modelObjectWithDictionary:(NSDictionary *)dict;
+- (instancetype)initWithDictionary:(NSDictionary *)dict;
+- (NSDictionary *)dictionaryRepresentation;
+
+@end

+ 141 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/CreateStyle/Model/StyleVideoModel.m

@@ -0,0 +1,141 @@
+//
+//  StyleVideoModel.m
+//
+//  Created by Steven  on 2022/4/12
+//  Copyright (c) 2022 __MyCompanyName__. All rights reserved.
+//
+
+#import "StyleVideoModel.h"
+
+
+NSString *const kStyleVideoModelUserId = @"userId";
+NSString *const kStyleVideoModelBrowse = @"browse";
+NSString *const kStyleVideoModelId = @"id";
+NSString *const kStyleVideoModelUpdateTime = @"updateTime";
+NSString *const kStyleVideoModelDescribe = @"describe";
+NSString *const kStyleVideoModelVideoUrl = @"videoUrl";
+NSString *const kStyleVideoModelCreateTime = @"createTime";
+
+
+@interface StyleVideoModel ()
+
+- (id)objectOrNilForKey:(id)aKey fromDictionary:(NSDictionary *)dict;
+
+@end
+
+@implementation StyleVideoModel
+
+@synthesize userId = _userId;
+@synthesize browse = _browse;
+@synthesize internalBaseClassIdentifier = _internalBaseClassIdentifier;
+@synthesize updateTime = _updateTime;
+@synthesize describe = _describe;
+@synthesize videoUrl = _videoUrl;
+@synthesize createTime = _createTime;
+
+
++ (instancetype)modelObjectWithDictionary:(NSDictionary *)dict
+{
+    return [[self alloc] initWithDictionary:dict];
+}
+
+- (instancetype)initWithDictionary:(NSDictionary *)dict
+{
+    self = [super init];
+    
+    // This check serves to make sure that a non-NSDictionary object
+    // passed into the model class doesn't break the parsing.
+    if(self && [dict isKindOfClass:[NSDictionary class]]) {
+            self.userId = [self objectOrNilForKey:kStyleVideoModelUserId fromDictionary:dict];
+            self.browse = [[self objectOrNilForKey:kStyleVideoModelBrowse fromDictionary:dict] doubleValue];
+            self.internalBaseClassIdentifier = [self objectOrNilForKey:kStyleVideoModelId fromDictionary:dict];
+            self.updateTime = [self objectOrNilForKey:kStyleVideoModelUpdateTime fromDictionary:dict];
+            self.describe = [self objectOrNilForKey:kStyleVideoModelDescribe fromDictionary:dict];
+            self.videoUrl = [self objectOrNilForKey:kStyleVideoModelVideoUrl fromDictionary:dict];
+            self.createTime = [self objectOrNilForKey:kStyleVideoModelCreateTime fromDictionary:dict];
+
+    }
+    
+    return self;
+    
+}
+
+- (NSDictionary *)dictionaryRepresentation
+{
+    NSMutableDictionary *mutableDict = [NSMutableDictionary dictionary];
+    [mutableDict setValue:self.userId forKey:kStyleVideoModelUserId];
+    [mutableDict setValue:[NSNumber numberWithDouble:self.browse] forKey:kStyleVideoModelBrowse];
+    [mutableDict setValue:self.internalBaseClassIdentifier forKey:kStyleVideoModelId];
+    [mutableDict setValue:self.updateTime forKey:kStyleVideoModelUpdateTime];
+    [mutableDict setValue:self.describe forKey:kStyleVideoModelDescribe];
+    [mutableDict setValue:self.videoUrl forKey:kStyleVideoModelVideoUrl];
+    [mutableDict setValue:self.createTime forKey:kStyleVideoModelCreateTime];
+
+    return [NSDictionary dictionaryWithDictionary:mutableDict];
+}
+
+- (NSString *)description 
+{
+    return [NSString stringWithFormat:@"%@", [self dictionaryRepresentation]];
+}
+
+#pragma mark - Helper Method
+- (id)objectOrNilForKey:(id)aKey fromDictionary:(NSDictionary *)dict
+{
+    id object = [dict objectForKey:aKey];
+    if ([object isKindOfClass:[NSNumber class]]) {
+        NSNumber *number = object;
+        object = [number stringValue];
+    }
+    return [object isEqual:[NSNull null]] ? nil : object;
+}
+
+
+#pragma mark - NSCoding Methods
+
+- (id)initWithCoder:(NSCoder *)aDecoder
+{
+    self = [super init];
+
+    self.userId = [aDecoder decodeObjectForKey:kStyleVideoModelUserId];
+    self.browse = [aDecoder decodeDoubleForKey:kStyleVideoModelBrowse];
+    self.internalBaseClassIdentifier = [aDecoder decodeObjectForKey:kStyleVideoModelId];
+    self.updateTime = [aDecoder decodeObjectForKey:kStyleVideoModelUpdateTime];
+    self.describe = [aDecoder decodeObjectForKey:kStyleVideoModelDescribe];
+    self.videoUrl = [aDecoder decodeObjectForKey:kStyleVideoModelVideoUrl];
+    self.createTime = [aDecoder decodeObjectForKey:kStyleVideoModelCreateTime];
+    return self;
+}
+
+- (void)encodeWithCoder:(NSCoder *)aCoder
+{
+
+    [aCoder encodeObject:_userId forKey:kStyleVideoModelUserId];
+    [aCoder encodeDouble:_browse forKey:kStyleVideoModelBrowse];
+    [aCoder encodeObject:_internalBaseClassIdentifier forKey:kStyleVideoModelId];
+    [aCoder encodeObject:_updateTime forKey:kStyleVideoModelUpdateTime];
+    [aCoder encodeObject:_describe forKey:kStyleVideoModelDescribe];
+    [aCoder encodeObject:_videoUrl forKey:kStyleVideoModelVideoUrl];
+    [aCoder encodeObject:_createTime forKey:kStyleVideoModelCreateTime];
+}
+
+- (id)copyWithZone:(NSZone *)zone
+{
+    StyleVideoModel *copy = [[StyleVideoModel alloc] init];
+    
+    if (copy) {
+
+        copy.userId = [self.userId copyWithZone:zone];
+        copy.browse = self.browse;
+        copy.internalBaseClassIdentifier = [self.internalBaseClassIdentifier copyWithZone:zone];
+        copy.updateTime = [self.updateTime copyWithZone:zone];
+        copy.describe = [self.describe copyWithZone:zone];
+        copy.videoUrl = [self.videoUrl copyWithZone:zone];
+        copy.createTime = [self.createTime copyWithZone:zone];
+    }
+    
+    return copy;
+}
+
+
+@end

+ 3 - 1
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/CreateStyle/View/MyStyleIntroduceCell.h

@@ -8,12 +8,14 @@
 #import <UIKit/UIKit.h>
 
 
-typedef void(^IntroduceModifyCallback)(NSString *content);
+typedef void(^IntroduceModifyCallback)(NSString * _Nullable content);
 
 NS_ASSUME_NONNULL_BEGIN
 
 @interface MyStyleIntroduceCell : UITableViewCell
 
+@property (weak, nonatomic) IBOutlet UITextView *inputView;
+
 - (void)configWithIntroduceMessage:(NSString *)content modifyCallback:(IntroduceModifyCallback)callback;
 
 @end

+ 91 - 2
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/CreateStyle/View/MyStyleIntroduceCell.m

@@ -13,7 +13,7 @@
 
 @property (weak, nonatomic) IBOutlet UILabel *tipsLabel;
 
-@property (weak, nonatomic) IBOutlet UITextView *inputView;
+@property (nonatomic, copy) IntroduceModifyCallback callback;
 
 @end
 
@@ -23,10 +23,21 @@
     [super awakeFromNib];
     // Initialization code
     self.selectionStyle = UITableViewCellSelectionStyleNone;
+    self.inputView.delegate = self;
 }
 
 - (void)configWithIntroduceMessage:(NSString *)content modifyCallback:(IntroduceModifyCallback)callback {
-    
+    if (callback) {
+        self.callback = callback;
+    }
+    if (![NSString isEmptyString:content]) {
+        NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
+        [paragraphStyle setLineSpacing:4];//调整行间距
+        NSMutableAttributedString *attrs = [[NSMutableAttributedString alloc] initWithString:content attributes:@{NSParagraphStyleAttributeName:paragraphStyle,NSFontAttributeName:[UIFont systemFontOfSize:13.0f],NSForegroundColorAttributeName:HexRGB(0x666666)}];
+        self.inputView.attributedText = attrs;
+        self.tipsLabel.hidden = YES;
+        self.countLabel.text = [NSString stringWithFormat:@"%zd/200",content.length];
+    }
 }
 
 - (void)setSelected:(BOOL)selected animated:(BOOL)animated {
@@ -35,4 +46,82 @@
     // Configure the view for the selected state
 }
 
+#pragma mark   ---- delegate
+- (void)textViewDidBeginEditing:(UITextView *)textView {
+    self.tipsLabel.hidden = YES;
+}
+- (void)textViewDidEndEditing:(UITextView *)textView {
+    if ([NSString isEmptyString:textView.text]) {
+        self.tipsLabel.hidden = NO;
+    }
+    if (self.callback) {
+        self.callback(textView.text);
+    }
+}
+
+- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text {
+    if ([text isEqualToString:@"\n"]) {
+        [self endEditing:YES];
+        return YES;
+    }
+    if ([text isEqualToString:@""]) {
+        return YES;
+    }
+    
+    // 长度判断
+    // 输入控制
+    NSString *newString = [textView.text stringByReplacingCharactersInRange:range withString:text];
+    
+    if (newString.length > 200) {
+        return NO;
+    }
+    self.countLabel.text = [NSString stringWithFormat:@"%zd/200",newString.length];
+    
+    return YES;
+}
+
+
+- (BOOL)textViewShouldEndEditing:(UITextView *)textView {
+    [self endEditing:YES];
+    return YES;
+}
+
+- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
+    [self endEditing:YES];
+}
+
+- (void)textViewDidChange:(UITextView *)textView {
+    UITextRange *selectedRange = [textView markedTextRange];
+    NSString * newText = [textView textInRange:selectedRange]; //获取高亮部分
+    if (newText.length>0) {
+        return;
+    }
+    NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
+    [paragraphStyle setLineSpacing:4];//调整行间距
+    NSMutableAttributedString *attrs = [[NSMutableAttributedString alloc] initWithString:textView.text attributes:@{NSParagraphStyleAttributeName:paragraphStyle,NSFontAttributeName:[UIFont systemFontOfSize:13.0f],NSForegroundColorAttributeName:HexRGB(0x666666)}];
+    textView.attributedText = attrs;
+    
+    UITableView *tableView = [self tableView];
+    if (@available(iOS 11.0, *)) {
+        [UIView performWithoutAnimation:^{
+            [tableView performBatchUpdates:nil completion:nil];
+            [tableView sizeToFit];
+        }];
+    }
+    else {
+        [UIView performWithoutAnimation:^{
+            [tableView beginUpdates];
+            [tableView endUpdates];
+        }];
+    }
+}
+- (UITableView *)tableView {
+    UIView *tableView = self.superview;
+    
+    while (![tableView isKindOfClass:[UITableView class]] && tableView) {
+        tableView = tableView.superview;
+    }
+    return (UITableView *)tableView;
+}
+
 @end

+ 2 - 4
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/CreateStyle/View/MyStyleIntroduceCell.xib

@@ -49,12 +49,9 @@
                             <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="nVp-UN-qho">
                                 <rect key="frame" x="15" y="56" width="312" height="37"/>
                                 <subviews>
-                                    <textView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" scrollEnabled="NO" showsHorizontalScrollIndicator="NO" showsVerticalScrollIndicator="NO" textAlignment="natural" translatesAutoresizingMaskIntoConstraints="NO" id="jYT-Z6-r6L">
+                                    <textView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" bounces="NO" scrollEnabled="NO" showsHorizontalScrollIndicator="NO" showsVerticalScrollIndicator="NO" bouncesZoom="NO" textAlignment="natural" translatesAutoresizingMaskIntoConstraints="NO" id="jYT-Z6-r6L">
                                         <rect key="frame" x="0.0" y="0.0" width="312" height="37"/>
                                         <color key="backgroundColor" systemColor="systemBackgroundColor"/>
-                                        <constraints>
-                                            <constraint firstAttribute="height" relation="greaterThanOrEqual" constant="37" id="eRZ-VV-6An"/>
-                                        </constraints>
                                         <color key="textColor" red="0.40000000000000002" green="0.40000000000000002" blue="0.40000000000000002" alpha="1" colorSpace="calibratedRGB"/>
                                         <fontDescription key="fontDescription" type="system" pointSize="13"/>
                                         <textInputTraits key="textInputTraits" autocapitalizationType="sentences" returnKeyType="done" enablesReturnKeyAutomatically="YES"/>
@@ -68,6 +65,7 @@
                                 </subviews>
                                 <color key="backgroundColor" systemColor="systemBackgroundColor"/>
                                 <constraints>
+                                    <constraint firstAttribute="height" relation="greaterThanOrEqual" constant="37" id="Glb-tB-5o9"/>
                                     <constraint firstAttribute="trailing" secondItem="jYT-Z6-r6L" secondAttribute="trailing" id="Tn0-N6-Shb"/>
                                     <constraint firstAttribute="bottom" secondItem="jYT-Z6-r6L" secondAttribute="bottom" id="Wu3-Tq-fUn"/>
                                     <constraint firstItem="jYT-Z6-r6L" firstAttribute="top" secondItem="nVp-UN-qho" secondAttribute="top" id="X7Y-Yl-ilE"/>

+ 9 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/CreateStyle/View/MyStyleVideoCell.h

@@ -6,6 +6,13 @@
 //
 
 #import <UIKit/UIKit.h>
+typedef NS_ENUM(NSInteger, STYLEVIDEO) {
+    STYLEVIDEO_CHOOSEFILE,  // 选择文件
+    STYLEVIDEO_PLAY,        // 播放
+    STYLEVIDEO_DELETE,      // 删除
+};
+
+typedef void(^StyleVideoCellAction)(STYLEVIDEO type, UIView * _Nullable containerView);
 
 NS_ASSUME_NONNULL_BEGIN
 
@@ -13,6 +20,8 @@ NS_ASSUME_NONNULL_BEGIN
 
 - (void)configWithSource:(NSMutableArray *)videoArray;
 
+- (void)opreationCallback:(StyleVideoCellAction)callback;
+
 @end
 
 NS_ASSUME_NONNULL_END

+ 62 - 3
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/CreateStyle/View/MyStyleVideoCell.m

@@ -7,11 +7,17 @@
 
 #import "MyStyleVideoCell.h"
 #import "MyStyleVideoView.h"
+#import "MyStyleVideoChooseView.h"
 
 @interface MyStyleVideoCell ()
 
 @property (weak, nonatomic) IBOutlet UIView *videoContainer;
 
+@property (nonatomic, copy) NSMutableArray *videoArray;
+
+@property (weak, nonatomic) IBOutlet NSLayoutConstraint *containerHeight;
+
+@property (nonatomic, copy) StyleVideoCellAction callback;
 
 @end
 
@@ -23,11 +29,64 @@
     self.selectionStyle = UITableViewCellSelectionStyleNone;
 }
 
+- (void)opreationCallback:(StyleVideoCellAction)callback {
+    if (callback) {
+        self.callback = callback;
+    }
+}
+
 - (void)configWithSource:(NSMutableArray *)videoArray {
-    MyStyleVideoView *view = [MyStyleVideoView shareInstance];
-    view.frame = CGRectMake(0, 0, (kScreen_Width - 28) / 2.0f, 128);
-    [self.videoContainer addSubview:view];
+    [self.videoContainer removeAllSubViews];
+    self.videoArray = videoArray;
+    
+    CGFloat viewWidth = (kScreenWidth - 14 * 2) / 2.0f;
+    CGFloat height = 128.0f;
+    CGFloat xPosition = 0.0f;
+    CGFloat yPosition = 0.0f;
+    for (NSInteger i = 0; i < videoArray.count; i++) {
+        StyleVideoModel *model = self.videoArray[i];
+        if (i % 2 == 0 && i != 0) {
+            yPosition += height;
+            xPosition = 0.0f;
+        }
+        MyStyleVideoView *videoView = [MyStyleVideoView shareInstance];
+        videoView.frame = CGRectMake(xPosition, yPosition, viewWidth, height);
+        videoView.tag = i + 1000;
+        [self.videoContainer addSubview:videoView];
+        [videoView configWithSource:model];
+        MJWeakSelf;
+        [videoView videoOperationAcion:^(STYLEVIDEO type, MyStyleVideoView * _Nonnull videoView) {
+            [weakSelf previewVideoAction:type inView:videoView];
+        }];
+        xPosition += viewWidth;
+    }
     
+    if (videoArray.count < 5) {
+        if (videoArray.count % 2 == 0 && videoArray.count != 0) {
+            yPosition += height;
+            xPosition = 0.0f;
+        }
+        MyStyleVideoChooseView *view = [[MyStyleVideoChooseView alloc] initWithFrame:CGRectMake(xPosition, yPosition, viewWidth, height)];
+        MJWeakSelf;
+        [view chooseCallback:^{
+            [weakSelf chooseVideo];
+        }];
+        [self.videoContainer addSubview:view];
+    }
+    
+    self.containerHeight.constant = yPosition + height;
+}
+
+- (void)previewVideoAction:(STYLEVIDEO)type inView:(MyStyleVideoView *)displayView {
+    if (self.callback) {
+        self.callback(type, displayView);
+    }
+}
+
+- (void)chooseVideo {
+    if (self.callback) {
+        self.callback(STYLEVIDEO_CHOOSEFILE, nil);
+    }
 }
 
 

+ 1 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/CreateStyle/View/MyStyleVideoCell.xib

@@ -73,6 +73,7 @@
             <viewLayoutGuide key="safeArea" id="aW0-zy-SZf"/>
             <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
             <connections>
+                <outlet property="containerHeight" destination="c88-mj-nEn" id="FOe-z1-QeT"/>
                 <outlet property="videoContainer" destination="uSh-fN-7mG" id="l7N-7e-Gcj"/>
             </connections>
             <point key="canvasLocation" x="131.8840579710145" y="141.29464285714286"/>

+ 20 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/CreateStyle/View/MyStyleVideoChooseView.h

@@ -0,0 +1,20 @@
+//
+//  MyStyleVideoChooseView.h
+//  KulexiuForTeacher
+//
+//  Created by 王智 on 2022/4/12.
+//
+
+#import <UIKit/UIKit.h>
+
+typedef void(^StyleVideoChooseCallback)(void);
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface MyStyleVideoChooseView : UIView
+
+- (void)chooseCallback:(StyleVideoChooseCallback)callback;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 82 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/CreateStyle/View/MyStyleVideoChooseView.m

@@ -0,0 +1,82 @@
+//
+//  MyStyleVideoChooseView.m
+//  KulexiuForTeacher
+//
+//  Created by 王智 on 2022/4/12.
+//
+
+#import "MyStyleVideoChooseView.h"
+#import "UIView+ExtensionForDotLine.h"
+
+@interface MyStyleVideoChooseView ()
+
+@property (nonatomic, copy) StyleVideoChooseCallback callback;
+
+@end
+
+@implementation MyStyleVideoChooseView
+
+- (instancetype)initWithFrame:(CGRect)frame {
+    self = [super initWithFrame:frame];
+    if (self) {
+        [self configUI];
+    }
+    return self;
+}
+
+- (void)configUI {
+    
+    UIView *bgView = [[UIView alloc] initWithFrame:CGRectMake(11, 11, self.bounds.size.width - 22, self.bounds.size.height -22)];
+    [self addSubview:bgView];
+    [bgView drawBoardDottedLine:1.0f length:4 space:4 cornerRadius:8.0f lineColor:HexRGB(0xe3e3e3)];
+    
+    UIImageView *imgView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"image_upload"]];
+    [bgView addSubview:imgView];
+    
+    [imgView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.centerX.mas_equalTo(bgView.mas_centerX);
+        make.width.mas_equalTo(31);
+        make.height.mas_equalTo(25);
+        make.top.mas_equalTo(bgView.mas_top).offset(22);
+    }];
+    
+    UILabel *label = [[UILabel alloc] init];
+    label.textAlignment = NSTextAlignmentCenter;
+    label.text = @"点击上传视频";
+    label.font = [UIFont systemFontOfSize:14.0f];
+    label.textColor = HexRGB(0x999999);
+    [bgView addSubview:label];
+    [label mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.left.right.mas_equalTo(bgView);
+        make.top.mas_equalTo(imgView.mas_bottom).offset(17);
+        make.height.mas_equalTo(17);
+    }];
+    UIButton *actionButton = [UIButton buttonWithType:UIButtonTypeCustom];
+    [actionButton addTarget:self action:@selector(buttonClickAction:) forControlEvents:UIControlEventTouchUpInside];
+    [bgView addSubview:actionButton];
+    [actionButton mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.left.right.top.bottom.mas_equalTo(bgView);
+    }];
+}
+
+
+- (void)chooseCallback:(StyleVideoChooseCallback)callback {
+    if (callback) {
+        self.callback = callback;
+    }
+}
+
+- (void)buttonClickAction:(UIButton *)sender {
+    if (self.callback) {
+        self.callback();
+    }
+}
+/*
+// Only override drawRect: if you perform custom drawing.
+// An empty implementation adversely affects performance during animation.
+- (void)drawRect:(CGRect)rect {
+    // Drawing code
+}
+*/
+
+@end

+ 6 - 11
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/CreateStyle/View/MyStyleVideoView.h

@@ -6,26 +6,21 @@
 //
 
 #import <UIKit/UIKit.h>
+#import "MyStyleVideoCell.h"
+#import "StyleVideoModel.h"
 
-typedef NS_ENUM(NSInteger, STYLEVIDEO) {
-    STYLEVIDEO_CHOOSEFILE,  // 选择文件
-    STYLEVIDEO_PLAY,        // 播放
-    STYLEVIDEO_DELETE,      // 删除
-};
-
-typedef void(^StyleVidelCallback)(STYLEVIDEO type);
+@class MyStyleVideoView;
+typedef void(^StyleVidelAction)(STYLEVIDEO type, MyStyleVideoView * _Nonnull videoView);
 
 NS_ASSUME_NONNULL_BEGIN
 
 @interface MyStyleVideoView : UIView
 
-@property (nonatomic, assign) BOOL isPlay;
-
-@property (nonatomic, assign) BOOL hideDeleteButton;
-
 + (instancetype)shareInstance;
 
+- (void)configWithSource:(StyleVideoModel *)source;
 
+- (void)videoOperationAcion:(StyleVidelAction)callback;
 
 @end
 

+ 21 - 27
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/CreateStyle/View/MyStyleVideoView.m

@@ -6,20 +6,17 @@
 //
 
 #import "MyStyleVideoView.h"
-#import "UIView+ExtensionForDotLine.h"
+#import "KSVideoHelper.h"
 
 @interface MyStyleVideoView ()
 
-@property (weak, nonatomic) IBOutlet UIView *uploadView;
-
-@property (weak, nonatomic) IBOutlet UIButton *chooseButton;
-
-@property (weak, nonatomic) IBOutlet UIView *playView;
 @property (weak, nonatomic) IBOutlet UIButton *playButton;
 
 @property (weak, nonatomic) IBOutlet UIButton *deleteButton;
 
-@property (nonatomic, assign) BOOL isChoose;
+@property (weak, nonatomic) IBOutlet UIImageView *imageView;
+
+@property (nonatomic, copy) StyleVidelAction callback;
 
 @end
 
@@ -27,35 +24,32 @@
 
 - (void)awakeFromNib {
     [super awakeFromNib];
-    [self.uploadView drawBoardDottedLine:1.0f length:10 space:2 cornerRadius:8.0f lineColor:HexRGB(0xe3e3e3)];
-    self.isChoose = NO;
 }
 
-
-
 + (instancetype)shareInstance {
     MyStyleVideoView *view = [[[NSBundle mainBundle] loadNibNamed:@"MyStyleVideoView" owner:nil options:nil] firstObject];
     return view;
 }
 
+- (void)videoOperationAcion:(StyleVidelAction)callback {
+    if (callback) {
+        self.callback = callback;
+    }
+}
+
+- (void)configWithSource:(StyleVideoModel *)source {
+    [KSVideoHelper getVideoPreviewImageUrl:source.videoUrl forImageView:self.imageView placeholder:nil];
+}
 
-- (void)setIsChoose:(BOOL)isChoose {
-    _isChoose = isChoose;
-    if (isChoose) {
-        self.uploadView.hidden = YES;
-        self.chooseButton.userInteractionEnabled = NO;
-        self.playView.hidden = NO;
-        self.playButton.userInteractionEnabled = YES;
-        self.deleteButton.hidden = NO;
-        self.deleteButton.userInteractionEnabled = YES;
+- (IBAction)playAction:(id)sender {
+    if (self.callback) {
+        self.callback(STYLEVIDEO_PLAY, self);
     }
-    else {
-        self.uploadView.hidden = NO;
-        self.chooseButton.userInteractionEnabled = YES;
-        self.playView.hidden = YES;
-        self.playButton.userInteractionEnabled = NO;
-        self.deleteButton.hidden = YES;
-        self.deleteButton.userInteractionEnabled = NO;
+}
+
+- (IBAction)deleteAction:(id)sender {
+    if (self.callback) {
+        self.callback(STYLEVIDEO_DELETE, self);
     }
 }
 

+ 11 - 49
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/CreateStyle/View/MyStyleVideoView.xib

@@ -4,7 +4,6 @@
     <dependencies>
         <deployment identifier="iOS"/>
         <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="20020"/>
-        <capability name="System colors in document resources" minToolsVersion="11.0"/>
         <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
     </dependencies>
     <objects>
@@ -17,45 +16,12 @@
                 <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="WuF-SO-sA0">
                     <rect key="frame" x="11" y="11" width="167" height="108"/>
                     <subviews>
-                        <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="nhN-pe-JZ8">
+                        <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="yW1-Ft-tPa">
                             <rect key="frame" x="0.0" y="0.0" width="167" height="108"/>
                             <subviews>
-                                <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="image_upload" translatesAutoresizingMaskIntoConstraints="NO" id="OvO-Nc-tG8">
-                                    <rect key="frame" x="68" y="22" width="31" height="25"/>
-                                    <constraints>
-                                        <constraint firstAttribute="width" constant="31" id="bxH-IN-RrN"/>
-                                        <constraint firstAttribute="height" constant="25" id="pvK-5Z-W7H"/>
-                                    </constraints>
-                                </imageView>
-                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="点击上传视频" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="jQt-bW-xrd">
-                                    <rect key="frame" x="40.5" y="64" width="86" height="17"/>
-                                    <fontDescription key="fontDescription" type="system" pointSize="14"/>
-                                    <color key="textColor" red="0.59999999999999998" green="0.59999999999999998" blue="0.59999999999999998" alpha="1" colorSpace="calibratedRGB"/>
-                                    <nil key="highlightedColor"/>
-                                </label>
-                                <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="kME-v3-6KH">
-                                    <rect key="frame" x="0.0" y="0.0" width="167" height="108"/>
-                                    <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
-                                    <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
-                                </button>
-                            </subviews>
-                            <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
-                            <constraints>
-                                <constraint firstItem="jQt-bW-xrd" firstAttribute="top" secondItem="OvO-Nc-tG8" secondAttribute="bottom" constant="17" id="3OB-gi-UGZ"/>
-                                <constraint firstItem="kME-v3-6KH" firstAttribute="top" secondItem="nhN-pe-JZ8" secondAttribute="top" id="4mY-av-RH3"/>
-                                <constraint firstAttribute="trailing" secondItem="kME-v3-6KH" secondAttribute="trailing" id="6ff-U9-tQB"/>
-                                <constraint firstItem="jQt-bW-xrd" firstAttribute="centerX" secondItem="nhN-pe-JZ8" secondAttribute="centerX" id="7I3-zo-YLh"/>
-                                <constraint firstAttribute="bottom" secondItem="kME-v3-6KH" secondAttribute="bottom" id="Kho-aa-Y07"/>
-                                <constraint firstItem="kME-v3-6KH" firstAttribute="leading" secondItem="nhN-pe-JZ8" secondAttribute="leading" id="Xdz-O1-pkm"/>
-                                <constraint firstItem="OvO-Nc-tG8" firstAttribute="top" secondItem="nhN-pe-JZ8" secondAttribute="top" constant="22" id="evi-OT-yPq"/>
-                                <constraint firstItem="OvO-Nc-tG8" firstAttribute="centerX" secondItem="nhN-pe-JZ8" secondAttribute="centerX" id="ggo-nh-IXr"/>
-                            </constraints>
-                        </view>
-                        <view hidden="YES" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="yW1-Ft-tPa">
-                            <rect key="frame" x="0.0" y="0.0" width="167" height="108"/>
-                            <subviews>
-                                <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="BIR-6B-TMy">
+                                <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="BIR-6B-TMy">
                                     <rect key="frame" x="0.0" y="0.0" width="167" height="108"/>
+                                    <color key="backgroundColor" red="0.1764705882" green="0.78039215689999997" blue="0.66666666669999997" alpha="1" colorSpace="calibratedRGB"/>
                                 </imageView>
                                 <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="OZG-D1-yjf">
                                     <rect key="frame" x="61.5" y="32" width="44" height="44"/>
@@ -65,9 +31,12 @@
                                     </constraints>
                                     <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
                                     <state key="normal" image="playVideo_image"/>
+                                    <connections>
+                                        <action selector="playAction:" destination="iN0-l3-epB" eventType="touchUpInside" id="XHr-TW-yDL"/>
+                                    </connections>
                                 </button>
                             </subviews>
-                            <color key="backgroundColor" systemColor="systemBackgroundColor"/>
+                            <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
                             <constraints>
                                 <constraint firstItem="OZG-D1-yjf" firstAttribute="centerY" secondItem="yW1-Ft-tPa" secondAttribute="centerY" id="2tI-bB-hqQ"/>
                                 <constraint firstAttribute="bottom" secondItem="BIR-6B-TMy" secondAttribute="bottom" id="Ccy-1N-ZoF"/>
@@ -85,12 +54,8 @@
                     </subviews>
                     <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
                     <constraints>
-                        <constraint firstAttribute="trailing" secondItem="nhN-pe-JZ8" secondAttribute="trailing" id="3El-8E-RV3"/>
                         <constraint firstAttribute="bottom" secondItem="yW1-Ft-tPa" secondAttribute="bottom" id="KaP-9q-TvT"/>
                         <constraint firstAttribute="trailing" secondItem="yW1-Ft-tPa" secondAttribute="trailing" id="LAZ-lo-IGi"/>
-                        <constraint firstItem="nhN-pe-JZ8" firstAttribute="leading" secondItem="WuF-SO-sA0" secondAttribute="leading" id="P5b-JS-JFk"/>
-                        <constraint firstAttribute="bottom" secondItem="nhN-pe-JZ8" secondAttribute="bottom" id="TTT-8k-baQ"/>
-                        <constraint firstItem="nhN-pe-JZ8" firstAttribute="top" secondItem="WuF-SO-sA0" secondAttribute="top" id="Y1y-l5-wYC"/>
                         <constraint firstItem="yW1-Ft-tPa" firstAttribute="leading" secondItem="WuF-SO-sA0" secondAttribute="leading" id="kjg-Nj-f4K"/>
                         <constraint firstItem="yW1-Ft-tPa" firstAttribute="top" secondItem="WuF-SO-sA0" secondAttribute="top" id="xlC-QY-yW3"/>
                     </constraints>
@@ -108,6 +73,9 @@
                     </constraints>
                     <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
                     <state key="normal" image="video_delete"/>
+                    <connections>
+                        <action selector="deleteAction:" destination="iN0-l3-epB" eventType="touchUpInside" id="OVn-Fy-Ykx"/>
+                    </connections>
                 </button>
             </subviews>
             <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
@@ -123,21 +91,15 @@
             <nil key="simulatedBottomBarMetrics"/>
             <freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
             <connections>
-                <outlet property="chooseButton" destination="kME-v3-6KH" id="Gtf-i4-a4W"/>
                 <outlet property="deleteButton" destination="eDd-Nb-XT6" id="BRf-MY-RoT"/>
+                <outlet property="imageView" destination="BIR-6B-TMy" id="c3X-du-xBM"/>
                 <outlet property="playButton" destination="OZG-D1-yjf" id="gCd-ZW-DMs"/>
-                <outlet property="playView" destination="yW1-Ft-tPa" id="NZ8-2i-4pR"/>
-                <outlet property="uploadView" destination="nhN-pe-JZ8" id="aUg-VH-2Fw"/>
             </connections>
             <point key="canvasLocation" x="119.56521739130436" y="-185.49107142857142"/>
         </view>
     </objects>
     <resources>
-        <image name="image_upload" width="31" height="25"/>
         <image name="playVideo_image" width="26" height="26"/>
         <image name="video_delete" width="22" height="22"/>
-        <systemColor name="systemBackgroundColor">
-            <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
-        </systemColor>
     </resources>
 </document>

+ 1 - 1
KulexiuForTeacher/Podfile

@@ -12,7 +12,7 @@
   pod 'AFNetworking', '~> 4.0'
   pod 'Masonry', '~> 1.1.0'
   pod 'MBProgressHUD', '~> 1.2.0'
-  pod 'SDWebImage', '~> 3.8.2'
+  pod 'SDWebImage', '~> 5.12.5'
   pod 'MJRefresh', '~> 3.1.12'
   pod 'IQKeyboardManager'
   pod 'Reachability', '~> 3.2'

+ 6 - 6
KulexiuForTeacher/Podfile.lock

@@ -54,9 +54,9 @@ PODS:
   - RongCloudRTC/RongRTCLib (5.2.1):
     - RongCloudIM/IMLibCore (>= 5.1.3)
   - RSKImageCropper (3.0.2)
-  - SDWebImage (3.8.3):
-    - SDWebImage/Core (= 3.8.3)
-  - SDWebImage/Core (3.8.3)
+  - SDWebImage (5.12.5):
+    - SDWebImage/Core (= 5.12.5)
+  - SDWebImage/Core (5.12.5)
   - SocketRocket (0.6.0)
   - SSZipArchive (2.4.3)
   - UMAPM (1.5.6)
@@ -107,7 +107,7 @@ DEPENDENCIES:
   - RongCloudRTC/RongFaceBeautifier (~> 5.2.1)
   - RongCloudRTC/RongRTCLib (~> 5.2.1)
   - RSKImageCropper
-  - SDWebImage (~> 3.8.2)
+  - SDWebImage (~> 5.12.5)
   - SocketRocket
   - SSZipArchive
   - UMAPM
@@ -159,7 +159,7 @@ SPEC CHECKSUMS:
   RongCloudIM: 92b53cd215a397fba7413220411b49179043022d
   RongCloudRTC: 0bda17440186a6174fe5871ba30030466cc19c3a
   RSKImageCropper: 1ac71e9a82e3f41eea3eedfff8eacb0d3821c9ec
-  SDWebImage: a72e880a8fe0f7fc31efe15aaed443c074d2a80c
+  SDWebImage: 0905f1b7760fc8ac4198cae0036600d67478751e
   SocketRocket: fccef3f9c5cedea1353a9ef6ada904fde10d6608
   SSZipArchive: fe6a26b2a54d5a0890f2567b5cc6de5caa600aef
   UMAPM: 5ab988b8bedfd090ee2307cb80530ba79b8ac264
@@ -168,6 +168,6 @@ SPEC CHECKSUMS:
   Whiteboard: 16568e7e14f7f451d2aad2536f5fab9c06119934
   YYModel: 2a7fdd96aaa4b86a824e26d0c517de8928c04b30
 
-PODFILE CHECKSUM: 3866589e12e93bb01ab1d093c5dee8044b5b80f1
+PODFILE CHECKSUM: 3ede84e725bb09d156938ed49da3476da58eaa23
 
 COCOAPODS: 1.11.3

+ 1 - 1
KulexiuForTeacher/Pods/Headers/Private/SDWebImage/NSData+ImageContentType.h

@@ -1 +1 @@
-../../../SDWebImage/SDWebImage/NSData+ImageContentType.h
+../../../SDWebImage/SDWebImage/Core/NSData+ImageContentType.h

+ 1 - 1
KulexiuForTeacher/Pods/Headers/Private/SDWebImage/SDImageCache.h

@@ -1 +1 @@
-../../../SDWebImage/SDWebImage/SDImageCache.h
+../../../SDWebImage/SDWebImage/Core/SDImageCache.h

+ 1 - 1
KulexiuForTeacher/Pods/Headers/Private/SDWebImage/SDWebImageCompat.h

@@ -1 +1 @@
-../../../SDWebImage/SDWebImage/SDWebImageCompat.h
+../../../SDWebImage/SDWebImage/Core/SDWebImageCompat.h

+ 0 - 1
KulexiuForTeacher/Pods/Headers/Private/SDWebImage/SDWebImageDecoder.h

@@ -1 +0,0 @@
-../../../SDWebImage/SDWebImage/SDWebImageDecoder.h

+ 1 - 1
KulexiuForTeacher/Pods/Headers/Private/SDWebImage/SDWebImageDownloader.h

@@ -1 +1 @@
-../../../SDWebImage/SDWebImage/SDWebImageDownloader.h
+../../../SDWebImage/SDWebImage/Core/SDWebImageDownloader.h

+ 1 - 1
KulexiuForTeacher/Pods/Headers/Private/SDWebImage/SDWebImageDownloaderOperation.h

@@ -1 +1 @@
-../../../SDWebImage/SDWebImage/SDWebImageDownloaderOperation.h
+../../../SDWebImage/SDWebImage/Core/SDWebImageDownloaderOperation.h

+ 1 - 1
KulexiuForTeacher/Pods/Headers/Private/SDWebImage/SDWebImageManager.h

@@ -1 +1 @@
-../../../SDWebImage/SDWebImage/SDWebImageManager.h
+../../../SDWebImage/SDWebImage/Core/SDWebImageManager.h

+ 1 - 1
KulexiuForTeacher/Pods/Headers/Private/SDWebImage/SDWebImageOperation.h

@@ -1 +1 @@
-../../../SDWebImage/SDWebImage/SDWebImageOperation.h
+../../../SDWebImage/SDWebImage/Core/SDWebImageOperation.h

+ 1 - 1
KulexiuForTeacher/Pods/Headers/Private/SDWebImage/SDWebImagePrefetcher.h

@@ -1 +1 @@
-../../../SDWebImage/SDWebImage/SDWebImagePrefetcher.h
+../../../SDWebImage/SDWebImage/Core/SDWebImagePrefetcher.h

+ 1 - 1
KulexiuForTeacher/Pods/Headers/Private/SDWebImage/UIButton+WebCache.h

@@ -1 +1 @@
-../../../SDWebImage/SDWebImage/UIButton+WebCache.h
+../../../SDWebImage/SDWebImage/Core/UIButton+WebCache.h

+ 1 - 1
KulexiuForTeacher/Pods/Headers/Private/SDWebImage/UIImage+GIF.h

@@ -1 +1 @@
-../../../SDWebImage/SDWebImage/UIImage+GIF.h
+../../../SDWebImage/SDWebImage/Core/UIImage+GIF.h

+ 1 - 1
KulexiuForTeacher/Pods/Headers/Private/SDWebImage/UIImage+MultiFormat.h

@@ -1 +1 @@
-../../../SDWebImage/SDWebImage/UIImage+MultiFormat.h
+../../../SDWebImage/SDWebImage/Core/UIImage+MultiFormat.h

+ 1 - 1
KulexiuForTeacher/Pods/Headers/Private/SDWebImage/UIImageView+HighlightedWebCache.h

@@ -1 +1 @@
-../../../SDWebImage/SDWebImage/UIImageView+HighlightedWebCache.h
+../../../SDWebImage/SDWebImage/Core/UIImageView+HighlightedWebCache.h

+ 1 - 1
KulexiuForTeacher/Pods/Headers/Private/SDWebImage/UIImageView+WebCache.h

@@ -1 +1 @@
-../../../SDWebImage/SDWebImage/UIImageView+WebCache.h
+../../../SDWebImage/SDWebImage/Core/UIImageView+WebCache.h

+ 1 - 1
KulexiuForTeacher/Pods/Headers/Private/SDWebImage/UIView+WebCacheOperation.h

@@ -1 +1 @@
-../../../SDWebImage/SDWebImage/UIView+WebCacheOperation.h
+../../../SDWebImage/SDWebImage/Core/UIView+WebCacheOperation.h

+ 1 - 1
KulexiuForTeacher/Pods/Headers/Public/SDWebImage/NSData+ImageContentType.h

@@ -1 +1 @@
-../../../SDWebImage/SDWebImage/NSData+ImageContentType.h
+../../../SDWebImage/SDWebImage/Core/NSData+ImageContentType.h

+ 1 - 1
KulexiuForTeacher/Pods/Headers/Public/SDWebImage/SDImageCache.h

@@ -1 +1 @@
-../../../SDWebImage/SDWebImage/SDImageCache.h
+../../../SDWebImage/SDWebImage/Core/SDImageCache.h

+ 1 - 1
KulexiuForTeacher/Pods/Headers/Public/SDWebImage/SDWebImageCompat.h

@@ -1 +1 @@
-../../../SDWebImage/SDWebImage/SDWebImageCompat.h
+../../../SDWebImage/SDWebImage/Core/SDWebImageCompat.h

+ 0 - 1
KulexiuForTeacher/Pods/Headers/Public/SDWebImage/SDWebImageDecoder.h

@@ -1 +0,0 @@
-../../../SDWebImage/SDWebImage/SDWebImageDecoder.h

+ 1 - 1
KulexiuForTeacher/Pods/Headers/Public/SDWebImage/SDWebImageDownloader.h

@@ -1 +1 @@
-../../../SDWebImage/SDWebImage/SDWebImageDownloader.h
+../../../SDWebImage/SDWebImage/Core/SDWebImageDownloader.h

+ 1 - 1
KulexiuForTeacher/Pods/Headers/Public/SDWebImage/SDWebImageDownloaderOperation.h

@@ -1 +1 @@
-../../../SDWebImage/SDWebImage/SDWebImageDownloaderOperation.h
+../../../SDWebImage/SDWebImage/Core/SDWebImageDownloaderOperation.h

+ 1 - 1
KulexiuForTeacher/Pods/Headers/Public/SDWebImage/SDWebImageManager.h

@@ -1 +1 @@
-../../../SDWebImage/SDWebImage/SDWebImageManager.h
+../../../SDWebImage/SDWebImage/Core/SDWebImageManager.h

+ 1 - 1
KulexiuForTeacher/Pods/Headers/Public/SDWebImage/SDWebImageOperation.h

@@ -1 +1 @@
-../../../SDWebImage/SDWebImage/SDWebImageOperation.h
+../../../SDWebImage/SDWebImage/Core/SDWebImageOperation.h

+ 1 - 1
KulexiuForTeacher/Pods/Headers/Public/SDWebImage/SDWebImagePrefetcher.h

@@ -1 +1 @@
-../../../SDWebImage/SDWebImage/SDWebImagePrefetcher.h
+../../../SDWebImage/SDWebImage/Core/SDWebImagePrefetcher.h

+ 1 - 1
KulexiuForTeacher/Pods/Headers/Public/SDWebImage/UIButton+WebCache.h

@@ -1 +1 @@
-../../../SDWebImage/SDWebImage/UIButton+WebCache.h
+../../../SDWebImage/SDWebImage/Core/UIButton+WebCache.h

+ 1 - 1
KulexiuForTeacher/Pods/Headers/Public/SDWebImage/UIImage+GIF.h

@@ -1 +1 @@
-../../../SDWebImage/SDWebImage/UIImage+GIF.h
+../../../SDWebImage/SDWebImage/Core/UIImage+GIF.h

+ 1 - 1
KulexiuForTeacher/Pods/Headers/Public/SDWebImage/UIImage+MultiFormat.h

@@ -1 +1 @@
-../../../SDWebImage/SDWebImage/UIImage+MultiFormat.h
+../../../SDWebImage/SDWebImage/Core/UIImage+MultiFormat.h

+ 1 - 1
KulexiuForTeacher/Pods/Headers/Public/SDWebImage/UIImageView+HighlightedWebCache.h

@@ -1 +1 @@
-../../../SDWebImage/SDWebImage/UIImageView+HighlightedWebCache.h
+../../../SDWebImage/SDWebImage/Core/UIImageView+HighlightedWebCache.h

+ 1 - 1
KulexiuForTeacher/Pods/Headers/Public/SDWebImage/UIImageView+WebCache.h

@@ -1 +1 @@
-../../../SDWebImage/SDWebImage/UIImageView+WebCache.h
+../../../SDWebImage/SDWebImage/Core/UIImageView+WebCache.h

+ 1 - 1
KulexiuForTeacher/Pods/Headers/Public/SDWebImage/UIView+WebCacheOperation.h

@@ -1 +1 @@
-../../../SDWebImage/SDWebImage/UIView+WebCacheOperation.h
+../../../SDWebImage/SDWebImage/Core/UIView+WebCacheOperation.h

+ 6 - 6
KulexiuForTeacher/Pods/Manifest.lock

@@ -54,9 +54,9 @@ PODS:
   - RongCloudRTC/RongRTCLib (5.2.1):
     - RongCloudIM/IMLibCore (>= 5.1.3)
   - RSKImageCropper (3.0.2)
-  - SDWebImage (3.8.3):
-    - SDWebImage/Core (= 3.8.3)
-  - SDWebImage/Core (3.8.3)
+  - SDWebImage (5.12.5):
+    - SDWebImage/Core (= 5.12.5)
+  - SDWebImage/Core (5.12.5)
   - SocketRocket (0.6.0)
   - SSZipArchive (2.4.3)
   - UMAPM (1.5.6)
@@ -107,7 +107,7 @@ DEPENDENCIES:
   - RongCloudRTC/RongFaceBeautifier (~> 5.2.1)
   - RongCloudRTC/RongRTCLib (~> 5.2.1)
   - RSKImageCropper
-  - SDWebImage (~> 3.8.2)
+  - SDWebImage (~> 5.12.5)
   - SocketRocket
   - SSZipArchive
   - UMAPM
@@ -159,7 +159,7 @@ SPEC CHECKSUMS:
   RongCloudIM: 92b53cd215a397fba7413220411b49179043022d
   RongCloudRTC: 0bda17440186a6174fe5871ba30030466cc19c3a
   RSKImageCropper: 1ac71e9a82e3f41eea3eedfff8eacb0d3821c9ec
-  SDWebImage: a72e880a8fe0f7fc31efe15aaed443c074d2a80c
+  SDWebImage: 0905f1b7760fc8ac4198cae0036600d67478751e
   SocketRocket: fccef3f9c5cedea1353a9ef6ada904fde10d6608
   SSZipArchive: fe6a26b2a54d5a0890f2567b5cc6de5caa600aef
   UMAPM: 5ab988b8bedfd090ee2307cb80530ba79b8ac264
@@ -168,6 +168,6 @@ SPEC CHECKSUMS:
   Whiteboard: 16568e7e14f7f451d2aad2536f5fab9c06119934
   YYModel: 2a7fdd96aaa4b86a824e26d0c517de8928c04b30
 
-PODFILE CHECKSUM: 3866589e12e93bb01ab1d093c5dee8044b5b80f1
+PODFILE CHECKSUM: 3ede84e725bb09d156938ed49da3476da58eaa23
 
 COCOAPODS: 1.11.3

File diff suppressed because it is too large
+ 269 - 148
KulexiuForTeacher/Pods/Pods.xcodeproj/project.pbxproj


+ 1 - 1
KulexiuForTeacher/Pods/SDWebImage/LICENSE

@@ -1,4 +1,4 @@
-Copyright (c) 2016 Olivier Poitrey rs@dailymotion.com
+Copyright (c) 2009-2020 Olivier Poitrey rs@dailymotion.com
  
 Permission is hereby granted, free of charge, to any person obtaining a copy
 of this software and associated documentation files (the "Software"), to deal

+ 264 - 246
KulexiuForTeacher/Pods/SDWebImage/README.md

@@ -1,334 +1,352 @@
-Web Image
-=========
-[![Build Status](http://img.shields.io/travis/rs/SDWebImage/master.svg?style=flat)](https://travis-ci.org/rs/SDWebImage)
+<p align="center" >
+  <img src="https://raw.githubusercontent.com/SDWebImage/SDWebImage/master/SDWebImage_logo.png" title="SDWebImage logo" float=left>
+</p>
+
+
+[![Build Status](http://img.shields.io/travis/SDWebImage/SDWebImage/master.svg?style=flat)](https://travis-ci.org/SDWebImage/SDWebImage)
 [![Pod Version](http://img.shields.io/cocoapods/v/SDWebImage.svg?style=flat)](http://cocoadocs.org/docsets/SDWebImage/)
 [![Pod Platform](http://img.shields.io/cocoapods/p/SDWebImage.svg?style=flat)](http://cocoadocs.org/docsets/SDWebImage/)
 [![Pod License](http://img.shields.io/cocoapods/l/SDWebImage.svg?style=flat)](https://www.apache.org/licenses/LICENSE-2.0.html)
-[![Dependency Status](https://www.versioneye.com/objective-c/sdwebimage/3.3/badge.svg?style=flat)](https://www.versioneye.com/objective-c/sdwebimage/3.3)
-[![Reference Status](https://www.versioneye.com/objective-c/sdwebimage/reference_badge.svg?style=flat)](https://www.versioneye.com/objective-c/sdwebimage/references)
-[![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/rs/SDWebImage)
-
-This library provides a category for UIImageView with support for remote images coming from the web.
-
-It provides:
-
-- An `UIImageView` category adding web image and cache management to the Cocoa Touch framework
-- An asynchronous image downloader
-- An asynchronous memory + disk image caching with automatic cache expiration handling
-- Animated GIF support
-- WebP format support
-- A background image decompression
-- A guarantee that the same URL won't be downloaded several times
-- A guarantee that bogus URLs won't be retried again and again
-- A guarantee that main thread will never be blocked
-- Performances!
-- Use GCD and ARC
-- Arm64 support
-
-NOTE: Version 3.8 of SDWebImage requires iOS 7 or later (because of NSURLSession). 
-Versions 3.7 to 3.0 requires iOS 5.1.1. If you need iOS < 5.0 support, please use the last [2.0 version](https://github.com/rs/SDWebImage/tree/2.0-compat).
+[![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-brightgreen.svg)](https://github.com/SDWebImage/SDWebImage)
+[![SwiftPM compatible](https://img.shields.io/badge/SwiftPM-compatible-brightgreen.svg)](https://swift.org/package-manager/)
+[![Mac Catalyst compatible](https://img.shields.io/badge/Catalyst-compatible-brightgreen.svg)](https://developer.apple.com/documentation/xcode/creating_a_mac_version_of_your_ipad_app/)
+[![codecov](https://codecov.io/gh/SDWebImage/SDWebImage/branch/master/graph/badge.svg)](https://codecov.io/gh/SDWebImage/SDWebImage)
+
+This library provides an async image downloader with cache support. For convenience, we added categories for UI elements like `UIImageView`, `UIButton`, `MKAnnotationView`.
+
+## Features
+
+- [x] Categories for `UIImageView`, `UIButton`, `MKAnnotationView` adding web image and cache management
+- [x] An asynchronous image downloader
+- [x] An asynchronous memory + disk image caching with automatic cache expiration handling
+- [x] A background image decompression to avoid frame rate drop
+- [x] [Progressive image loading](https://github.com/SDWebImage/SDWebImage/wiki/Advanced-Usage#progressive-animation) (including animated image, like GIF showing in Web browser)
+- [x] [Thumbnail image decoding](https://github.com/SDWebImage/SDWebImage/wiki/Advanced-Usage#thumbnail-decoding-550) to save CPU && Memory for large images
+- [x] [Extendable image coder](https://github.com/SDWebImage/SDWebImage/wiki/Advanced-Usage#custom-coder-420) to support massive image format, like WebP
+- [x] [Full-stack solution for animated images](https://github.com/SDWebImage/SDWebImage/wiki/Advanced-Usage#animated-image-50) which keep a balance between CPU && Memory
+- [x] [Customizable and composable transformations](https://github.com/SDWebImage/SDWebImage/wiki/Advanced-Usage#transformer-50) can be applied to the images right after download
+- [x] [Customizable and multiple caches system](https://github.com/SDWebImage/SDWebImage/wiki/Advanced-Usage#custom-cache-50)
+- [x] [Customizable and multiple loaders system](https://github.com/SDWebImage/SDWebImage/wiki/Advanced-Usage#custom-loader-50) to expand the capabilities, like [Photos Library](https://github.com/SDWebImage/SDWebImagePhotosPlugin)
+- [x] [Image loading indicators](https://github.com/SDWebImage/SDWebImage/wiki/How-to-use#use-view-indicator-50)
+- [x] [Image loading transition animation](https://github.com/SDWebImage/SDWebImage/wiki/Advanced-Usage#image-transition-430)
+- [x] A guarantee that the same URL won't be downloaded several times
+- [x] A guarantee that bogus URLs won't be retried again and again
+- [x] A guarantee that main thread will never be blocked
+- [x] Modern Objective-C and better Swift support 
+- [x] Performances!
+
+## Supported Image Formats
+
+- Image formats supported by Apple system (JPEG, PNG, TIFF, BMP, ...), including [GIF](https://github.com/SDWebImage/SDWebImage/wiki/Advanced-Usage#gif-coder)/[APNG](https://github.com/SDWebImage/SDWebImage/wiki/Advanced-Usage#apng-coder) animated image
+- HEIC format from iOS 11/macOS 10.13, including animated HEIC from iOS 13/macOS 10.15 via [SDWebImageHEICCoder](https://github.com/SDWebImage/SDWebImage/wiki/Advanced-Usage#heic-coder). For lower firmware, use coder plugin [SDWebImageHEIFCoder](https://github.com/SDWebImage/SDWebImageHEIFCoder)
+- WebP format from iOS 14/macOS 11.0 via [SDWebImageAWebPCoder](https://github.com/SDWebImage/SDWebImage/wiki/Advanced-Usage#awebp-coder). For lower firmware, use coder plugin [SDWebImageWebPCoder](https://github.com/SDWebImage/SDWebImageWebPCoder)
+- Support extendable coder plugins for new image formats like BPG, AVIF. And vector format like PDF, SVG. See all the list in [Image coder plugin List](https://github.com/SDWebImage/SDWebImage/wiki/Coder-Plugin-List)
+
+## Additional modules and Ecosystem
+
+In order to keep SDWebImage focused and limited to the core features, but also allow extensibility and custom behaviors, during the 5.0 refactoring we focused on modularizing the library.
+As such, we have moved/built new modules to [SDWebImage org](https://github.com/SDWebImage).
+
+#### SwiftUI
+[SwiftUI](https://developer.apple.com/xcode/swiftui/) is an innovative UI framework written in Swift to build user interfaces across all Apple platforms.
+
+We support SwiftUI by building a brand new framework called [SDWebImageSwiftUI](https://github.com/SDWebImage/SDWebImageSwiftUI), which is built on top of SDWebImage core functions (caching, loading and animation).
+
+The new framework introduce two View structs `WebImage` and `AnimatedImage` for SwiftUI world, `ImageIndicator` modifier for any View, `ImageManager` observable object for data source. Supports iOS 13+/macOS 10.15+/tvOS 13+/watchOS 6+ and Swift 5.1. Have a nice try and provide feedback!
+
+#### Coders for additional image formats
+- [SDWebImageWebPCoder](https://github.com/SDWebImage/SDWebImageWebPCoder) - coder for WebP format. iOS 8+/macOS 10.10+. Based on [libwebp](https://chromium.googlesource.com/webm/libwebp)
+- [SDWebImageHEIFCoder](https://github.com/SDWebImage/SDWebImageHEIFCoder) - coder for HEIF format, iOS 8+/macOS 10.10+ support. Based on [libheif](https://github.com/strukturag/libheif)
+- [SDWebImageBPGCoder](https://github.com/SDWebImage/SDWebImageBPGCoder) - coder for BPG format. Based on [libbpg](https://github.com/mirrorer/libbpg)
+- [SDWebImageFLIFCoder](https://github.com/SDWebImage/SDWebImageFLIFCoder) - coder for FLIF format. Based on [libflif](https://github.com/FLIF-hub/FLIF)
+- [SDWebImageAVIFCoder](https://github.com/SDWebImage/SDWebImageAVIFCoder) - coder for AVIF (AV1-based) format. Based on [libavif](https://github.com/AOMediaCodec/libavif)
+- [SDWebImagePDFCoder](https://github.com/SDWebImage/SDWebImagePDFCoder) - coder for PDF vector format. Using built-in frameworks
+- [SDWebImageSVGCoder](https://github.com/SDWebImage/SDWebImageSVGCoder) - coder for SVG vector format. Using built-in frameworks
+- [SDWebImageLottieCoder](https://github.com/SDWebImage/SDWebImageLottieCoder) - coder for Lottie animation format. Based on [rlottie](https://github.com/Samsung/rlottie)
+- and more from community!
+
+#### Custom Caches
+- [SDWebImageYYPlugin](https://github.com/SDWebImage/SDWebImageYYPlugin) - plugin to support caching images with [YYCache](https://github.com/ibireme/YYCache)
+- [SDWebImagePINPlugin](https://github.com/SDWebImage/SDWebImagePINPlugin) - plugin to support caching images with [PINCache](https://github.com/pinterest/PINCache)
+
+#### Custom Loaders
+- [SDWebImagePhotosPlugin](https://github.com/SDWebImage/SDWebImagePhotosPlugin) - plugin to support loading images from Photos (using `Photos.framework`) 
+- [SDWebImageLinkPlugin](https://github.com/SDWebImage/SDWebImageLinkPlugin) - plugin to support loading images from rich link url, as well as `LPLinkView` (using `LinkPresentation.framework`) 
+
+#### Integration with 3rd party libraries
+- [SDWebImageLottiePlugin](https://github.com/SDWebImage/SDWebImageLottiePlugin) - plugin to support [Lottie-iOS](https://github.com/airbnb/lottie-ios), vector animation rending with remote JSON files
+- [SDWebImageSVGKitPlugin](https://github.com/SDWebImage/SDWebImageSVGKitPlugin) - plugin to support [SVGKit](https://github.com/SVGKit/SVGKit), SVG rendering using Core Animation, iOS 8+/macOS 10.10+ support
+- [SDWebImageFLPlugin](https://github.com/SDWebImage/SDWebImageFLPlugin) - plugin to support [FLAnimatedImage](https://github.com/Flipboard/FLAnimatedImage) as the engine for animated GIFs
+- [SDWebImageYYPlugin](https://github.com/SDWebImage/SDWebImageYYPlugin) - plugin to integrate [YYImage](https://github.com/ibireme/YYImage) & [YYCache](https://github.com/ibireme/YYCache) for image rendering & caching
+
+#### Community driven popular libraries
+- [FirebaseUI](https://github.com/firebase/FirebaseUI-iOS) - Firebase Storage binding for query images, based on SDWebImage loader system
+- [react-native-fast-image](https://github.com/DylanVann/react-native-fast-image) - React Native fast image component, based on SDWebImage Animated Image solution
+- [flutter_image_compress](https://github.com/OpenFlutter/flutter_image_compress) - Flutter compresses image plugin, based on SDWebImage WebP coder plugin
+
+#### Make our lives easier
+- [libwebp-Xcode](https://github.com/SDWebImage/libwebp-Xcode) - A wrapper for [libwebp](https://chromium.googlesource.com/webm/libwebp) + an Xcode project.
+- [libheif-Xcode](https://github.com/SDWebImage/libheif-Xcode) - A wrapper for [libheif](https://github.com/strukturag/libheif) + an Xcode project.
+- [libavif-Xcode](https://github.com/SDWebImage/libavif-Xcode) - A wrapper for [libavif](https://github.com/AOMediaCodec/libavif) + an Xcode project.
+- and more third-party C/C++ image codec libraries with CocoaPods/Carthage/SwiftPM support.
+
+You can use those directly, or create similar components of your own, by using the customizable architecture of SDWebImage.
+
+## Requirements
+
+- iOS 9.0 or later
+- tvOS 9.0 or later
+- watchOS 2.0 or later
+- macOS 10.11 or later (10.15 for Catalyst)
+- Xcode 11.0 or later
+
+#### Backwards compatibility
+
+- For iOS 8, macOS 10.10 or Xcode < 11, use [any 5.x version up to 5.9.5](https://github.com/SDWebImage/SDWebImage/releases/tag/5.9.5)
+- For iOS 7, macOS 10.9 or Xcode < 8, use [any 4.x version up to 4.4.6](https://github.com/SDWebImage/SDWebImage/releases/tag/4.4.6)
+- For macOS 10.8, use [any 4.x version up to 4.3.0](https://github.com/SDWebImage/SDWebImage/releases/tag/4.3.0)
+- For iOS 5 and 6, use [any 3.x version up to 3.7.6](https://github.com/SDWebImage/SDWebImage/releases/tag/3.7.6)
+- For iOS < 5.0, please use the last [2.0 version](https://github.com/SDWebImage/SDWebImage/tree/2.0-compat).
+
+## Getting Started
+
+- Read this Readme doc
+- Read the [How to use section](https://github.com/SDWebImage/SDWebImage#how-to-use)
+- Read the [Latest Documentation](https://sdwebimage.github.io/) and [CocoaDocs for old version](http://cocoadocs.org/docsets/SDWebImage/)
+- Try the example by downloading the project from Github or even easier using CocoaPods try `pod try SDWebImage`
+- Read the [Installation Guide](https://github.com/SDWebImage/SDWebImage/wiki/Installation-Guide)
+- Read the [SDWebImage 5.0 Migration Guide](https://github.com/SDWebImage/SDWebImage/blob/master/Docs/SDWebImage-5.0-Migration-guide.md) to get an idea of the changes from 4.x to 5.x
+- Read the [SDWebImage 4.0 Migration Guide](https://github.com/SDWebImage/SDWebImage/blob/master/Docs/SDWebImage-4.0-Migration-guide.md) to get an idea of the changes from 3.x to 4.x
+- Read the [Common Problems](https://github.com/SDWebImage/SDWebImage/wiki/Common-Problems) to find the solution for common problems 
+- Go to the [Wiki Page](https://github.com/SDWebImage/SDWebImage/wiki) for more information such as [Advanced Usage](https://github.com/SDWebImage/SDWebImage/wiki/Advanced-Usage)
+
+## Who Uses It
+- Find out [who uses SDWebImage](https://github.com/SDWebImage/SDWebImage/wiki/Who-Uses-SDWebImage) and add your app to the list.
+
+## Communication
+
+- If you **need help**, use [Stack Overflow](http://stackoverflow.com/questions/tagged/sdwebimage). (Tag 'sdwebimage')
+- If you'd like to **ask a general question**, use [Stack Overflow](http://stackoverflow.com/questions/tagged/sdwebimage).
+- If you **found a bug**, open an issue.
+- If you **have a feature request**, open an issue.
+- If you **need IRC channel**, use [Gitter](https://gitter.im/SDWebImage/community).
 
-[How is SDWebImage better than X?](https://github.com/rs/SDWebImage/wiki/How-is-SDWebImage-better-than-X%3F)
+## Contribution
 
-Who Uses It
-----------
+- If you **want to contribute**, read the [Contributing Guide](https://github.com/SDWebImage/SDWebImage/blob/master/.github/CONTRIBUTING.md)
+- For **development contribution guide**, read the [How-To-Contribute](https://github.com/SDWebImage/SDWebImage/wiki/How-to-Contribute)
+- For **understanding code architecture**, read the [Code Architecture Analysis](https://github.com/SDWebImage/SDWebImage/wiki/5.6-Code-Architecture-Analysis)
 
-Find out [who uses SDWebImage](https://github.com/rs/SDWebImage/wiki/Who-Uses-SDWebImage) and add your app to the list.
+## How To Use
 
-How To Use
-----------
-
-API documentation is available at [CocoaDocs - SDWebImage](http://cocoadocs.org/docsets/SDWebImage/)
-
-### Using UIImageView+WebCache category with UITableView
-
-Just #import the UIImageView+WebCache.h header, and call the sd_setImageWithURL:placeholderImage:
-method from the tableView:cellForRowAtIndexPath: UITableViewDataSource method. Everything will be
-handled for you, from async downloads to caching management.
+* Objective-C
 
 ```objective-c
-#import <SDWebImage/UIImageView+WebCache.h>
-
+#import <SDWebImage/SDWebImage.h>
 ...
-
-- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
-    static NSString *MyIdentifier = @"MyIdentifier";
-
-    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier];
-    if (cell == nil) {
-        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
-                                       reuseIdentifier:MyIdentifier] autorelease];
-    }
-
-    // Here we use the new provided sd_setImageWithURL: method to load the web image
-    [cell.imageView sd_setImageWithURL:[NSURL URLWithString:@"http://www.domain.com/path/to/image.jpg"]
-                      placeholderImage:[UIImage imageNamed:@"placeholder.png"]];
-
-    cell.textLabel.text = @"My Text";
-    return cell;
-}
+[imageView sd_setImageWithURL:[NSURL URLWithString:@"http://www.domain.com/path/to/image.jpg"]
+             placeholderImage:[UIImage imageNamed:@"placeholder.png"]];
 ```
 
-### Using blocks
+* Swift
 
-With blocks, you can be notified about the image download progress and whenever the image retrieval
-has completed with success or not:
+```swift
+import SDWebImage
 
-```objective-c
-// Here we use the new provided sd_setImageWithURL: method to load the web image
-[cell.imageView sd_setImageWithURL:[NSURL URLWithString:@"http://www.domain.com/path/to/image.jpg"]
-                      placeholderImage:[UIImage imageNamed:@"placeholder.png"]
-                             completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {
-                                ... completion code here ...
-                             }];
+imageView.sd_setImage(with: URL(string: "http://www.domain.com/path/to/image.jpg"), placeholderImage: UIImage(named: "placeholder.png"))
 ```
 
-Note: neither your success nor failure block will be call if your image request is canceled before completion.
+- For details about how to use the library and clear examples, see [The detailed How to use](https://github.com/SDWebImage/SDWebImage/blob/master/Docs/HowToUse.md)
 
-### Using SDWebImageManager
+## Animated Images (GIF) support
 
-The SDWebImageManager is the class behind the UIImageView+WebCache category. It ties the
-asynchronous downloader with the image cache store. You can use this class directly to benefit
-from web image downloading with caching in another context than a UIView (ie: with Cocoa).
+In 5.0, we introduced a brand new mechanism for supporting animated images. This includes animated image loading, rendering, decoding, and also supports customizations (for advanced users).
 
-Here is a simple example of how to use SDWebImageManager:
+This animated image solution is available for `iOS`/`tvOS`/`macOS`. The `SDAnimatedImage` is subclass of `UIImage/NSImage`, and `SDAnimatedImageView` is subclass of `UIImageView/NSImageView`, to make them compatible with the common frameworks APIs.
 
-```objective-c
-SDWebImageManager *manager = [SDWebImageManager sharedManager];
-[manager downloadImageWithURL:imageURL
-                      options:0
-                     progress:^(NSInteger receivedSize, NSInteger expectedSize) {
-                         // progression tracking code
-                     }
-                     completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) {
-                         if (image) {
-                             // do something with image
-                         }
-                     }];
-```
-
-### Using Asynchronous Image Downloader Independently
-
-It's also possible to use the async image downloader independently:
-
-```objective-c
-SDWebImageDownloader *downloader = [SDWebImageDownloader sharedDownloader];
-[downloader downloadImageWithURL:imageURL
-                         options:0
-                        progress:^(NSInteger receivedSize, NSInteger expectedSize) {
-                            // progression tracking code
-                        }
-                       completed:^(UIImage *image, NSData *data, NSError *error, BOOL finished) {
-                            if (image && finished) {
-                                // do something with image
-                            }
-                        }];
-```
+The `SDAnimatedImageView` supports the familiar image loading category methods, works like drop-in replacement for `UIImageView/NSImageView`.
 
-### Using Asynchronous Image Caching Independently
+Don't have `UIView` (like `WatchKit` or `CALayer`)? you can still use `SDAnimatedPlayer` the player engine for advanced playback and rendering.
 
-It is also possible to use the async based image cache store independently. SDImageCache
-maintains a memory cache and an optional disk cache. Disk cache write operations are performed
-asynchronous so it doesn't add unnecessary latency to the UI.
+See [Animated Image](https://github.com/SDWebImage/SDWebImage/wiki/Advanced-Usage#animated-image-50) for more detailed information.
 
-The SDImageCache class provides a singleton instance for convenience but you can create your own
-instance if you want to create separated cache namespace.
-
-To lookup the cache, you use the `queryDiskCacheForKey:done:` method. If the method returns nil, it means the cache
-doesn't currently own the image. You are thus responsible for generating and caching it. The cache
-key is an application unique identifier for the image to cache. It is generally the absolute URL of
-the image.
+* Objective-C
 
 ```objective-c
-SDImageCache *imageCache = [[SDImageCache alloc] initWithNamespace:@"myNamespace"];
-[imageCache queryDiskCacheForKey:myCacheKey done:^(UIImage *image) {
-    // image is not nil if image was found
-}];
+SDAnimatedImageView *imageView = [SDAnimatedImageView new];
+SDAnimatedImage *animatedImage = [SDAnimatedImage imageNamed:@"image.gif"];
+imageView.image = animatedImage;
 ```
 
-By default SDImageCache will lookup the disk cache if an image can't be found in the memory cache.
-You can prevent this from happening by calling the alternative method `imageFromMemoryCacheForKey:`.
-
-To store an image into the cache, you use the storeImage:forKey: method:
+* Swift
 
-```objective-c
-[[SDImageCache sharedImageCache] storeImage:myImage forKey:myCacheKey];
+```swift
+let imageView = SDAnimatedImageView()
+let animatedImage = SDAnimatedImage(named: "image.gif")
+imageView.image = animatedImage
 ```
 
-By default, the image will be stored in memory cache as well as on disk cache (asynchronously). If
-you want only the memory cache, use the alternative method storeImage:forKey:toDisk: with a negative
-third argument.
-
-### Using cache key filter
-
-Sometime, you may not want to use the image URL as cache key because part of the URL is dynamic
-(i.e.: for access control purpose). SDWebImageManager provides a way to set a cache key filter that
-takes the NSURL as input, and output a cache key NSString.
-
-The following example sets a filter in the application delegate that will remove any query-string from
-the URL before to use it as a cache key:
-
-```objective-c
-- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
-    SDWebImageManager.sharedManager.cacheKeyFilter = ^(NSURL *url) {
-        url = [[NSURL alloc] initWithScheme:url.scheme host:url.host path:url.path];
-        return [url absoluteString];
-    };
-
-    // Your app init code...
-    return YES;
-}
-```
-
-
-Common Problems
----------------
+#### FLAnimatedImage integration has its own dedicated repo
+In order to clean up things and make our core project do less things, we decided that the `FLAnimatedImage` integration does not belong here. From 5.0, this will still be available, but under a dedicated repo [SDWebImageFLPlugin](https://github.com/SDWebImage/SDWebImageFLPlugin).
 
-### Using dynamic image size with UITableViewCell
+## Installation
 
-UITableView determines the size of the image by the first image set for a cell. If your remote images
-don't have the same size as your placeholder image, you may experience strange anamorphic scaling issue.
-The following article gives a way to workaround this issue:
-
-[http://www.wrichards.com/blog/2011/11/sdwebimage-fixed-width-cell-images/](http://www.wrichards.com/blog/2011/11/sdwebimage-fixed-width-cell-images/)
-
-
-### Handle image refresh
+There are four ways to use SDWebImage in your project:
+- using CocoaPods
+- using Carthage
+- using Swift Package Manager
+- manual install (build frameworks or embed Xcode Project)
 
-SDWebImage does very aggressive caching by default. It ignores all kind of caching control header returned by the HTTP server and cache the returned images with no time restriction. It implies your images URLs are static URLs pointing to images that never change. If the pointed image happen to change, some parts of the URL should change accordingly.
+### Installation with CocoaPods
 
-If you don't control the image server you're using, you may not be able to change the URL when its content is updated. This is the case for Facebook avatar URLs for instance. In such case, you may use the `SDWebImageRefreshCached` flag. This will slightly degrade the performance but will respect the HTTP caching control headers:
+[CocoaPods](http://cocoapods.org/) is a dependency manager for Objective-C, which automates and simplifies the process of using 3rd-party libraries in your projects. See the [Get Started](http://cocoapods.org/#get_started) section for more details.
 
-``` objective-c
-[imageView sd_setImageWithURL:[NSURL URLWithString:@"https://graph.facebook.com/olivier.poitrey/picture"]
-                 placeholderImage:[UIImage imageNamed:@"avatar-placeholder.png"]
-                          options:SDWebImageRefreshCached];
+#### Podfile
+```
+platform :ios, '8.0'
+pod 'SDWebImage', '~> 5.0'
 ```
 
-### Add a progress indicator
-
-See this category: https://github.com/JJSaccolo/UIActivityIndicator-for-SDWebImage
-
-Installation
-------------
-
-There are three ways to use SDWebImage in your project:
-- using CocoaPods
-- copying all the files into your project
-- importing the project as a static library
+##### Swift and static framework
 
-### Installation with CocoaPods
+Swift project previously had to use `use_frameworks!` to make all Pods into dynamic framework to let CocoaPods work.
 
-[CocoaPods](http://cocoapods.org/) is a dependency manager for Objective-C, which automates and simplifies the process of using 3rd-party libraries in your projects. See the [Get Started](http://cocoapods.org/#get_started) section for more details.
+However, starting with `CocoaPods 1.5.0+` (with `Xcode 9+`), which supports to build both Objective-C && Swift code into static framework. You can use modular headers to use SDWebImage as static framework, without the need of `use_frameworks!`:
 
-#### Podfile
 ```
-platform :ios, '7.0'
-pod 'SDWebImage', '~>3.8'
+platform :ios, '8.0'
+# Uncomment the next line when you want all Pods as static framework
+# use_modular_headers!
+pod 'SDWebImage', :modular_headers => true
 ```
 
-If you are using Swift, be sure to add `use_frameworks!` and set your target to iOS 8+:
+See more on [CocoaPods 1.5.0 — Swift Static Libraries](http://blog.cocoapods.org/CocoaPods-1.5.0/)
+
+If not, you still need to add `use_frameworks!` to use SDWebImage as dynamic framework:
+
 ```
 platform :ios, '8.0'
 use_frameworks!
+pod 'SDWebImage'
 ```
 
 #### Subspecs
 
-There are 3 subspecs available now: `Core`, `MapKit` and `WebP` (this means you can install only some of the SDWebImage modules. By default, you get just `Core`, so if you need `WebP`, you need to specify it). 
+There are 2 subspecs available now: `Core` and `MapKit` (this means you can install only some of the SDWebImage modules. By default, you get just `Core`, so if you need `MapKit`, you need to specify it). 
 
 Podfile example:
+
 ```
-pod 'SDWebImage/WebP'
+pod 'SDWebImage/MapKit'
 ```
 
-### Installation with Carthage (iOS 8+)
+### Installation with Carthage
 
 [Carthage](https://github.com/Carthage/Carthage) is a lightweight dependency manager for Swift and Objective-C. It leverages CocoaTouch modules and is less invasive than CocoaPods.
 
 To install with carthage, follow the instruction on [Carthage](https://github.com/Carthage/Carthage)
 
-#### Cartfile
-```
-github "rs/SDWebImage"
-```
+Carthage users can point to this repository and use whichever generated framework they'd like: SDWebImage, SDWebImageMapKit or both.
 
-#### Usage
-Swift
+Make the following entry in your Cartfile: `github "SDWebImage/SDWebImage"`
+Then run `carthage update`
+If this is your first time using Carthage in the project, you'll need to go through some additional steps as explained [over at Carthage](https://github.com/Carthage/Carthage#adding-frameworks-to-an-application).
 
-If you installed using CocoaPods:
-```
-import SDWebImage
-```
+> NOTE: At this time, Carthage does not provide a way to build only specific repository subcomponents (or equivalent of CocoaPods's subspecs). All components and their dependencies will be built with the above command. However, you don't need to copy frameworks you aren't using into your project. For instance, if you aren't using `SDWebImageMapKit`, feel free to delete that framework from the Carthage Build directory after `carthage update` completes.
 
-If you installed manually:
-```
-import WebImage
-```
+### Installation with Swift Package Manager (Xcode 11+)
 
-Objective-C
+[Swift Package Manager](https://swift.org/package-manager/) (SwiftPM) is a tool for managing the distribution of Swift code as well as C-family dependency. From Xcode 11, SwiftPM got natively integrated with Xcode.
 
+SDWebImage support SwiftPM from version 5.1.0. To use SwiftPM, you should use Xcode 11 to open your project. Click `File` -> `Swift Packages` -> `Add Package Dependency`, enter [SDWebImage repo's URL](https://github.com/SDWebImage/SDWebImage.git). Or you can login Xcode with your GitHub account and just type `SDWebImage` to search.
+
+After select the package, you can choose the dependency type (tagged version, branch or commit). Then Xcode will setup all the stuff for you.
+
+If you're a framework author and use SDWebImage as a dependency, update your `Package.swift` file:
+
+```swift
+let package = Package(
+    // 5.1.0 ..< 6.0.0
+    dependencies: [
+        .package(url: "https://github.com/SDWebImage/SDWebImage.git", from: "5.1.0")
+    ],
+    // ...
+)
 ```
-@import WebImage;
-```
 
-### Installation by cloning the repository
+### Manual Installation Guide
+
+See more on [Manual install Guide](https://github.com/SDWebImage/SDWebImage/wiki/Installation-Guide#manual-installation-guide)
+
+### Import headers in your source files
+
+In the source files where you need to use the library, import the umbrella header file:
 
-In order to gain access to all the files from the repository, you should clone it.
+```objective-c
+#import <SDWebImage/SDWebImage.h>
 ```
-git clone --recursive https://github.com/rs/SDWebImage.git
+
+It's also recommend to use the module import syntax, available for CocoaPods(enable `modular_headers`)/Carthage/SwiftPM.
+
+```objecitivec
+@import SDWebImage;
 ```
 
-### Add the SDWebImage project to your project
+### Build Project
 
-- Download and unzip the last version of the framework from the [download page](https://github.com/rs/SDWebImage/releases)
-- Right-click on the project navigator and select "Add Files to "Your Project":
-- In the dialog, select SDWebImage.framework:
-- Check the "Copy items into destination group's folder (if needed)" checkbox
+At this point your workspace should build without error. If you are having problem, post to the Issue and the
+community can help you solve it.
 
-### Add dependencies
+## Data Collection Practices
+As required by the [App privacy details on the App Store](https://developer.apple.com/app-store/app-privacy-details/), here's SDWebImage's list of [Data Collection Practices](https://sdwebimage.github.io/DataCollection/index.html).
 
-- In you application project app’s target settings, find the "Build Phases" section and open the "Link Binary With Libraries" block:
-- Click the "+" button again and select the "ImageIO.framework", this is needed by the progressive download feature:
+## Author
+- [Olivier Poitrey](https://github.com/rs)
 
-### Add Linker Flag
+## Collaborators
+- [Konstantinos K.](https://github.com/mythodeia)
+- [Bogdan Poplauschi](https://github.com/bpoplauschi)
+- [Chester Liu](https://github.com/skyline75489)
+- [DreamPiggy](https://github.com/dreampiggy)
+- [Wu Zhong](https://github.com/zhongwuzw)
 
-Open the "Build Settings" tab, in the "Linking" section, locate the "Other Linker Flags" setting and add the "-ObjC" flag:
+## Credits
 
-![Other Linker Flags](http://dl.dropbox.com/u/123346/SDWebImage/10_other_linker_flags.jpg)
+Thank you to all the people who have already contributed to SDWebImage.
 
-Alternatively, if this causes compilation problems with frameworks that extend optional libraries, such as Parse,  RestKit or opencv2, instead of the -ObjC flag use:
-```
--force_load SDWebImage.framework/Versions/Current/SDWebImage
-```
+[![Contributors](https://opencollective.com/SDWebImage/contributors.svg?width=890)](https://github.com/SDWebImage/SDWebImage/graphs/contributors)
 
-If you're using Cocoa Pods and have any frameworks that extend optional libraries, such as Parsen RestKit or opencv2, instead of the -ObjC flag use:
-```
--force_load $(TARGET_BUILD_DIR)/libPods.a
-```
-and this:
-```
-$(inherited)
-```
+## Licenses
 
-### Import headers in your source files
+All source code is licensed under the [MIT License](https://github.com/SDWebImage/SDWebImage/blob/master/LICENSE).
 
-In the source files where you need to use the library, import the header file:
+## Architecture
 
-```objective-c
-#import <SDWebImage/UIImageView+WebCache.h>
-```
+To learn about SDWebImage's architecture design for contribution, read [The Core of SDWebImage v5.6 Architecture](https://github.com/SDWebImage/SDWebImage/wiki/5.6-Code-Architecture-Analysis). Thanks @looseyi for the post and translation.
 
-### Build Project
+#### High Level Diagram
+<p align="center" >
+    <img src="https://raw.githubusercontent.com/SDWebImage/SDWebImage/master/Docs/Diagrams/SDWebImageHighLevelDiagram.jpeg" title="SDWebImage high level diagram">
+</p>
 
-At this point your workspace should build without error. If you are having problem, post to the Issue and the
-community can help you solve it.
+#### Overall Class Diagram
+<p align="center" >
+    <img src="https://raw.githubusercontent.com/SDWebImage/SDWebImage/master/Docs/Diagrams/SDWebImageClassDiagram.png" title="SDWebImage overall class diagram">
+</p>
 
-Future Enhancements
--------------------
+#### Top Level API Diagram
+<p align="center" >
+    <img src="https://raw.githubusercontent.com/SDWebImage/SDWebImage/master/Docs/Diagrams/SDWebImageTopLevelClassDiagram.png" title="SDWebImage top level API diagram">
+</p>
 
-- LRU memory cache cleanup instead of reset on memory warning
+#### Main Sequence Diagram
+<p align="center" >
+    <img src="https://raw.githubusercontent.com/SDWebImage/SDWebImage/master/Docs/Diagrams/SDWebImageSequenceDiagram.png" title="SDWebImage sequence diagram">
+</p>
 
-## Licenses
+#### More detailed diagrams
+- [Manager API Diagram](https://raw.githubusercontent.com/SDWebImage/SDWebImage/master/Docs/Diagrams/SDWebImageManagerClassDiagram.png)
+- [Coders API Diagram](https://raw.githubusercontent.com/SDWebImage/SDWebImage/master/Docs/Diagrams/SDWebImageCodersClassDiagram.png)
+- [Loader API Diagram](https://raw.githubusercontent.com/SDWebImage/SDWebImage/master/Docs/Diagrams/SDWebImageLoaderClassDiagram.png)
+- [Cache API Diagram](https://raw.githubusercontent.com/SDWebImage/SDWebImage/master/Docs/Diagrams/SDWebImageCacheClassDiagram.png)
 
-All source code is licensed under the [MIT License](https://raw.github.com/rs/SDWebImage/master/LICENSE).

+ 0 - 26
KulexiuForTeacher/Pods/SDWebImage/SDWebImage/NSData+ImageContentType.h

@@ -1,26 +0,0 @@
-//
-// Created by Fabrice Aneche on 06/01/14.
-// Copyright (c) 2014 Dailymotion. All rights reserved.
-//
-
-#import <Foundation/Foundation.h>
-
-@interface NSData (ImageContentType)
-
-/**
- *  Compute the content type for an image data
- *
- *  @param data the input data
- *
- *  @return the content type as string (i.e. image/jpeg, image/gif)
- */
-+ (NSString *)sd_contentTypeForImageData:(NSData *)data;
-
-@end
-
-
-@interface NSData (ImageContentTypeDeprecated)
-
-+ (NSString *)contentTypeForImageData:(NSData *)data __deprecated_msg("Use `sd_contentTypeForImageData:`");
-
-@end

+ 0 - 49
KulexiuForTeacher/Pods/SDWebImage/SDWebImage/NSData+ImageContentType.m

@@ -1,49 +0,0 @@
-//
-// Created by Fabrice Aneche on 06/01/14.
-// Copyright (c) 2014 Dailymotion. All rights reserved.
-//
-
-#import "NSData+ImageContentType.h"
-
-
-@implementation NSData (ImageContentType)
-
-+ (NSString *)sd_contentTypeForImageData:(NSData *)data {
-    uint8_t c;
-    [data getBytes:&c length:1];
-    switch (c) {
-        case 0xFF:
-            return @"image/jpeg";
-        case 0x89:
-            return @"image/png";
-        case 0x47:
-            return @"image/gif";
-        case 0x49:
-        case 0x4D:
-            return @"image/tiff";
-        case 0x52:
-            // R as RIFF for WEBP
-            if ([data length] < 12) {
-                return nil;
-            }
-
-            NSString *testString = [[NSString alloc] initWithData:[data subdataWithRange:NSMakeRange(0, 12)] encoding:NSASCIIStringEncoding];
-            if ([testString hasPrefix:@"RIFF"] && [testString hasSuffix:@"WEBP"]) {
-                return @"image/webp";
-            }
-
-            return nil;
-    }
-    return nil;
-}
-
-@end
-
-
-@implementation NSData (ImageContentTypeDeprecated)
-
-+ (NSString *)contentTypeForImageData:(NSData *)data {
-    return [self sd_contentTypeForImageData:data];
-}
-
-@end

+ 0 - 280
KulexiuForTeacher/Pods/SDWebImage/SDWebImage/SDImageCache.h

@@ -1,280 +0,0 @@
-/*
- * This file is part of the SDWebImage package.
- * (c) Olivier Poitrey <rs@dailymotion.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-#import <Foundation/Foundation.h>
-#import "SDWebImageCompat.h"
-
-typedef NS_ENUM(NSInteger, SDImageCacheType) {
-    /**
-     * The image wasn't available the SDWebImage caches, but was downloaded from the web.
-     */
-    SDImageCacheTypeNone,
-    /**
-     * The image was obtained from the disk cache.
-     */
-    SDImageCacheTypeDisk,
-    /**
-     * The image was obtained from the memory cache.
-     */
-    SDImageCacheTypeMemory
-};
-
-typedef void(^SDWebImageQueryCompletedBlock)(UIImage *image, SDImageCacheType cacheType);
-
-typedef void(^SDWebImageCheckCacheCompletionBlock)(BOOL isInCache);
-
-typedef void(^SDWebImageCalculateSizeBlock)(NSUInteger fileCount, NSUInteger totalSize);
-
-/**
- * SDImageCache maintains a memory cache and an optional disk cache. Disk cache write operations are performed
- * asynchronous so it doesn’t add unnecessary latency to the UI.
- */
-@interface SDImageCache : NSObject
-
-/**
- * Decompressing images that are downloaded and cached can improve performance but can consume lot of memory.
- * Defaults to YES. Set this to NO if you are experiencing a crash due to excessive memory consumption.
- */
-@property (assign, nonatomic) BOOL shouldDecompressImages;
-
-/**
- *  disable iCloud backup [defaults to YES]
- */
-@property (assign, nonatomic) BOOL shouldDisableiCloud;
-
-/**
- * use memory cache [defaults to YES]
- */
-@property (assign, nonatomic) BOOL shouldCacheImagesInMemory;
-
-/**
- * The maximum "total cost" of the in-memory image cache. The cost function is the number of pixels held in memory.
- */
-@property (assign, nonatomic) NSUInteger maxMemoryCost;
-
-/**
- * The maximum number of objects the cache should hold.
- */
-@property (assign, nonatomic) NSUInteger maxMemoryCountLimit;
-
-/**
- * The maximum length of time to keep an image in the cache, in seconds
- */
-@property (assign, nonatomic) NSInteger maxCacheAge;
-
-/**
- * The maximum size of the cache, in bytes.
- */
-@property (assign, nonatomic) NSUInteger maxCacheSize;
-
-/**
- * Returns global shared cache instance
- *
- * @return SDImageCache global instance
- */
-+ (SDImageCache *)sharedImageCache;
-
-/**
- * Init a new cache store with a specific namespace
- *
- * @param ns The namespace to use for this cache store
- */
-- (id)initWithNamespace:(NSString *)ns;
-
-/**
- * Init a new cache store with a specific namespace and directory
- *
- * @param ns        The namespace to use for this cache store
- * @param directory Directory to cache disk images in
- */
-- (id)initWithNamespace:(NSString *)ns diskCacheDirectory:(NSString *)directory;
-
--(NSString *)makeDiskCachePath:(NSString*)fullNamespace;
-
-/**
- * Add a read-only cache path to search for images pre-cached by SDImageCache
- * Useful if you want to bundle pre-loaded images with your app
- *
- * @param path The path to use for this read-only cache path
- */
-- (void)addReadOnlyCachePath:(NSString *)path;
-
-/**
- * Store an image into memory and disk cache at the given key.
- *
- * @param image The image to store
- * @param key   The unique image cache key, usually it's image absolute URL
- */
-- (void)storeImage:(UIImage *)image forKey:(NSString *)key;
-
-/**
- * Store an image into memory and optionally disk cache at the given key.
- *
- * @param image  The image to store
- * @param key    The unique image cache key, usually it's image absolute URL
- * @param toDisk Store the image to disk cache if YES
- */
-- (void)storeImage:(UIImage *)image forKey:(NSString *)key toDisk:(BOOL)toDisk;
-
-/**
- * Store an image into memory and optionally disk cache at the given key.
- *
- * @param image       The image to store
- * @param recalculate BOOL indicates if imageData can be used or a new data should be constructed from the UIImage
- * @param imageData   The image data as returned by the server, this representation will be used for disk storage
- *                    instead of converting the given image object into a storable/compressed image format in order
- *                    to save quality and CPU
- * @param key         The unique image cache key, usually it's image absolute URL
- * @param toDisk      Store the image to disk cache if YES
- */
-- (void)storeImage:(UIImage *)image recalculateFromImage:(BOOL)recalculate imageData:(NSData *)imageData forKey:(NSString *)key toDisk:(BOOL)toDisk;
-
-/**
- * Store image NSData into disk cache at the given key.
- *
- * @param imageData The image data to store
- * @param key   The unique image cache key, usually it's image absolute URL
- */
-- (void)storeImageDataToDisk:(NSData *)imageData forKey:(NSString *)key;
-
-/**
- * Query the disk cache asynchronously.
- *
- * @param key The unique key used to store the wanted image
- */
-- (NSOperation *)queryDiskCacheForKey:(NSString *)key done:(SDWebImageQueryCompletedBlock)doneBlock;
-
-/**
- * Query the memory cache synchronously.
- *
- * @param key The unique key used to store the wanted image
- */
-- (UIImage *)imageFromMemoryCacheForKey:(NSString *)key;
-
-/**
- * Query the disk cache synchronously after checking the memory cache.
- *
- * @param key The unique key used to store the wanted image
- */
-- (UIImage *)imageFromDiskCacheForKey:(NSString *)key;
-
-/**
- * Remove the image from memory and disk cache asynchronously
- *
- * @param key The unique image cache key
- */
-- (void)removeImageForKey:(NSString *)key;
-
-
-/**
- * Remove the image from memory and disk cache asynchronously
- *
- * @param key             The unique image cache key
- * @param completion      An block that should be executed after the image has been removed (optional)
- */
-- (void)removeImageForKey:(NSString *)key withCompletion:(SDWebImageNoParamsBlock)completion;
-
-/**
- * Remove the image from memory and optionally disk cache asynchronously
- *
- * @param key      The unique image cache key
- * @param fromDisk Also remove cache entry from disk if YES
- */
-- (void)removeImageForKey:(NSString *)key fromDisk:(BOOL)fromDisk;
-
-/**
- * Remove the image from memory and optionally disk cache asynchronously
- *
- * @param key             The unique image cache key
- * @param fromDisk        Also remove cache entry from disk if YES
- * @param completion      An block that should be executed after the image has been removed (optional)
- */
-- (void)removeImageForKey:(NSString *)key fromDisk:(BOOL)fromDisk withCompletion:(SDWebImageNoParamsBlock)completion;
-
-/**
- * Clear all memory cached images
- */
-- (void)clearMemory;
-
-/**
- * Clear all disk cached images. Non-blocking method - returns immediately.
- * @param completion    An block that should be executed after cache expiration completes (optional)
- */
-- (void)clearDiskOnCompletion:(SDWebImageNoParamsBlock)completion;
-
-/**
- * Clear all disk cached images
- * @see clearDiskOnCompletion:
- */
-- (void)clearDisk;
-
-/**
- * Remove all expired cached image from disk. Non-blocking method - returns immediately.
- * @param completionBlock An block that should be executed after cache expiration completes (optional)
- */
-- (void)cleanDiskWithCompletionBlock:(SDWebImageNoParamsBlock)completionBlock;
-
-/**
- * Remove all expired cached image from disk
- * @see cleanDiskWithCompletionBlock:
- */
-- (void)cleanDisk;
-
-/**
- * Get the size used by the disk cache
- */
-- (NSUInteger)getSize;
-
-/**
- * Get the number of images in the disk cache
- */
-- (NSUInteger)getDiskCount;
-
-/**
- * Asynchronously calculate the disk cache's size.
- */
-- (void)calculateSizeWithCompletionBlock:(SDWebImageCalculateSizeBlock)completionBlock;
-
-/**
- *  Async check if image exists in disk cache already (does not load the image)
- *
- *  @param key             the key describing the url
- *  @param completionBlock the block to be executed when the check is done.
- *  @note the completion block will be always executed on the main queue
- */
-- (void)diskImageExistsWithKey:(NSString *)key completion:(SDWebImageCheckCacheCompletionBlock)completionBlock;
-
-/**
- *  Check if image exists in disk cache already (does not load the image)
- *
- *  @param key the key describing the url
- *
- *  @return YES if an image exists for the given key
- */
-- (BOOL)diskImageExistsWithKey:(NSString *)key;
-
-/**
- *  Get the cache path for a certain key (needs the cache path root folder)
- *
- *  @param key  the key (can be obtained from url using cacheKeyForURL)
- *  @param path the cache path root folder
- *
- *  @return the cache path
- */
-- (NSString *)cachePathForKey:(NSString *)key inPath:(NSString *)path;
-
-/**
- *  Get the default cache path for a certain key
- *
- *  @param key the key (can be obtained from url using cacheKeyForURL)
- *
- *  @return the default cache path
- */
-- (NSString *)defaultCachePathForKey:(NSString *)key;
-
-@end

+ 0 - 657
KulexiuForTeacher/Pods/SDWebImage/SDWebImage/SDImageCache.m

@@ -1,657 +0,0 @@
-/*
- * This file is part of the SDWebImage package.
- * (c) Olivier Poitrey <rs@dailymotion.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-#import "SDImageCache.h"
-#import "SDWebImageDecoder.h"
-#import "UIImage+MultiFormat.h"
-#import <CommonCrypto/CommonDigest.h>
-
-// See https://github.com/rs/SDWebImage/pull/1141 for discussion
-@interface AutoPurgeCache : NSCache
-@end
-
-@implementation AutoPurgeCache
-
-- (id)init
-{
-    self = [super init];
-    if (self) {
-        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(removeAllObjects) name:UIApplicationDidReceiveMemoryWarningNotification object:nil];
-    }
-    return self;
-}
-
-- (void)dealloc
-{
-    [[NSNotificationCenter defaultCenter] removeObserver:self name:UIApplicationDidReceiveMemoryWarningNotification object:nil];
-
-}
-
-@end
-
-static const NSInteger kDefaultCacheMaxCacheAge = 60 * 60 * 24 * 7; // 1 week
-// PNG signature bytes and data (below)
-static unsigned char kPNGSignatureBytes[8] = {0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A};
-static NSData *kPNGSignatureData = nil;
-
-BOOL ImageDataHasPNGPreffix(NSData *data);
-
-BOOL ImageDataHasPNGPreffix(NSData *data) {
-    NSUInteger pngSignatureLength = [kPNGSignatureData length];
-    if ([data length] >= pngSignatureLength) {
-        if ([[data subdataWithRange:NSMakeRange(0, pngSignatureLength)] isEqualToData:kPNGSignatureData]) {
-            return YES;
-        }
-    }
-
-    return NO;
-}
-
-FOUNDATION_STATIC_INLINE NSUInteger SDCacheCostForImage(UIImage *image) {
-    return image.size.height * image.size.width * image.scale * image.scale;
-}
-
-@interface SDImageCache ()
-
-@property (strong, nonatomic) NSCache *memCache;
-@property (strong, nonatomic) NSString *diskCachePath;
-@property (strong, nonatomic) NSMutableArray *customPaths;
-@property (SDDispatchQueueSetterSementics, nonatomic) dispatch_queue_t ioQueue;
-
-@end
-
-
-@implementation SDImageCache {
-    NSFileManager *_fileManager;
-}
-
-+ (SDImageCache *)sharedImageCache {
-    static dispatch_once_t once;
-    static id instance;
-    dispatch_once(&once, ^{
-        instance = [self new];
-    });
-    return instance;
-}
-
-- (id)init {
-    return [self initWithNamespace:@"default"];
-}
-
-- (id)initWithNamespace:(NSString *)ns {
-    NSString *path = [self makeDiskCachePath:ns];
-    return [self initWithNamespace:ns diskCacheDirectory:path];
-}
-
-- (id)initWithNamespace:(NSString *)ns diskCacheDirectory:(NSString *)directory {
-    if ((self = [super init])) {
-        NSString *fullNamespace = [@"com.hackemist.SDWebImageCache." stringByAppendingString:ns];
-
-        // initialise PNG signature data
-        kPNGSignatureData = [NSData dataWithBytes:kPNGSignatureBytes length:8];
-
-        // Create IO serial queue
-        _ioQueue = dispatch_queue_create("com.hackemist.SDWebImageCache", DISPATCH_QUEUE_SERIAL);
-
-        // Init default values
-        _maxCacheAge = kDefaultCacheMaxCacheAge;
-
-        // Init the memory cache
-        _memCache = [[AutoPurgeCache alloc] init];
-        _memCache.name = fullNamespace;
-
-        // Init the disk cache
-        if (directory != nil) {
-            _diskCachePath = [directory stringByAppendingPathComponent:fullNamespace];
-        } else {
-            NSString *path = [self makeDiskCachePath:ns];
-            _diskCachePath = path;
-        }
-
-        // Set decompression to YES
-        _shouldDecompressImages = YES;
-
-        // memory cache enabled
-        _shouldCacheImagesInMemory = YES;
-
-        // Disable iCloud
-        _shouldDisableiCloud = YES;
-
-        dispatch_sync(_ioQueue, ^{
-            _fileManager = [NSFileManager new];
-        });
-
-#if TARGET_OS_IOS
-        // Subscribe to app events
-        [[NSNotificationCenter defaultCenter] addObserver:self
-                                                 selector:@selector(clearMemory)
-                                                     name:UIApplicationDidReceiveMemoryWarningNotification
-                                                   object:nil];
-
-        [[NSNotificationCenter defaultCenter] addObserver:self
-                                                 selector:@selector(cleanDisk)
-                                                     name:UIApplicationWillTerminateNotification
-                                                   object:nil];
-
-        [[NSNotificationCenter defaultCenter] addObserver:self
-                                                 selector:@selector(backgroundCleanDisk)
-                                                     name:UIApplicationDidEnterBackgroundNotification
-                                                   object:nil];
-#endif
-    }
-
-    return self;
-}
-
-- (void)dealloc {
-    [[NSNotificationCenter defaultCenter] removeObserver:self];
-    SDDispatchQueueRelease(_ioQueue);
-}
-
-- (void)addReadOnlyCachePath:(NSString *)path {
-    if (!self.customPaths) {
-        self.customPaths = [NSMutableArray new];
-    }
-
-    if (![self.customPaths containsObject:path]) {
-        [self.customPaths addObject:path];
-    }
-}
-
-- (NSString *)cachePathForKey:(NSString *)key inPath:(NSString *)path {
-    NSString *filename = [self cachedFileNameForKey:key];
-    return [path stringByAppendingPathComponent:filename];
-}
-
-- (NSString *)defaultCachePathForKey:(NSString *)key {
-    return [self cachePathForKey:key inPath:self.diskCachePath];
-}
-
-#pragma mark SDImageCache (private)
-
-- (NSString *)cachedFileNameForKey:(NSString *)key {
-    const char *str = [key UTF8String];
-    if (str == NULL) {
-        str = "";
-    }
-    unsigned char r[CC_MD5_DIGEST_LENGTH];
-    CC_MD5(str, (CC_LONG)strlen(str), r);
-    NSString *filename = [NSString stringWithFormat:@"%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%@",
-                          r[0], r[1], r[2], r[3], r[4], r[5], r[6], r[7], r[8], r[9], r[10],
-                          r[11], r[12], r[13], r[14], r[15], [[key pathExtension] isEqualToString:@""] ? @"" : [NSString stringWithFormat:@".%@", [key pathExtension]]];
-
-    return filename;
-}
-
-#pragma mark ImageCache
-
-// Init the disk cache
--(NSString *)makeDiskCachePath:(NSString*)fullNamespace{
-    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
-    return [paths[0] stringByAppendingPathComponent:fullNamespace];
-}
-
-- (void)storeImage:(UIImage *)image recalculateFromImage:(BOOL)recalculate imageData:(NSData *)imageData forKey:(NSString *)key toDisk:(BOOL)toDisk {
-    if (!image || !key) {
-        return;
-    }
-    // if memory cache is enabled
-    if (self.shouldCacheImagesInMemory) {
-        NSUInteger cost = SDCacheCostForImage(image);
-        [self.memCache setObject:image forKey:key cost:cost];
-    }
-
-    if (toDisk) {
-        dispatch_async(self.ioQueue, ^{
-            NSData *data = imageData;
-
-            if (image && (recalculate || !data)) {
-#if TARGET_OS_IPHONE
-                // We need to determine if the image is a PNG or a JPEG
-                // PNGs are easier to detect because they have a unique signature (http://www.w3.org/TR/PNG-Structure.html)
-                // The first eight bytes of a PNG file always contain the following (decimal) values:
-                // 137 80 78 71 13 10 26 10
-
-                // If the imageData is nil (i.e. if trying to save a UIImage directly or the image was transformed on download)
-                // and the image has an alpha channel, we will consider it PNG to avoid losing the transparency
-                int alphaInfo = CGImageGetAlphaInfo(image.CGImage);
-                BOOL hasAlpha = !(alphaInfo == kCGImageAlphaNone ||
-                                  alphaInfo == kCGImageAlphaNoneSkipFirst ||
-                                  alphaInfo == kCGImageAlphaNoneSkipLast);
-                BOOL imageIsPng = hasAlpha;
-
-                // But if we have an image data, we will look at the preffix
-                if ([imageData length] >= [kPNGSignatureData length]) {
-                    imageIsPng = ImageDataHasPNGPreffix(imageData);
-                }
-
-                if (imageIsPng) {
-                    data = UIImagePNGRepresentation(image);
-                }
-                else {
-                    data = UIImageJPEGRepresentation(image, (CGFloat)1.0);
-                }
-#else
-                data = [NSBitmapImageRep representationOfImageRepsInArray:image.representations usingType: NSJPEGFileType properties:nil];
-#endif
-            }
-
-            [self storeImageDataToDisk:data forKey:key];
-        });
-    }
-}
-
-- (void)storeImage:(UIImage *)image forKey:(NSString *)key {
-    [self storeImage:image recalculateFromImage:YES imageData:nil forKey:key toDisk:YES];
-}
-
-- (void)storeImage:(UIImage *)image forKey:(NSString *)key toDisk:(BOOL)toDisk {
-    [self storeImage:image recalculateFromImage:YES imageData:nil forKey:key toDisk:toDisk];
-}
-
-- (void)storeImageDataToDisk:(NSData *)imageData forKey:(NSString *)key {
-    
-    if (!imageData) {
-        return;
-    }
-    
-    if (![_fileManager fileExistsAtPath:_diskCachePath]) {
-        [_fileManager createDirectoryAtPath:_diskCachePath withIntermediateDirectories:YES attributes:nil error:NULL];
-    }
-    
-    // get cache Path for image key
-    NSString *cachePathForKey = [self defaultCachePathForKey:key];
-    // transform to NSUrl
-    NSURL *fileURL = [NSURL fileURLWithPath:cachePathForKey];
-    
-    [_fileManager createFileAtPath:cachePathForKey contents:imageData attributes:nil];
-    
-    // disable iCloud backup
-    if (self.shouldDisableiCloud) {
-        [fileURL setResourceValue:[NSNumber numberWithBool:YES] forKey:NSURLIsExcludedFromBackupKey error:nil];
-    }
-}
-
-- (BOOL)diskImageExistsWithKey:(NSString *)key {
-    BOOL exists = NO;
-    
-    // this is an exception to access the filemanager on another queue than ioQueue, but we are using the shared instance
-    // from apple docs on NSFileManager: The methods of the shared NSFileManager object can be called from multiple threads safely.
-    exists = [[NSFileManager defaultManager] fileExistsAtPath:[self defaultCachePathForKey:key]];
-
-    // fallback because of https://github.com/rs/SDWebImage/pull/976 that added the extension to the disk file name
-    // checking the key with and without the extension
-    if (!exists) {
-        exists = [[NSFileManager defaultManager] fileExistsAtPath:[[self defaultCachePathForKey:key] stringByDeletingPathExtension]];
-    }
-    
-    return exists;
-}
-
-- (void)diskImageExistsWithKey:(NSString *)key completion:(SDWebImageCheckCacheCompletionBlock)completionBlock {
-    dispatch_async(_ioQueue, ^{
-        BOOL exists = [_fileManager fileExistsAtPath:[self defaultCachePathForKey:key]];
-
-        // fallback because of https://github.com/rs/SDWebImage/pull/976 that added the extension to the disk file name
-        // checking the key with and without the extension
-        if (!exists) {
-            exists = [_fileManager fileExistsAtPath:[[self defaultCachePathForKey:key] stringByDeletingPathExtension]];
-        }
-
-        if (completionBlock) {
-            dispatch_async(dispatch_get_main_queue(), ^{
-                completionBlock(exists);
-            });
-        }
-    });
-}
-
-- (UIImage *)imageFromMemoryCacheForKey:(NSString *)key {
-    return [self.memCache objectForKey:key];
-}
-
-- (UIImage *)imageFromDiskCacheForKey:(NSString *)key {
-
-    // First check the in-memory cache...
-    UIImage *image = [self imageFromMemoryCacheForKey:key];
-    if (image) {
-        return image;
-    }
-
-    // Second check the disk cache...
-    UIImage *diskImage = [self diskImageForKey:key];
-    if (diskImage && self.shouldCacheImagesInMemory) {
-        NSUInteger cost = SDCacheCostForImage(diskImage);
-        [self.memCache setObject:diskImage forKey:key cost:cost];
-    }
-
-    return diskImage;
-}
-
-- (NSData *)diskImageDataBySearchingAllPathsForKey:(NSString *)key {
-    NSString *defaultPath = [self defaultCachePathForKey:key];
-    NSData *data = [NSData dataWithContentsOfFile:defaultPath];
-    if (data) {
-        return data;
-    }
-
-    // fallback because of https://github.com/rs/SDWebImage/pull/976 that added the extension to the disk file name
-    // checking the key with and without the extension
-    data = [NSData dataWithContentsOfFile:[defaultPath stringByDeletingPathExtension]];
-    if (data) {
-        return data;
-    }
-
-    NSArray *customPaths = [self.customPaths copy];
-    for (NSString *path in customPaths) {
-        NSString *filePath = [self cachePathForKey:key inPath:path];
-        NSData *imageData = [NSData dataWithContentsOfFile:filePath];
-        if (imageData) {
-            return imageData;
-        }
-
-        // fallback because of https://github.com/rs/SDWebImage/pull/976 that added the extension to the disk file name
-        // checking the key with and without the extension
-        imageData = [NSData dataWithContentsOfFile:[filePath stringByDeletingPathExtension]];
-        if (imageData) {
-            return imageData;
-        }
-    }
-
-    return nil;
-}
-
-- (UIImage *)diskImageForKey:(NSString *)key {
-    NSData *data = [self diskImageDataBySearchingAllPathsForKey:key];
-    if (data) {
-        UIImage *image = [UIImage sd_imageWithData:data];
-        image = [self scaledImageForKey:key image:image];
-        if (self.shouldDecompressImages) {
-            image = [UIImage decodedImageWithImage:image];
-        }
-        return image;
-    }
-    else {
-        return nil;
-    }
-}
-
-- (UIImage *)scaledImageForKey:(NSString *)key image:(UIImage *)image {
-    return SDScaledImageForKey(key, image);
-}
-
-- (NSOperation *)queryDiskCacheForKey:(NSString *)key done:(SDWebImageQueryCompletedBlock)doneBlock {
-    if (!doneBlock) {
-        return nil;
-    }
-
-    if (!key) {
-        doneBlock(nil, SDImageCacheTypeNone);
-        return nil;
-    }
-
-    // First check the in-memory cache...
-    UIImage *image = [self imageFromMemoryCacheForKey:key];
-    if (image) {
-        doneBlock(image, SDImageCacheTypeMemory);
-        return nil;
-    }
-
-    NSOperation *operation = [NSOperation new];
-    dispatch_async(self.ioQueue, ^{
-        if (operation.isCancelled) {
-            return;
-        }
-
-        @autoreleasepool {
-            UIImage *diskImage = [self diskImageForKey:key];
-            if (diskImage && self.shouldCacheImagesInMemory) {
-                NSUInteger cost = SDCacheCostForImage(diskImage);
-                [self.memCache setObject:diskImage forKey:key cost:cost];
-            }
-
-            dispatch_async(dispatch_get_main_queue(), ^{
-                doneBlock(diskImage, SDImageCacheTypeDisk);
-            });
-        }
-    });
-
-    return operation;
-}
-
-- (void)removeImageForKey:(NSString *)key {
-    [self removeImageForKey:key withCompletion:nil];
-}
-
-- (void)removeImageForKey:(NSString *)key withCompletion:(SDWebImageNoParamsBlock)completion {
-    [self removeImageForKey:key fromDisk:YES withCompletion:completion];
-}
-
-- (void)removeImageForKey:(NSString *)key fromDisk:(BOOL)fromDisk {
-    [self removeImageForKey:key fromDisk:fromDisk withCompletion:nil];
-}
-
-- (void)removeImageForKey:(NSString *)key fromDisk:(BOOL)fromDisk withCompletion:(SDWebImageNoParamsBlock)completion {
-    
-    if (key == nil) {
-        return;
-    }
-
-    if (self.shouldCacheImagesInMemory) {
-        [self.memCache removeObjectForKey:key];
-    }
-
-    if (fromDisk) {
-        dispatch_async(self.ioQueue, ^{
-            [_fileManager removeItemAtPath:[self defaultCachePathForKey:key] error:nil];
-            
-            if (completion) {
-                dispatch_async(dispatch_get_main_queue(), ^{
-                    completion();
-                });
-            }
-        });
-    } else if (completion){
-        completion();
-    }
-    
-}
-
-- (void)setMaxMemoryCost:(NSUInteger)maxMemoryCost {
-    self.memCache.totalCostLimit = maxMemoryCost;
-}
-
-- (NSUInteger)maxMemoryCost {
-    return self.memCache.totalCostLimit;
-}
-
-- (NSUInteger)maxMemoryCountLimit {
-    return self.memCache.countLimit;
-}
-
-- (void)setMaxMemoryCountLimit:(NSUInteger)maxCountLimit {
-    self.memCache.countLimit = maxCountLimit;
-}
-
-- (void)clearMemory {
-    [self.memCache removeAllObjects];
-}
-
-- (void)clearDisk {
-    [self clearDiskOnCompletion:nil];
-}
-
-- (void)clearDiskOnCompletion:(SDWebImageNoParamsBlock)completion
-{
-    dispatch_async(self.ioQueue, ^{
-        [_fileManager removeItemAtPath:self.diskCachePath error:nil];
-        [_fileManager createDirectoryAtPath:self.diskCachePath
-                withIntermediateDirectories:YES
-                                 attributes:nil
-                                      error:NULL];
-
-        if (completion) {
-            dispatch_async(dispatch_get_main_queue(), ^{
-                completion();
-            });
-        }
-    });
-}
-
-- (void)cleanDisk {
-    [self cleanDiskWithCompletionBlock:nil];
-}
-
-- (void)cleanDiskWithCompletionBlock:(SDWebImageNoParamsBlock)completionBlock {
-    dispatch_async(self.ioQueue, ^{
-        NSURL *diskCacheURL = [NSURL fileURLWithPath:self.diskCachePath isDirectory:YES];
-        NSArray *resourceKeys = @[NSURLIsDirectoryKey, NSURLContentModificationDateKey, NSURLTotalFileAllocatedSizeKey];
-
-        // This enumerator prefetches useful properties for our cache files.
-        NSDirectoryEnumerator *fileEnumerator = [_fileManager enumeratorAtURL:diskCacheURL
-                                                   includingPropertiesForKeys:resourceKeys
-                                                                      options:NSDirectoryEnumerationSkipsHiddenFiles
-                                                                 errorHandler:NULL];
-
-        NSDate *expirationDate = [NSDate dateWithTimeIntervalSinceNow:-self.maxCacheAge];
-        NSMutableDictionary *cacheFiles = [NSMutableDictionary dictionary];
-        NSUInteger currentCacheSize = 0;
-
-        // Enumerate all of the files in the cache directory.  This loop has two purposes:
-        //
-        //  1. Removing files that are older than the expiration date.
-        //  2. Storing file attributes for the size-based cleanup pass.
-        NSMutableArray *urlsToDelete = [[NSMutableArray alloc] init];
-        for (NSURL *fileURL in fileEnumerator) {
-            NSDictionary *resourceValues = [fileURL resourceValuesForKeys:resourceKeys error:NULL];
-
-            // Skip directories.
-            if ([resourceValues[NSURLIsDirectoryKey] boolValue]) {
-                continue;
-            }
-
-            // Remove files that are older than the expiration date;
-            NSDate *modificationDate = resourceValues[NSURLContentModificationDateKey];
-            if ([[modificationDate laterDate:expirationDate] isEqualToDate:expirationDate]) {
-                [urlsToDelete addObject:fileURL];
-                continue;
-            }
-
-            // Store a reference to this file and account for its total size.
-            NSNumber *totalAllocatedSize = resourceValues[NSURLTotalFileAllocatedSizeKey];
-            currentCacheSize += [totalAllocatedSize unsignedIntegerValue];
-            [cacheFiles setObject:resourceValues forKey:fileURL];
-        }
-        
-        for (NSURL *fileURL in urlsToDelete) {
-            [_fileManager removeItemAtURL:fileURL error:nil];
-        }
-
-        // If our remaining disk cache exceeds a configured maximum size, perform a second
-        // size-based cleanup pass.  We delete the oldest files first.
-        if (self.maxCacheSize > 0 && currentCacheSize > self.maxCacheSize) {
-            // Target half of our maximum cache size for this cleanup pass.
-            const NSUInteger desiredCacheSize = self.maxCacheSize / 2;
-
-            // Sort the remaining cache files by their last modification time (oldest first).
-            NSArray *sortedFiles = [cacheFiles keysSortedByValueWithOptions:NSSortConcurrent
-                                                            usingComparator:^NSComparisonResult(id obj1, id obj2) {
-                                                                return [obj1[NSURLContentModificationDateKey] compare:obj2[NSURLContentModificationDateKey]];
-                                                            }];
-
-            // Delete files until we fall below our desired cache size.
-            for (NSURL *fileURL in sortedFiles) {
-                if ([_fileManager removeItemAtURL:fileURL error:nil]) {
-                    NSDictionary *resourceValues = cacheFiles[fileURL];
-                    NSNumber *totalAllocatedSize = resourceValues[NSURLTotalFileAllocatedSizeKey];
-                    currentCacheSize -= [totalAllocatedSize unsignedIntegerValue];
-
-                    if (currentCacheSize < desiredCacheSize) {
-                        break;
-                    }
-                }
-            }
-        }
-        if (completionBlock) {
-            dispatch_async(dispatch_get_main_queue(), ^{
-                completionBlock();
-            });
-        }
-    });
-}
-
-- (void)backgroundCleanDisk {
-    Class UIApplicationClass = NSClassFromString(@"UIApplication");
-    if(!UIApplicationClass || ![UIApplicationClass respondsToSelector:@selector(sharedApplication)]) {
-        return;
-    }
-    UIApplication *application = [UIApplication performSelector:@selector(sharedApplication)];
-    __block UIBackgroundTaskIdentifier bgTask = [application beginBackgroundTaskWithExpirationHandler:^{
-        // Clean up any unfinished task business by marking where you
-        // stopped or ending the task outright.
-        [application endBackgroundTask:bgTask];
-        bgTask = UIBackgroundTaskInvalid;
-    }];
-
-    // Start the long-running task and return immediately.
-    [self cleanDiskWithCompletionBlock:^{
-        [application endBackgroundTask:bgTask];
-        bgTask = UIBackgroundTaskInvalid;
-    }];
-}
-
-- (NSUInteger)getSize {
-    __block NSUInteger size = 0;
-    dispatch_sync(self.ioQueue, ^{
-        NSDirectoryEnumerator *fileEnumerator = [_fileManager enumeratorAtPath:self.diskCachePath];
-        for (NSString *fileName in fileEnumerator) {
-            NSString *filePath = [self.diskCachePath stringByAppendingPathComponent:fileName];
-            NSDictionary *attrs = [[NSFileManager defaultManager] attributesOfItemAtPath:filePath error:nil];
-            size += [attrs fileSize];
-        }
-    });
-    return size;
-}
-
-- (NSUInteger)getDiskCount {
-    __block NSUInteger count = 0;
-    dispatch_sync(self.ioQueue, ^{
-        NSDirectoryEnumerator *fileEnumerator = [_fileManager enumeratorAtPath:self.diskCachePath];
-        count = [[fileEnumerator allObjects] count];
-    });
-    return count;
-}
-
-- (void)calculateSizeWithCompletionBlock:(SDWebImageCalculateSizeBlock)completionBlock {
-    NSURL *diskCacheURL = [NSURL fileURLWithPath:self.diskCachePath isDirectory:YES];
-
-    dispatch_async(self.ioQueue, ^{
-        NSUInteger fileCount = 0;
-        NSUInteger totalSize = 0;
-
-        NSDirectoryEnumerator *fileEnumerator = [_fileManager enumeratorAtURL:diskCacheURL
-                                                   includingPropertiesForKeys:@[NSFileSize]
-                                                                      options:NSDirectoryEnumerationSkipsHiddenFiles
-                                                                 errorHandler:NULL];
-
-        for (NSURL *fileURL in fileEnumerator) {
-            NSNumber *fileSize;
-            [fileURL getResourceValue:&fileSize forKey:NSURLFileSizeKey error:NULL];
-            totalSize += [fileSize unsignedIntegerValue];
-            fileCount += 1;
-        }
-
-        if (completionBlock) {
-            dispatch_async(dispatch_get_main_queue(), ^{
-                completionBlock(fileCount, totalSize);
-            });
-        }
-    });
-}
-
-@end

+ 0 - 72
KulexiuForTeacher/Pods/SDWebImage/SDWebImage/SDWebImageCompat.h

@@ -1,72 +0,0 @@
-/*
- * This file is part of the SDWebImage package.
- * (c) Olivier Poitrey <rs@dailymotion.com>
- * (c) Jamie Pinkham
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-#import <TargetConditionals.h>
-
-#ifdef __OBJC_GC__
-#error SDWebImage does not support Objective-C Garbage Collection
-#endif
-
-#if __IPHONE_OS_VERSION_MIN_REQUIRED != 20000 && __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_5_0
-#error SDWebImage doesn't support Deployment Target version < 5.0
-#endif
-
-#if !TARGET_OS_IPHONE
-#import <AppKit/AppKit.h>
-#ifndef UIImage
-#define UIImage NSImage
-#endif
-#ifndef UIImageView
-#define UIImageView NSImageView
-#endif
-#else
-
-#import <UIKit/UIKit.h>
-
-#endif
-
-#ifndef NS_ENUM
-#define NS_ENUM(_type, _name) enum _name : _type _name; enum _name : _type
-#endif
-
-#ifndef NS_OPTIONS
-#define NS_OPTIONS(_type, _name) enum _name : _type _name; enum _name : _type
-#endif
-
-#if OS_OBJECT_USE_OBJC
-    #undef SDDispatchQueueRelease
-    #undef SDDispatchQueueSetterSementics
-    #define SDDispatchQueueRelease(q)
-    #define SDDispatchQueueSetterSementics strong
-#else
-#undef SDDispatchQueueRelease
-#undef SDDispatchQueueSetterSementics
-#define SDDispatchQueueRelease(q) (dispatch_release(q))
-#define SDDispatchQueueSetterSementics assign
-#endif
-
-extern UIImage *SDScaledImageForKey(NSString *key, UIImage *image);
-
-typedef void(^SDWebImageNoParamsBlock)();
-
-extern NSString *const SDWebImageErrorDomain;
-
-#define dispatch_main_sync_safe(block)\
-    if ([NSThread isMainThread]) {\
-        block();\
-    } else {\
-        dispatch_sync(dispatch_get_main_queue(), block);\
-    }
-
-#define dispatch_main_async_safe(block)\
-    if ([NSThread isMainThread]) {\
-        block();\
-    } else {\
-        dispatch_async(dispatch_get_main_queue(), block);\
-    }

+ 0 - 51
KulexiuForTeacher/Pods/SDWebImage/SDWebImage/SDWebImageCompat.m

@@ -1,51 +0,0 @@
-//
-//  SDWebImageCompat.m
-//  SDWebImage
-//
-//  Created by Olivier Poitrey on 11/12/12.
-//  Copyright (c) 2012 Dailymotion. All rights reserved.
-//
-
-#import "SDWebImageCompat.h"
-
-#if !__has_feature(objc_arc)
-#error SDWebImage is ARC only. Either turn on ARC for the project or use -fobjc-arc flag
-#endif
-
-inline UIImage *SDScaledImageForKey(NSString *key, UIImage *image) {
-    if (!image) {
-        return nil;
-    }
-    
-    if ([image.images count] > 0) {
-        NSMutableArray *scaledImages = [NSMutableArray array];
-
-        for (UIImage *tempImage in image.images) {
-            [scaledImages addObject:SDScaledImageForKey(key, tempImage)];
-        }
-
-        return [UIImage animatedImageWithImages:scaledImages duration:image.duration];
-    }
-    else {
-        if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)]) {
-            CGFloat scale = 1;
-            if (key.length >= 8) {
-                NSRange range = [key rangeOfString:@"@2x."];
-                if (range.location != NSNotFound) {
-                    scale = 2.0;
-                }
-                
-                range = [key rangeOfString:@"@3x."];
-                if (range.location != NSNotFound) {
-                    scale = 3.0;
-                }
-            }
-
-            UIImage *scaledImage = [[UIImage alloc] initWithCGImage:image.CGImage scale:scale orientation:image.imageOrientation];
-            image = scaledImage;
-        }
-        return image;
-    }
-}
-
-NSString *const SDWebImageErrorDomain = @"SDWebImageErrorDomain";

+ 0 - 18
KulexiuForTeacher/Pods/SDWebImage/SDWebImage/SDWebImageDecoder.h

@@ -1,18 +0,0 @@
-/*
- * This file is part of the SDWebImage package.
- * (c) Olivier Poitrey <rs@dailymotion.com>
- *
- * Created by james <https://github.com/mystcolor> on 9/28/11.
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-#import <Foundation/Foundation.h>
-#import "SDWebImageCompat.h"
-
-@interface UIImage (ForceDecode)
-
-+ (UIImage *)decodedImageWithImage:(UIImage *)image;
-
-@end

+ 0 - 92
KulexiuForTeacher/Pods/SDWebImage/SDWebImage/SDWebImageDecoder.m

@@ -1,92 +0,0 @@
-/*
- * This file is part of the SDWebImage package.
- * (c) Olivier Poitrey <rs@dailymotion.com>
- *
- * Created by james <https://github.com/mystcolor> on 9/28/11.
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-#import "SDWebImageDecoder.h"
-
-@implementation UIImage (ForceDecode)
-
-+ (UIImage *)decodedImageWithImage:(UIImage *)image {
-    // while downloading huge amount of images
-    // autorelease the bitmap context
-    // and all vars to help system to free memory
-    // when there are memory warning.
-    // on iOS7, do not forget to call
-    // [[SDImageCache sharedImageCache] clearMemory];
-    
-    if (image == nil) { // Prevent "CGBitmapContextCreateImage: invalid context 0x0" error
-        return nil;
-    }
-    
-    @autoreleasepool{
-        // do not decode animated images
-        if (image.images != nil) {
-            return image;
-        }
-        
-        CGImageRef imageRef = image.CGImage;
-        
-        CGImageAlphaInfo alpha = CGImageGetAlphaInfo(imageRef);
-        BOOL anyAlpha = (alpha == kCGImageAlphaFirst ||
-                         alpha == kCGImageAlphaLast ||
-                         alpha == kCGImageAlphaPremultipliedFirst ||
-                         alpha == kCGImageAlphaPremultipliedLast);
-        if (anyAlpha) {
-            return image;
-        }
-        
-        // current
-        CGColorSpaceModel imageColorSpaceModel = CGColorSpaceGetModel(CGImageGetColorSpace(imageRef));
-        CGColorSpaceRef colorspaceRef = CGImageGetColorSpace(imageRef);
-        
-        BOOL unsupportedColorSpace = (imageColorSpaceModel == kCGColorSpaceModelUnknown ||
-                                      imageColorSpaceModel == kCGColorSpaceModelMonochrome ||
-                                      imageColorSpaceModel == kCGColorSpaceModelCMYK ||
-                                      imageColorSpaceModel == kCGColorSpaceModelIndexed);
-        if (unsupportedColorSpace) {
-            colorspaceRef = CGColorSpaceCreateDeviceRGB();
-        }
-        
-        size_t width = CGImageGetWidth(imageRef);
-        size_t height = CGImageGetHeight(imageRef);
-        NSUInteger bytesPerPixel = 4;
-        NSUInteger bytesPerRow = bytesPerPixel * width;
-        NSUInteger bitsPerComponent = 8;
-
-
-        // kCGImageAlphaNone is not supported in CGBitmapContextCreate.
-        // Since the original image here has no alpha info, use kCGImageAlphaNoneSkipLast
-        // to create bitmap graphics contexts without alpha info.
-        CGContextRef context = CGBitmapContextCreate(NULL,
-                                                     width,
-                                                     height,
-                                                     bitsPerComponent,
-                                                     bytesPerRow,
-                                                     colorspaceRef,
-                                                     kCGBitmapByteOrderDefault|kCGImageAlphaNoneSkipLast);
-        
-        // Draw the image into the context and retrieve the new bitmap image without alpha
-        CGContextDrawImage(context, CGRectMake(0, 0, width, height), imageRef);
-        CGImageRef imageRefWithoutAlpha = CGBitmapContextCreateImage(context);
-        UIImage *imageWithoutAlpha = [UIImage imageWithCGImage:imageRefWithoutAlpha
-                                                         scale:image.scale
-                                                   orientation:image.imageOrientation];
-        
-        if (unsupportedColorSpace) {
-            CGColorSpaceRelease(colorspaceRef);
-        }
-        
-        CGContextRelease(context);
-        CGImageRelease(imageRefWithoutAlpha);
-        
-        return imageWithoutAlpha;
-    }
-}
-
-@end

+ 0 - 196
KulexiuForTeacher/Pods/SDWebImage/SDWebImage/SDWebImageDownloader.h

@@ -1,196 +0,0 @@
-/*
- * This file is part of the SDWebImage package.
- * (c) Olivier Poitrey <rs@dailymotion.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-#import <Foundation/Foundation.h>
-#import "SDWebImageCompat.h"
-#import "SDWebImageOperation.h"
-
-typedef NS_OPTIONS(NSUInteger, SDWebImageDownloaderOptions) {
-    SDWebImageDownloaderLowPriority = 1 << 0,
-    SDWebImageDownloaderProgressiveDownload = 1 << 1,
-
-    /**
-     * By default, request prevent the use of NSURLCache. With this flag, NSURLCache
-     * is used with default policies.
-     */
-    SDWebImageDownloaderUseNSURLCache = 1 << 2,
-
-    /**
-     * Call completion block with nil image/imageData if the image was read from NSURLCache
-     * (to be combined with `SDWebImageDownloaderUseNSURLCache`).
-     */
-
-    SDWebImageDownloaderIgnoreCachedResponse = 1 << 3,
-    /**
-     * In iOS 4+, continue the download of the image if the app goes to background. This is achieved by asking the system for
-     * extra time in background to let the request finish. If the background task expires the operation will be cancelled.
-     */
-
-    SDWebImageDownloaderContinueInBackground = 1 << 4,
-
-    /**
-     * Handles cookies stored in NSHTTPCookieStore by setting 
-     * NSMutableURLRequest.HTTPShouldHandleCookies = YES;
-     */
-    SDWebImageDownloaderHandleCookies = 1 << 5,
-
-    /**
-     * Enable to allow untrusted SSL certificates.
-     * Useful for testing purposes. Use with caution in production.
-     */
-    SDWebImageDownloaderAllowInvalidSSLCertificates = 1 << 6,
-
-    /**
-     * Put the image in the high priority queue.
-     */
-    SDWebImageDownloaderHighPriority = 1 << 7,
-};
-
-typedef NS_ENUM(NSInteger, SDWebImageDownloaderExecutionOrder) {
-    /**
-     * Default value. All download operations will execute in queue style (first-in-first-out).
-     */
-    SDWebImageDownloaderFIFOExecutionOrder,
-
-    /**
-     * All download operations will execute in stack style (last-in-first-out).
-     */
-    SDWebImageDownloaderLIFOExecutionOrder
-};
-
-extern NSString *const SDWebImageDownloadStartNotification;
-extern NSString *const SDWebImageDownloadStopNotification;
-
-typedef void(^SDWebImageDownloaderProgressBlock)(NSInteger receivedSize, NSInteger expectedSize);
-
-typedef void(^SDWebImageDownloaderCompletedBlock)(UIImage *image, NSData *data, NSError *error, BOOL finished);
-
-typedef NSDictionary *(^SDWebImageDownloaderHeadersFilterBlock)(NSURL *url, NSDictionary *headers);
-
-/**
- * Asynchronous downloader dedicated and optimized for image loading.
- */
-@interface SDWebImageDownloader : NSObject
-
-/**
- * Decompressing images that are downloaded and cached can improve performance but can consume lot of memory.
- * Defaults to YES. Set this to NO if you are experiencing a crash due to excessive memory consumption.
- */
-@property (assign, nonatomic) BOOL shouldDecompressImages;
-
-@property (assign, nonatomic) NSInteger maxConcurrentDownloads;
-
-/**
- * Shows the current amount of downloads that still need to be downloaded
- */
-@property (readonly, nonatomic) NSUInteger currentDownloadCount;
-
-
-/**
- *  The timeout value (in seconds) for the download operation. Default: 15.0.
- */
-@property (assign, nonatomic) NSTimeInterval downloadTimeout;
-
-
-/**
- * Changes download operations execution order. Default value is `SDWebImageDownloaderFIFOExecutionOrder`.
- */
-@property (assign, nonatomic) SDWebImageDownloaderExecutionOrder executionOrder;
-
-/**
- *  Singleton method, returns the shared instance
- *
- *  @return global shared instance of downloader class
- */
-+ (SDWebImageDownloader *)sharedDownloader;
-
-/**
- *  Set the default URL credential to be set for request operations.
- */
-@property (strong, nonatomic) NSURLCredential *urlCredential;
-
-/**
- * Set username
- */
-@property (strong, nonatomic) NSString *username;
-
-/**
- * Set password
- */
-@property (strong, nonatomic) NSString *password;
-
-/**
- * Set filter to pick headers for downloading image HTTP request.
- *
- * This block will be invoked for each downloading image request, returned
- * NSDictionary will be used as headers in corresponding HTTP request.
- */
-@property (nonatomic, copy) SDWebImageDownloaderHeadersFilterBlock headersFilter;
-
-/**
- * Set a value for a HTTP header to be appended to each download HTTP request.
- *
- * @param value The value for the header field. Use `nil` value to remove the header.
- * @param field The name of the header field to set.
- */
-- (void)setValue:(NSString *)value forHTTPHeaderField:(NSString *)field;
-
-/**
- * Returns the value of the specified HTTP header field.
- *
- * @return The value associated with the header field field, or `nil` if there is no corresponding header field.
- */
-- (NSString *)valueForHTTPHeaderField:(NSString *)field;
-
-/**
- * Sets a subclass of `SDWebImageDownloaderOperation` as the default
- * `NSOperation` to be used each time SDWebImage constructs a request
- * operation to download an image.
- *
- * @param operationClass The subclass of `SDWebImageDownloaderOperation` to set 
- *        as default. Passing `nil` will revert to `SDWebImageDownloaderOperation`.
- */
-- (void)setOperationClass:(Class)operationClass;
-
-/**
- * Creates a SDWebImageDownloader async downloader instance with a given URL
- *
- * The delegate will be informed when the image is finish downloaded or an error has happen.
- *
- * @see SDWebImageDownloaderDelegate
- *
- * @param url            The URL to the image to download
- * @param options        The options to be used for this download
- * @param progressBlock  A block called repeatedly while the image is downloading
- * @param completedBlock A block called once the download is completed.
- *                       If the download succeeded, the image parameter is set, in case of error,
- *                       error parameter is set with the error. The last parameter is always YES
- *                       if SDWebImageDownloaderProgressiveDownload isn't use. With the
- *                       SDWebImageDownloaderProgressiveDownload option, this block is called
- *                       repeatedly with the partial image object and the finished argument set to NO
- *                       before to be called a last time with the full image and finished argument
- *                       set to YES. In case of error, the finished argument is always YES.
- *
- * @return A cancellable SDWebImageOperation
- */
-- (id <SDWebImageOperation>)downloadImageWithURL:(NSURL *)url
-                                         options:(SDWebImageDownloaderOptions)options
-                                        progress:(SDWebImageDownloaderProgressBlock)progressBlock
-                                       completed:(SDWebImageDownloaderCompletedBlock)completedBlock;
-
-/**
- * Sets the download queue suspension state
- */
-- (void)setSuspended:(BOOL)suspended;
-
-/**
- * Cancels all download operations in the queue
- */
-- (void)cancelAllDownloads;
-
-@end

+ 0 - 318
KulexiuForTeacher/Pods/SDWebImage/SDWebImage/SDWebImageDownloader.m

@@ -1,318 +0,0 @@
-/*
- * This file is part of the SDWebImage package.
- * (c) Olivier Poitrey <rs@dailymotion.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-#import "SDWebImageDownloader.h"
-#import "SDWebImageDownloaderOperation.h"
-#import <ImageIO/ImageIO.h>
-
-static NSString *const kProgressCallbackKey = @"progress";
-static NSString *const kCompletedCallbackKey = @"completed";
-
-@interface SDWebImageDownloader () <NSURLSessionTaskDelegate, NSURLSessionDataDelegate>
-
-@property (strong, nonatomic) NSOperationQueue *downloadQueue;
-@property (weak, nonatomic) NSOperation *lastAddedOperation;
-@property (assign, nonatomic) Class operationClass;
-@property (strong, nonatomic) NSMutableDictionary *URLCallbacks;
-@property (strong, nonatomic) NSMutableDictionary *HTTPHeaders;
-// This queue is used to serialize the handling of the network responses of all the download operation in a single queue
-@property (SDDispatchQueueSetterSementics, nonatomic) dispatch_queue_t barrierQueue;
-
-// The session in which data tasks will run
-@property (strong, nonatomic) NSURLSession *session;
-
-@end
-
-@implementation SDWebImageDownloader
-
-+ (void)initialize {
-    // Bind SDNetworkActivityIndicator if available (download it here: http://github.com/rs/SDNetworkActivityIndicator )
-    // To use it, just add #import "SDNetworkActivityIndicator.h" in addition to the SDWebImage import
-    if (NSClassFromString(@"SDNetworkActivityIndicator")) {
-
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Warc-performSelector-leaks"
-        id activityIndicator = [NSClassFromString(@"SDNetworkActivityIndicator") performSelector:NSSelectorFromString(@"sharedActivityIndicator")];
-#pragma clang diagnostic pop
-
-        // Remove observer in case it was previously added.
-        [[NSNotificationCenter defaultCenter] removeObserver:activityIndicator name:SDWebImageDownloadStartNotification object:nil];
-        [[NSNotificationCenter defaultCenter] removeObserver:activityIndicator name:SDWebImageDownloadStopNotification object:nil];
-
-        [[NSNotificationCenter defaultCenter] addObserver:activityIndicator
-                                                 selector:NSSelectorFromString(@"startActivity")
-                                                     name:SDWebImageDownloadStartNotification object:nil];
-        [[NSNotificationCenter defaultCenter] addObserver:activityIndicator
-                                                 selector:NSSelectorFromString(@"stopActivity")
-                                                     name:SDWebImageDownloadStopNotification object:nil];
-    }
-}
-
-+ (SDWebImageDownloader *)sharedDownloader {
-    static dispatch_once_t once;
-    static id instance;
-    dispatch_once(&once, ^{
-        instance = [self new];
-    });
-    return instance;
-}
-
-- (id)init {
-    if ((self = [super init])) {
-        _operationClass = [SDWebImageDownloaderOperation class];
-        _shouldDecompressImages = YES;
-        _executionOrder = SDWebImageDownloaderFIFOExecutionOrder;
-        _downloadQueue = [NSOperationQueue new];
-        _downloadQueue.maxConcurrentOperationCount = 6;
-        _downloadQueue.name = @"com.hackemist.SDWebImageDownloader";
-        _URLCallbacks = [NSMutableDictionary new];
-#ifdef SD_WEBP
-        _HTTPHeaders = [@{@"Accept": @"image/webp,image/*;q=0.8"} mutableCopy];
-#else
-        _HTTPHeaders = [@{@"Accept": @"image/*;q=0.8"} mutableCopy];
-#endif
-        _barrierQueue = dispatch_queue_create("com.hackemist.SDWebImageDownloaderBarrierQueue", DISPATCH_QUEUE_CONCURRENT);
-        _downloadTimeout = 15.0;
-
-        NSURLSessionConfiguration *sessionConfig = [NSURLSessionConfiguration defaultSessionConfiguration];
-        sessionConfig.timeoutIntervalForRequest = _downloadTimeout;
-
-        /**
-         *  Create the session for this task
-         *  We send nil as delegate queue so that the session creates a serial operation queue for performing all delegate
-         *  method calls and completion handler calls.
-         */
-        self.session = [NSURLSession sessionWithConfiguration:sessionConfig
-                                                     delegate:self
-                                                delegateQueue:nil];
-    }
-    return self;
-}
-
-- (void)dealloc {
-    [self.session invalidateAndCancel];
-    self.session = nil;
-
-    [self.downloadQueue cancelAllOperations];
-    SDDispatchQueueRelease(_barrierQueue);
-}
-
-- (void)setValue:(NSString *)value forHTTPHeaderField:(NSString *)field {
-    if (value) {
-        self.HTTPHeaders[field] = value;
-    }
-    else {
-        [self.HTTPHeaders removeObjectForKey:field];
-    }
-}
-
-- (NSString *)valueForHTTPHeaderField:(NSString *)field {
-    return self.HTTPHeaders[field];
-}
-
-- (void)setMaxConcurrentDownloads:(NSInteger)maxConcurrentDownloads {
-    _downloadQueue.maxConcurrentOperationCount = maxConcurrentDownloads;
-}
-
-- (NSUInteger)currentDownloadCount {
-    return _downloadQueue.operationCount;
-}
-
-- (NSInteger)maxConcurrentDownloads {
-    return _downloadQueue.maxConcurrentOperationCount;
-}
-
-- (void)setOperationClass:(Class)operationClass {
-    _operationClass = operationClass ?: [SDWebImageDownloaderOperation class];
-}
-
-- (id <SDWebImageOperation>)downloadImageWithURL:(NSURL *)url options:(SDWebImageDownloaderOptions)options progress:(SDWebImageDownloaderProgressBlock)progressBlock completed:(SDWebImageDownloaderCompletedBlock)completedBlock {
-    __block SDWebImageDownloaderOperation *operation;
-    __weak __typeof(self)wself = self;
-
-    [self addProgressCallback:progressBlock completedBlock:completedBlock forURL:url createCallback:^{
-        NSTimeInterval timeoutInterval = wself.downloadTimeout;
-        if (timeoutInterval == 0.0) {
-            timeoutInterval = 15.0;
-        }
-
-        // In order to prevent from potential duplicate caching (NSURLCache + SDImageCache) we disable the cache for image requests if told otherwise
-        NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url cachePolicy:(options & SDWebImageDownloaderUseNSURLCache ? NSURLRequestUseProtocolCachePolicy : NSURLRequestReloadIgnoringLocalCacheData) timeoutInterval:timeoutInterval];
-        request.HTTPShouldHandleCookies = (options & SDWebImageDownloaderHandleCookies);
-        request.HTTPShouldUsePipelining = YES;
-        if (wself.headersFilter) {
-            request.allHTTPHeaderFields = wself.headersFilter(url, [wself.HTTPHeaders copy]);
-        }
-        else {
-            request.allHTTPHeaderFields = wself.HTTPHeaders;
-        }
-        operation = [[wself.operationClass alloc] initWithRequest:request
-                                                        inSession:self.session
-                                                          options:options
-                                                         progress:^(NSInteger receivedSize, NSInteger expectedSize) {
-                                                             SDWebImageDownloader *sself = wself;
-                                                             if (!sself) return;
-                                                             __block NSArray *callbacksForURL;
-                                                             dispatch_sync(sself.barrierQueue, ^{
-                                                                 callbacksForURL = [sself.URLCallbacks[url] copy];
-                                                             });
-                                                             for (NSDictionary *callbacks in callbacksForURL) {
-                                                                 dispatch_async(dispatch_get_main_queue(), ^{
-                                                                     SDWebImageDownloaderProgressBlock callback = callbacks[kProgressCallbackKey];
-                                                                     if (callback) callback(receivedSize, expectedSize);
-                                                                 });
-                                                             }
-                                                         }
-                                                        completed:^(UIImage *image, NSData *data, NSError *error, BOOL finished) {
-                                                            SDWebImageDownloader *sself = wself;
-                                                            if (!sself) return;
-                                                            __block NSArray *callbacksForURL;
-                                                            dispatch_barrier_sync(sself.barrierQueue, ^{
-                                                                callbacksForURL = [sself.URLCallbacks[url] copy];
-                                                                if (finished) {
-                                                                    [sself.URLCallbacks removeObjectForKey:url];
-                                                                }
-                                                            });
-                                                            for (NSDictionary *callbacks in callbacksForURL) {
-                                                                SDWebImageDownloaderCompletedBlock callback = callbacks[kCompletedCallbackKey];
-                                                                if (callback) callback(image, data, error, finished);
-                                                            }
-                                                        }
-                                                        cancelled:^{
-                                                            SDWebImageDownloader *sself = wself;
-                                                            if (!sself) return;
-                                                            dispatch_barrier_async(sself.barrierQueue, ^{
-                                                                [sself.URLCallbacks removeObjectForKey:url];
-                                                            });
-                                                        }];
-        operation.shouldDecompressImages = wself.shouldDecompressImages;
-        
-        if (wself.urlCredential) {
-            operation.credential = wself.urlCredential;
-        } else if (wself.username && wself.password) {
-            operation.credential = [NSURLCredential credentialWithUser:wself.username password:wself.password persistence:NSURLCredentialPersistenceForSession];
-        }
-        
-        if (options & SDWebImageDownloaderHighPriority) {
-            operation.queuePriority = NSOperationQueuePriorityHigh;
-        } else if (options & SDWebImageDownloaderLowPriority) {
-            operation.queuePriority = NSOperationQueuePriorityLow;
-        }
-
-        [wself.downloadQueue addOperation:operation];
-        if (wself.executionOrder == SDWebImageDownloaderLIFOExecutionOrder) {
-            // Emulate LIFO execution order by systematically adding new operations as last operation's dependency
-            [wself.lastAddedOperation addDependency:operation];
-            wself.lastAddedOperation = operation;
-        }
-    }];
-
-    return operation;
-}
-
-- (void)addProgressCallback:(SDWebImageDownloaderProgressBlock)progressBlock completedBlock:(SDWebImageDownloaderCompletedBlock)completedBlock forURL:(NSURL *)url createCallback:(SDWebImageNoParamsBlock)createCallback {
-    // The URL will be used as the key to the callbacks dictionary so it cannot be nil. If it is nil immediately call the completed block with no image or data.
-    if (url == nil) {
-        if (completedBlock != nil) {
-            completedBlock(nil, nil, nil, NO);
-        }
-        return;
-    }
-
-    dispatch_barrier_sync(self.barrierQueue, ^{
-        BOOL first = NO;
-        if (!self.URLCallbacks[url]) {
-            self.URLCallbacks[url] = [NSMutableArray new];
-            first = YES;
-        }
-
-        // Handle single download of simultaneous download request for the same URL
-        NSMutableArray *callbacksForURL = self.URLCallbacks[url];
-        NSMutableDictionary *callbacks = [NSMutableDictionary new];
-        if (progressBlock) callbacks[kProgressCallbackKey] = [progressBlock copy];
-        if (completedBlock) callbacks[kCompletedCallbackKey] = [completedBlock copy];
-        [callbacksForURL addObject:callbacks];
-        self.URLCallbacks[url] = callbacksForURL;
-
-        if (first) {
-            createCallback();
-        }
-    });
-}
-
-- (void)setSuspended:(BOOL)suspended {
-    [self.downloadQueue setSuspended:suspended];
-}
-
-- (void)cancelAllDownloads {
-    [self.downloadQueue cancelAllOperations];
-}
-
-#pragma mark Helper methods
-
-- (SDWebImageDownloaderOperation *)operationWithTask:(NSURLSessionTask *)task {
-    SDWebImageDownloaderOperation *returnOperation = nil;
-    for (SDWebImageDownloaderOperation *operation in self.downloadQueue.operations) {
-        if (operation.dataTask.taskIdentifier == task.taskIdentifier) {
-            returnOperation = operation;
-            break;
-        }
-    }
-    return returnOperation;
-}
-
-#pragma mark NSURLSessionDataDelegate
-
-- (void)URLSession:(NSURLSession *)session
-          dataTask:(NSURLSessionDataTask *)dataTask
-didReceiveResponse:(NSURLResponse *)response
- completionHandler:(void (^)(NSURLSessionResponseDisposition disposition))completionHandler {
-
-    // Identify the operation that runs this task and pass it the delegate method
-    SDWebImageDownloaderOperation *dataOperation = [self operationWithTask:dataTask];
-
-    [dataOperation URLSession:session dataTask:dataTask didReceiveResponse:response completionHandler:completionHandler];
-}
-
-- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveData:(NSData *)data {
-
-    // Identify the operation that runs this task and pass it the delegate method
-    SDWebImageDownloaderOperation *dataOperation = [self operationWithTask:dataTask];
-
-    [dataOperation URLSession:session dataTask:dataTask didReceiveData:data];
-}
-
-- (void)URLSession:(NSURLSession *)session
-          dataTask:(NSURLSessionDataTask *)dataTask
- willCacheResponse:(NSCachedURLResponse *)proposedResponse
- completionHandler:(void (^)(NSCachedURLResponse *cachedResponse))completionHandler {
-
-    // Identify the operation that runs this task and pass it the delegate method
-    SDWebImageDownloaderOperation *dataOperation = [self operationWithTask:dataTask];
-
-    [dataOperation URLSession:session dataTask:dataTask willCacheResponse:proposedResponse completionHandler:completionHandler];
-}
-
-#pragma mark NSURLSessionTaskDelegate
-
-- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error {
-    // Identify the operation that runs this task and pass it the delegate method
-    SDWebImageDownloaderOperation *dataOperation = [self operationWithTask:task];
-
-    [dataOperation URLSession:session task:task didCompleteWithError:error];
-}
-
-- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition disposition, NSURLCredential *credential))completionHandler {
-
-    // Identify the operation that runs this task and pass it the delegate method
-    SDWebImageDownloaderOperation *dataOperation = [self operationWithTask:task];
-
-    [dataOperation URLSession:session task:task didReceiveChallenge:challenge completionHandler:completionHandler];
-}
-
-@end

+ 0 - 106
KulexiuForTeacher/Pods/SDWebImage/SDWebImage/SDWebImageDownloaderOperation.h

@@ -1,106 +0,0 @@
-/*
- * This file is part of the SDWebImage package.
- * (c) Olivier Poitrey <rs@dailymotion.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-#import <Foundation/Foundation.h>
-#import "SDWebImageDownloader.h"
-#import "SDWebImageOperation.h"
-
-extern NSString *const SDWebImageDownloadStartNotification;
-extern NSString *const SDWebImageDownloadReceiveResponseNotification;
-extern NSString *const SDWebImageDownloadStopNotification;
-extern NSString *const SDWebImageDownloadFinishNotification;
-
-@interface SDWebImageDownloaderOperation : NSOperation <SDWebImageOperation, NSURLSessionTaskDelegate, NSURLSessionDataDelegate>
-
-/**
- * The request used by the operation's task.
- */
-@property (strong, nonatomic, readonly) NSURLRequest *request;
-
-/**
- * The operation's task
- */
-@property (strong, nonatomic, readonly) NSURLSessionTask *dataTask;
-
-
-@property (assign, nonatomic) BOOL shouldDecompressImages;
-
-/**
- *  Was used to determine whether the URL connection should consult the credential storage for authenticating the connection.
- *  @deprecated Not used for a couple of versions
- */
-@property (nonatomic, assign) BOOL shouldUseCredentialStorage __deprecated_msg("Property deprecated. Does nothing. Kept only for backwards compatibility");
-
-/**
- * The credential used for authentication challenges in `-connection:didReceiveAuthenticationChallenge:`.
- *
- * This will be overridden by any shared credentials that exist for the username or password of the request URL, if present.
- */
-@property (nonatomic, strong) NSURLCredential *credential;
-
-/**
- * The SDWebImageDownloaderOptions for the receiver.
- */
-@property (assign, nonatomic, readonly) SDWebImageDownloaderOptions options;
-
-/**
- * The expected size of data.
- */
-@property (assign, nonatomic) NSInteger expectedSize;
-
-/**
- * The response returned by the operation's connection.
- */
-@property (strong, nonatomic) NSURLResponse *response;
-
-/**
- *  Initializes a `SDWebImageDownloaderOperation` object
- *
- *  @see SDWebImageDownloaderOperation
- *
- *  @param request        the URL request
- *  @param session        the URL session in which this operation will run
- *  @param options        downloader options
- *  @param progressBlock  the block executed when a new chunk of data arrives. 
- *                        @note the progress block is executed on a background queue
- *  @param completedBlock the block executed when the download is done. 
- *                        @note the completed block is executed on the main queue for success. If errors are found, there is a chance the block will be executed on a background queue
- *  @param cancelBlock    the block executed if the download (operation) is cancelled
- *
- *  @return the initialized instance
- */
-- (id)initWithRequest:(NSURLRequest *)request
-            inSession:(NSURLSession *)session
-              options:(SDWebImageDownloaderOptions)options
-             progress:(SDWebImageDownloaderProgressBlock)progressBlock
-            completed:(SDWebImageDownloaderCompletedBlock)completedBlock
-            cancelled:(SDWebImageNoParamsBlock)cancelBlock;
-
-/**
- *  Initializes a `SDWebImageDownloaderOperation` object
- *
- *  @see SDWebImageDownloaderOperation
- *
- *  @param request        the URL request
- *  @param options        downloader options
- *  @param progressBlock  the block executed when a new chunk of data arrives.
- *                        @note the progress block is executed on a background queue
- *  @param completedBlock the block executed when the download is done.
- *                        @note the completed block is executed on the main queue for success. If errors are found, there is a chance the block will be executed on a background queue
- *  @param cancelBlock    the block executed if the download (operation) is cancelled
- *
- *  @return the initialized instance. The operation will run in a separate session created for this operation
- */
-- (id)initWithRequest:(NSURLRequest *)request
-              options:(SDWebImageDownloaderOptions)options
-             progress:(SDWebImageDownloaderProgressBlock)progressBlock
-            completed:(SDWebImageDownloaderCompletedBlock)completedBlock
-            cancelled:(SDWebImageNoParamsBlock)cancelBlock
-__deprecated_msg("Method deprecated. Use `initWithRequest:inSession:options:progress:completed:cancelled`");
-
-@end

+ 0 - 506
KulexiuForTeacher/Pods/SDWebImage/SDWebImage/SDWebImageDownloaderOperation.m

@@ -1,506 +0,0 @@
-/*
- * This file is part of the SDWebImage package.
- * (c) Olivier Poitrey <rs@dailymotion.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-#import "SDWebImageDownloaderOperation.h"
-#import "SDWebImageDecoder.h"
-#import "UIImage+MultiFormat.h"
-#import <ImageIO/ImageIO.h>
-#import "SDWebImageManager.h"
-
-NSString *const SDWebImageDownloadStartNotification = @"SDWebImageDownloadStartNotification";
-NSString *const SDWebImageDownloadReceiveResponseNotification = @"SDWebImageDownloadReceiveResponseNotification";
-NSString *const SDWebImageDownloadStopNotification = @"SDWebImageDownloadStopNotification";
-NSString *const SDWebImageDownloadFinishNotification = @"SDWebImageDownloadFinishNotification";
-
-@interface SDWebImageDownloaderOperation ()
-
-@property (copy, nonatomic) SDWebImageDownloaderProgressBlock progressBlock;
-@property (copy, nonatomic) SDWebImageDownloaderCompletedBlock completedBlock;
-@property (copy, nonatomic) SDWebImageNoParamsBlock cancelBlock;
-
-@property (assign, nonatomic, getter = isExecuting) BOOL executing;
-@property (assign, nonatomic, getter = isFinished) BOOL finished;
-@property (strong, nonatomic) NSMutableData *imageData;
-
-// This is weak because it is injected by whoever manages this session. If this gets nil-ed out, we won't be able to run
-// the task associated with this operation
-@property (weak, nonatomic) NSURLSession *unownedSession;
-// This is set if we're using not using an injected NSURLSession. We're responsible of invalidating this one
-@property (strong, nonatomic) NSURLSession *ownedSession;
-
-@property (strong, nonatomic, readwrite) NSURLSessionTask *dataTask;
-
-@property (strong, atomic) NSThread *thread;
-
-#if TARGET_OS_IPHONE && __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_4_0
-@property (assign, nonatomic) UIBackgroundTaskIdentifier backgroundTaskId;
-#endif
-
-@end
-
-@implementation SDWebImageDownloaderOperation {
-    size_t width, height;
-    UIImageOrientation orientation;
-    BOOL responseFromCached;
-}
-
-@synthesize executing = _executing;
-@synthesize finished = _finished;
-
-- (id)initWithRequest:(NSURLRequest *)request
-              options:(SDWebImageDownloaderOptions)options
-             progress:(SDWebImageDownloaderProgressBlock)progressBlock
-            completed:(SDWebImageDownloaderCompletedBlock)completedBlock
-            cancelled:(SDWebImageNoParamsBlock)cancelBlock {
-
-    return [self initWithRequest:request
-                       inSession:nil
-                         options:options
-                        progress:progressBlock
-                       completed:completedBlock
-                       cancelled:cancelBlock];
-}
-
-- (id)initWithRequest:(NSURLRequest *)request
-            inSession:(NSURLSession *)session
-              options:(SDWebImageDownloaderOptions)options
-             progress:(SDWebImageDownloaderProgressBlock)progressBlock
-            completed:(SDWebImageDownloaderCompletedBlock)completedBlock
-            cancelled:(SDWebImageNoParamsBlock)cancelBlock {
-    if ((self = [super init])) {
-        _request = [request copy];
-        _shouldDecompressImages = YES;
-        _options = options;
-        _progressBlock = [progressBlock copy];
-        _completedBlock = [completedBlock copy];
-        _cancelBlock = [cancelBlock copy];
-        _executing = NO;
-        _finished = NO;
-        _expectedSize = 0;
-        _unownedSession = session;
-        responseFromCached = YES; // Initially wrong until `- URLSession:dataTask:willCacheResponse:completionHandler: is called or not called
-    }
-    return self;
-}
-
-- (void)start {
-    @synchronized (self) {
-        if (self.isCancelled) {
-            self.finished = YES;
-            [self reset];
-            return;
-        }
-
-#if TARGET_OS_IPHONE && __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_4_0
-        Class UIApplicationClass = NSClassFromString(@"UIApplication");
-        BOOL hasApplication = UIApplicationClass && [UIApplicationClass respondsToSelector:@selector(sharedApplication)];
-        if (hasApplication && [self shouldContinueWhenAppEntersBackground]) {
-            __weak __typeof__ (self) wself = self;
-            UIApplication * app = [UIApplicationClass performSelector:@selector(sharedApplication)];
-            self.backgroundTaskId = [app beginBackgroundTaskWithExpirationHandler:^{
-                __strong __typeof (wself) sself = wself;
-
-                if (sself) {
-                    [sself cancel];
-
-                    [app endBackgroundTask:sself.backgroundTaskId];
-                    sself.backgroundTaskId = UIBackgroundTaskInvalid;
-                }
-            }];
-        }
-#endif
-        NSURLSession *session = self.unownedSession;
-        if (!self.unownedSession) {
-            NSURLSessionConfiguration *sessionConfig = [NSURLSessionConfiguration defaultSessionConfiguration];
-            sessionConfig.timeoutIntervalForRequest = 15;
-            
-            /**
-             *  Create the session for this task
-             *  We send nil as delegate queue so that the session creates a serial operation queue for performing all delegate
-             *  method calls and completion handler calls.
-             */
-            self.ownedSession = [NSURLSession sessionWithConfiguration:sessionConfig
-                                                              delegate:self
-                                                         delegateQueue:nil];
-            session = self.ownedSession;
-        }
-        
-        self.dataTask = [session dataTaskWithRequest:self.request];
-        self.executing = YES;
-        self.thread = [NSThread currentThread];
-    }
-    
-    [self.dataTask resume];
-
-    if (self.dataTask) {
-        if (self.progressBlock) {
-            self.progressBlock(0, NSURLResponseUnknownLength);
-        }
-        dispatch_async(dispatch_get_main_queue(), ^{
-            [[NSNotificationCenter defaultCenter] postNotificationName:SDWebImageDownloadStartNotification object:self];
-        });
-    }
-    else {
-        if (self.completedBlock) {
-            self.completedBlock(nil, nil, [NSError errorWithDomain:NSURLErrorDomain code:0 userInfo:@{NSLocalizedDescriptionKey : @"Connection can't be initialized"}], YES);
-        }
-    }
-
-#if TARGET_OS_IPHONE && __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_4_0
-    Class UIApplicationClass = NSClassFromString(@"UIApplication");
-    if(!UIApplicationClass || ![UIApplicationClass respondsToSelector:@selector(sharedApplication)]) {
-        return;
-    }
-    if (self.backgroundTaskId != UIBackgroundTaskInvalid) {
-        UIApplication * app = [UIApplication performSelector:@selector(sharedApplication)];
-        [app endBackgroundTask:self.backgroundTaskId];
-        self.backgroundTaskId = UIBackgroundTaskInvalid;
-    }
-#endif
-}
-
-- (void)cancel {
-    @synchronized (self) {
-        if (self.thread) {
-            [self performSelector:@selector(cancelInternalAndStop) onThread:self.thread withObject:nil waitUntilDone:NO];
-        }
-        else {
-            [self cancelInternal];
-        }
-    }
-}
-
-- (void)cancelInternalAndStop {
-    if (self.isFinished) return;
-    [self cancelInternal];
-}
-
-- (void)cancelInternal {
-    if (self.isFinished) return;
-    [super cancel];
-    if (self.cancelBlock) self.cancelBlock();
-
-    if (self.dataTask) {
-        [self.dataTask cancel];
-        dispatch_async(dispatch_get_main_queue(), ^{
-            [[NSNotificationCenter defaultCenter] postNotificationName:SDWebImageDownloadStopNotification object:self];
-        });
-
-        // As we cancelled the connection, its callback won't be called and thus won't
-        // maintain the isFinished and isExecuting flags.
-        if (self.isExecuting) self.executing = NO;
-        if (!self.isFinished) self.finished = YES;
-    }
-
-    [self reset];
-}
-
-- (void)done {
-    self.finished = YES;
-    self.executing = NO;
-    [self reset];
-}
-
-- (void)reset {
-    self.cancelBlock = nil;
-    self.completedBlock = nil;
-    self.progressBlock = nil;
-    self.dataTask = nil;
-    self.imageData = nil;
-    self.thread = nil;
-    if (self.ownedSession) {
-        [self.ownedSession invalidateAndCancel];
-        self.ownedSession = nil;
-    }
-}
-
-- (void)setFinished:(BOOL)finished {
-    [self willChangeValueForKey:@"isFinished"];
-    _finished = finished;
-    [self didChangeValueForKey:@"isFinished"];
-}
-
-- (void)setExecuting:(BOOL)executing {
-    [self willChangeValueForKey:@"isExecuting"];
-    _executing = executing;
-    [self didChangeValueForKey:@"isExecuting"];
-}
-
-- (BOOL)isConcurrent {
-    return YES;
-}
-
-#pragma mark NSURLSessionDataDelegate
-
-- (void)URLSession:(NSURLSession *)session
-          dataTask:(NSURLSessionDataTask *)dataTask
-didReceiveResponse:(NSURLResponse *)response
- completionHandler:(void (^)(NSURLSessionResponseDisposition disposition))completionHandler {
-    
-    //'304 Not Modified' is an exceptional one
-    if (![response respondsToSelector:@selector(statusCode)] || ([((NSHTTPURLResponse *)response) statusCode] < 400 && [((NSHTTPURLResponse *)response) statusCode] != 304)) {
-        NSInteger expected = response.expectedContentLength > 0 ? (NSInteger)response.expectedContentLength : 0;
-        self.expectedSize = expected;
-        if (self.progressBlock) {
-            self.progressBlock(0, expected);
-        }
-        
-        self.imageData = [[NSMutableData alloc] initWithCapacity:expected];
-        self.response = response;
-        dispatch_async(dispatch_get_main_queue(), ^{
-            [[NSNotificationCenter defaultCenter] postNotificationName:SDWebImageDownloadReceiveResponseNotification object:self];
-        });
-    }
-    else {
-        NSUInteger code = [((NSHTTPURLResponse *)response) statusCode];
-        
-        //This is the case when server returns '304 Not Modified'. It means that remote image is not changed.
-        //In case of 304 we need just cancel the operation and return cached image from the cache.
-        if (code == 304) {
-            [self cancelInternal];
-        } else {
-            [self.dataTask cancel];
-        }
-        dispatch_async(dispatch_get_main_queue(), ^{
-            [[NSNotificationCenter defaultCenter] postNotificationName:SDWebImageDownloadStopNotification object:self];
-        });
-        
-        if (self.completedBlock) {
-            self.completedBlock(nil, nil, [NSError errorWithDomain:NSURLErrorDomain code:[((NSHTTPURLResponse *)response) statusCode] userInfo:nil], YES);
-        }
-        [self done];
-    }
-    
-    if (completionHandler) {
-        completionHandler(NSURLSessionResponseAllow);
-    }
-}
-
-- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveData:(NSData *)data {
-    [self.imageData appendData:data];
-
-    if ((self.options & SDWebImageDownloaderProgressiveDownload) && self.expectedSize > 0 && self.completedBlock) {
-        // The following code is from http://www.cocoaintheshell.com/2011/05/progressive-images-download-imageio/
-        // Thanks to the author @Nyx0uf
-
-        // Get the total bytes downloaded
-        const NSInteger totalSize = self.imageData.length;
-
-        // Update the data source, we must pass ALL the data, not just the new bytes
-        CGImageSourceRef imageSource = CGImageSourceCreateWithData((__bridge CFDataRef)self.imageData, NULL);
-
-        if (width + height == 0) {
-            CFDictionaryRef properties = CGImageSourceCopyPropertiesAtIndex(imageSource, 0, NULL);
-            if (properties) {
-                NSInteger orientationValue = -1;
-                CFTypeRef val = CFDictionaryGetValue(properties, kCGImagePropertyPixelHeight);
-                if (val) CFNumberGetValue(val, kCFNumberLongType, &height);
-                val = CFDictionaryGetValue(properties, kCGImagePropertyPixelWidth);
-                if (val) CFNumberGetValue(val, kCFNumberLongType, &width);
-                val = CFDictionaryGetValue(properties, kCGImagePropertyOrientation);
-                if (val) CFNumberGetValue(val, kCFNumberNSIntegerType, &orientationValue);
-                CFRelease(properties);
-
-                // When we draw to Core Graphics, we lose orientation information,
-                // which means the image below born of initWithCGIImage will be
-                // oriented incorrectly sometimes. (Unlike the image born of initWithData
-                // in didCompleteWithError.) So save it here and pass it on later.
-                orientation = [[self class] orientationFromPropertyValue:(orientationValue == -1 ? 1 : orientationValue)];
-            }
-
-        }
-
-        if (width + height > 0 && totalSize < self.expectedSize) {
-            // Create the image
-            CGImageRef partialImageRef = CGImageSourceCreateImageAtIndex(imageSource, 0, NULL);
-
-#ifdef TARGET_OS_IPHONE
-            // Workaround for iOS anamorphic image
-            if (partialImageRef) {
-                const size_t partialHeight = CGImageGetHeight(partialImageRef);
-                CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
-                CGContextRef bmContext = CGBitmapContextCreate(NULL, width, height, 8, width * 4, colorSpace, kCGBitmapByteOrderDefault | kCGImageAlphaPremultipliedFirst);
-                CGColorSpaceRelease(colorSpace);
-                if (bmContext) {
-                    CGContextDrawImage(bmContext, (CGRect){.origin.x = 0.0f, .origin.y = 0.0f, .size.width = width, .size.height = partialHeight}, partialImageRef);
-                    CGImageRelease(partialImageRef);
-                    partialImageRef = CGBitmapContextCreateImage(bmContext);
-                    CGContextRelease(bmContext);
-                }
-                else {
-                    CGImageRelease(partialImageRef);
-                    partialImageRef = nil;
-                }
-            }
-#endif
-
-            if (partialImageRef) {
-                UIImage *image = [UIImage imageWithCGImage:partialImageRef scale:1 orientation:orientation];
-                NSString *key = [[SDWebImageManager sharedManager] cacheKeyForURL:self.request.URL];
-                UIImage *scaledImage = [self scaledImageForKey:key image:image];
-                if (self.shouldDecompressImages) {
-                    image = [UIImage decodedImageWithImage:scaledImage];
-                }
-                else {
-                    image = scaledImage;
-                }
-                CGImageRelease(partialImageRef);
-                dispatch_main_sync_safe(^{
-                    if (self.completedBlock) {
-                        self.completedBlock(image, nil, nil, NO);
-                    }
-                });
-            }
-        }
-
-        CFRelease(imageSource);
-    }
-
-    if (self.progressBlock) {
-        self.progressBlock(self.imageData.length, self.expectedSize);
-    }
-}
-
-- (void)URLSession:(NSURLSession *)session
-          dataTask:(NSURLSessionDataTask *)dataTask
- willCacheResponse:(NSCachedURLResponse *)proposedResponse
- completionHandler:(void (^)(NSCachedURLResponse *cachedResponse))completionHandler {
-
-    responseFromCached = NO; // If this method is called, it means the response wasn't read from cache
-    NSCachedURLResponse *cachedResponse = proposedResponse;
-
-    if (self.request.cachePolicy == NSURLRequestReloadIgnoringLocalCacheData) {
-        // Prevents caching of responses
-        cachedResponse = nil;
-    }
-    if (completionHandler) {
-        completionHandler(cachedResponse);
-    }
-}
-
-#pragma mark NSURLSessionTaskDelegate
-
-- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error {
-    @synchronized(self) {
-        self.thread = nil;
-        self.dataTask = nil;
-        dispatch_async(dispatch_get_main_queue(), ^{
-            [[NSNotificationCenter defaultCenter] postNotificationName:SDWebImageDownloadStopNotification object:self];
-            if (!error) {
-                [[NSNotificationCenter defaultCenter] postNotificationName:SDWebImageDownloadFinishNotification object:self];
-            }
-        });
-    }
-    
-    if (error) {
-        if (self.completedBlock) {
-            self.completedBlock(nil, nil, error, YES);
-        }
-    } else {
-        SDWebImageDownloaderCompletedBlock completionBlock = self.completedBlock;
-        
-        if (completionBlock) {
-            /**
-             *  See #1608 and #1623 - apparently, there is a race condition on `NSURLCache` that causes a crash
-             *  Limited the calls to `cachedResponseForRequest:` only for cases where we should ignore the cached response
-             *    and images for which responseFromCached is YES (only the ones that cannot be cached).
-             *  Note: responseFromCached is set to NO inside `willCacheResponse:`. This method doesn't get called for large images or images behind authentication 
-             */
-            if (self.options & SDWebImageDownloaderIgnoreCachedResponse && responseFromCached && [[NSURLCache sharedURLCache] cachedResponseForRequest:self.request]) {
-                completionBlock(nil, nil, nil, YES);
-            } else if (self.imageData) {
-                UIImage *image = [UIImage sd_imageWithData:self.imageData];
-                NSString *key = [[SDWebImageManager sharedManager] cacheKeyForURL:self.request.URL];
-                image = [self scaledImageForKey:key image:image];
-                
-                // Do not force decoding animated GIFs
-                if (!image.images) {
-                    if (self.shouldDecompressImages) {
-                        image = [UIImage decodedImageWithImage:image];
-                    }
-                }
-                if (CGSizeEqualToSize(image.size, CGSizeZero)) {
-                    completionBlock(nil, nil, [NSError errorWithDomain:SDWebImageErrorDomain code:0 userInfo:@{NSLocalizedDescriptionKey : @"Downloaded image has 0 pixels"}], YES);
-                }
-                else {
-                    completionBlock(image, self.imageData, nil, YES);
-                }
-            } else {
-                completionBlock(nil, nil, [NSError errorWithDomain:SDWebImageErrorDomain code:0 userInfo:@{NSLocalizedDescriptionKey : @"Image data is nil"}], YES);
-            }
-        }
-    }
-    
-    self.completionBlock = nil;
-    [self done];
-}
-
-- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition disposition, NSURLCredential *credential))completionHandler {
-    
-    NSURLSessionAuthChallengeDisposition disposition = NSURLSessionAuthChallengePerformDefaultHandling;
-    __block NSURLCredential *credential = nil;
-    
-    if ([challenge.protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust]) {
-        if (!(self.options & SDWebImageDownloaderAllowInvalidSSLCertificates)) {
-            disposition = NSURLSessionAuthChallengePerformDefaultHandling;
-        } else {
-            credential = [NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust];
-            disposition = NSURLSessionAuthChallengeUseCredential;
-        }
-    } else {
-        if ([challenge previousFailureCount] == 0) {
-            if (self.credential) {
-                credential = self.credential;
-                disposition = NSURLSessionAuthChallengeUseCredential;
-            } else {
-                disposition = NSURLSessionAuthChallengeCancelAuthenticationChallenge;
-            }
-        } else {
-            disposition = NSURLSessionAuthChallengeCancelAuthenticationChallenge;
-        }
-    }
-    
-    if (completionHandler) {
-        completionHandler(disposition, credential);
-    }
-}
-
-#pragma mark Helper methods
-
-+ (UIImageOrientation)orientationFromPropertyValue:(NSInteger)value {
-    switch (value) {
-        case 1:
-            return UIImageOrientationUp;
-        case 3:
-            return UIImageOrientationDown;
-        case 8:
-            return UIImageOrientationLeft;
-        case 6:
-            return UIImageOrientationRight;
-        case 2:
-            return UIImageOrientationUpMirrored;
-        case 4:
-            return UIImageOrientationDownMirrored;
-        case 5:
-            return UIImageOrientationLeftMirrored;
-        case 7:
-            return UIImageOrientationRightMirrored;
-        default:
-            return UIImageOrientationUp;
-    }
-}
-
-- (UIImage *)scaledImageForKey:(NSString *)key image:(UIImage *)image {
-    return SDScaledImageForKey(key, image);
-}
-
-- (BOOL)shouldContinueWhenAppEntersBackground {
-    return self.options & SDWebImageDownloaderContinueInBackground;
-}
-
-@end

+ 0 - 304
KulexiuForTeacher/Pods/SDWebImage/SDWebImage/SDWebImageManager.h

@@ -1,304 +0,0 @@
-/*
- * This file is part of the SDWebImage package.
- * (c) Olivier Poitrey <rs@dailymotion.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-#import "SDWebImageCompat.h"
-#import "SDWebImageOperation.h"
-#import "SDWebImageDownloader.h"
-#import "SDImageCache.h"
-
-typedef NS_OPTIONS(NSUInteger, SDWebImageOptions) {
-    /**
-     * By default, when a URL fail to be downloaded, the URL is blacklisted so the library won't keep trying.
-     * This flag disable this blacklisting.
-     */
-    SDWebImageRetryFailed = 1 << 0,
-
-    /**
-     * By default, image downloads are started during UI interactions, this flags disable this feature,
-     * leading to delayed download on UIScrollView deceleration for instance.
-     */
-    SDWebImageLowPriority = 1 << 1,
-
-    /**
-     * This flag disables on-disk caching
-     */
-    SDWebImageCacheMemoryOnly = 1 << 2,
-
-    /**
-     * This flag enables progressive download, the image is displayed progressively during download as a browser would do.
-     * By default, the image is only displayed once completely downloaded.
-     */
-    SDWebImageProgressiveDownload = 1 << 3,
-
-    /**
-     * Even if the image is cached, respect the HTTP response cache control, and refresh the image from remote location if needed.
-     * The disk caching will be handled by NSURLCache instead of SDWebImage leading to slight performance degradation.
-     * This option helps deal with images changing behind the same request URL, e.g. Facebook graph api profile pics.
-     * If a cached image is refreshed, the completion block is called once with the cached image and again with the final image.
-     *
-     * Use this flag only if you can't make your URLs static with embedded cache busting parameter.
-     */
-    SDWebImageRefreshCached = 1 << 4,
-
-    /**
-     * In iOS 4+, continue the download of the image if the app goes to background. This is achieved by asking the system for
-     * extra time in background to let the request finish. If the background task expires the operation will be cancelled.
-     */
-    SDWebImageContinueInBackground = 1 << 5,
-
-    /**
-     * Handles cookies stored in NSHTTPCookieStore by setting
-     * NSMutableURLRequest.HTTPShouldHandleCookies = YES;
-     */
-    SDWebImageHandleCookies = 1 << 6,
-
-    /**
-     * Enable to allow untrusted SSL certificates.
-     * Useful for testing purposes. Use with caution in production.
-     */
-    SDWebImageAllowInvalidSSLCertificates = 1 << 7,
-
-    /**
-     * By default, images are loaded in the order in which they were queued. This flag moves them to
-     * the front of the queue.
-     */
-    SDWebImageHighPriority = 1 << 8,
-    
-    /**
-     * By default, placeholder images are loaded while the image is loading. This flag will delay the loading
-     * of the placeholder image until after the image has finished loading.
-     */
-    SDWebImageDelayPlaceholder = 1 << 9,
-
-    /**
-     * We usually don't call transformDownloadedImage delegate method on animated images,
-     * as most transformation code would mangle it.
-     * Use this flag to transform them anyway.
-     */
-    SDWebImageTransformAnimatedImage = 1 << 10,
-    
-    /**
-     * By default, image is added to the imageView after download. But in some cases, we want to
-     * have the hand before setting the image (apply a filter or add it with cross-fade animation for instance)
-     * Use this flag if you want to manually set the image in the completion when success
-     */
-    SDWebImageAvoidAutoSetImage = 1 << 11
-};
-
-typedef void(^SDWebImageCompletionBlock)(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL);
-
-typedef void(^SDWebImageCompletionWithFinishedBlock)(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL);
-
-typedef NSString *(^SDWebImageCacheKeyFilterBlock)(NSURL *url);
-
-
-@class SDWebImageManager;
-
-@protocol SDWebImageManagerDelegate <NSObject>
-
-@optional
-
-/**
- * Controls which image should be downloaded when the image is not found in the cache.
- *
- * @param imageManager The current `SDWebImageManager`
- * @param imageURL     The url of the image to be downloaded
- *
- * @return Return NO to prevent the downloading of the image on cache misses. If not implemented, YES is implied.
- */
-- (BOOL)imageManager:(SDWebImageManager *)imageManager shouldDownloadImageForURL:(NSURL *)imageURL;
-
-/**
- * Allows to transform the image immediately after it has been downloaded and just before to cache it on disk and memory.
- * NOTE: This method is called from a global queue in order to not to block the main thread.
- *
- * @param imageManager The current `SDWebImageManager`
- * @param image        The image to transform
- * @param imageURL     The url of the image to transform
- *
- * @return The transformed image object.
- */
-- (UIImage *)imageManager:(SDWebImageManager *)imageManager transformDownloadedImage:(UIImage *)image withURL:(NSURL *)imageURL;
-
-@end
-
-/**
- * The SDWebImageManager is the class behind the UIImageView+WebCache category and likes.
- * It ties the asynchronous downloader (SDWebImageDownloader) with the image cache store (SDImageCache).
- * You can use this class directly to benefit from web image downloading with caching in another context than
- * a UIView.
- *
- * Here is a simple example of how to use SDWebImageManager:
- *
- * @code
-
-SDWebImageManager *manager = [SDWebImageManager sharedManager];
-[manager downloadImageWithURL:imageURL
-                      options:0
-                     progress:nil
-                    completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) {
-                        if (image) {
-                            // do something with image
-                        }
-                    }];
-
- * @endcode
- */
-@interface SDWebImageManager : NSObject
-
-@property (weak, nonatomic) id <SDWebImageManagerDelegate> delegate;
-
-@property (strong, nonatomic, readonly) SDImageCache *imageCache;
-@property (strong, nonatomic, readonly) SDWebImageDownloader *imageDownloader;
-
-/**
- * The cache filter is a block used each time SDWebImageManager need to convert an URL into a cache key. This can
- * be used to remove dynamic part of an image URL.
- *
- * The following example sets a filter in the application delegate that will remove any query-string from the
- * URL before to use it as a cache key:
- *
- * @code
-
-[[SDWebImageManager sharedManager] setCacheKeyFilter:^(NSURL *url) {
-    url = [[NSURL alloc] initWithScheme:url.scheme host:url.host path:url.path];
-    return [url absoluteString];
-}];
-
- * @endcode
- */
-@property (nonatomic, copy) SDWebImageCacheKeyFilterBlock cacheKeyFilter;
-
-/**
- * Returns global SDWebImageManager instance.
- *
- * @return SDWebImageManager shared instance
- */
-+ (SDWebImageManager *)sharedManager;
-
-/**
- * Allows to specify instance of cache and image downloader used with image manager.
- * @return new instance of `SDWebImageManager` with specified cache and downloader.
- */
-- (instancetype)initWithCache:(SDImageCache *)cache downloader:(SDWebImageDownloader *)downloader;
-
-/**
- * Downloads the image at the given URL if not present in cache or return the cached version otherwise.
- *
- * @param url            The URL to the image
- * @param options        A mask to specify options to use for this request
- * @param progressBlock  A block called while image is downloading
- * @param completedBlock A block called when operation has been completed.
- *
- *   This parameter is required.
- * 
- *   This block has no return value and takes the requested UIImage as first parameter.
- *   In case of error the image parameter is nil and the second parameter may contain an NSError.
- *
- *   The third parameter is an `SDImageCacheType` enum indicating if the image was retrieved from the local cache
- *   or from the memory cache or from the network.
- *
- *   The last parameter is set to NO when the SDWebImageProgressiveDownload option is used and the image is 
- *   downloading. This block is thus called repeatedly with a partial image. When image is fully downloaded, the
- *   block is called a last time with the full image and the last parameter set to YES.
- *
- * @return Returns an NSObject conforming to SDWebImageOperation. Should be an instance of SDWebImageDownloaderOperation
- */
-- (id <SDWebImageOperation>)downloadImageWithURL:(NSURL *)url
-                                         options:(SDWebImageOptions)options
-                                        progress:(SDWebImageDownloaderProgressBlock)progressBlock
-                                       completed:(SDWebImageCompletionWithFinishedBlock)completedBlock;
-
-/**
- * Saves image to cache for given URL
- *
- * @param image The image to cache
- * @param url   The URL to the image
- *
- */
-
-- (void)saveImageToCache:(UIImage *)image forURL:(NSURL *)url;
-
-/**
- * Cancel all current operations
- */
-- (void)cancelAll;
-
-/**
- * Check one or more operations running
- */
-- (BOOL)isRunning;
-
-/**
- *  Check if image has already been cached
- *
- *  @param url image url
- *
- *  @return if the image was already cached
- */
-- (BOOL)cachedImageExistsForURL:(NSURL *)url;
-
-/**
- *  Check if image has already been cached on disk only
- *
- *  @param url image url
- *
- *  @return if the image was already cached (disk only)
- */
-- (BOOL)diskImageExistsForURL:(NSURL *)url;
-
-/**
- *  Async check if image has already been cached
- *
- *  @param url              image url
- *  @param completionBlock  the block to be executed when the check is finished
- *  
- *  @note the completion block is always executed on the main queue
- */
-- (void)cachedImageExistsForURL:(NSURL *)url
-                     completion:(SDWebImageCheckCacheCompletionBlock)completionBlock;
-
-/**
- *  Async check if image has already been cached on disk only
- *
- *  @param url              image url
- *  @param completionBlock  the block to be executed when the check is finished
- *
- *  @note the completion block is always executed on the main queue
- */
-- (void)diskImageExistsForURL:(NSURL *)url
-                   completion:(SDWebImageCheckCacheCompletionBlock)completionBlock;
-
-
-/**
- *Return the cache key for a given URL
- */
-- (NSString *)cacheKeyForURL:(NSURL *)url;
-
-@end
-
-
-#pragma mark - Deprecated
-
-typedef void(^SDWebImageCompletedBlock)(UIImage *image, NSError *error, SDImageCacheType cacheType) __deprecated_msg("Block type deprecated. Use `SDWebImageCompletionBlock`");
-typedef void(^SDWebImageCompletedWithFinishedBlock)(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished) __deprecated_msg("Block type deprecated. Use `SDWebImageCompletionWithFinishedBlock`");
-
-
-@interface SDWebImageManager (Deprecated)
-
-/**
- *  Downloads the image at the given URL if not present in cache or return the cached version otherwise.
- *
- *  @deprecated This method has been deprecated. Use `downloadImageWithURL:options:progress:completed:`
- */
-- (id <SDWebImageOperation>)downloadWithURL:(NSURL *)url
-                                    options:(SDWebImageOptions)options
-                                   progress:(SDWebImageDownloaderProgressBlock)progressBlock
-                                  completed:(SDWebImageCompletedWithFinishedBlock)completedBlock __deprecated_msg("Method deprecated. Use `downloadImageWithURL:options:progress:completed:`");
-
-@end

+ 0 - 375
KulexiuForTeacher/Pods/SDWebImage/SDWebImage/SDWebImageManager.m

@@ -1,375 +0,0 @@
-/*
- * This file is part of the SDWebImage package.
- * (c) Olivier Poitrey <rs@dailymotion.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-#import "SDWebImageManager.h"
-#import <objc/message.h>
-
-@interface SDWebImageCombinedOperation : NSObject <SDWebImageOperation>
-
-@property (assign, nonatomic, getter = isCancelled) BOOL cancelled;
-@property (copy, nonatomic) SDWebImageNoParamsBlock cancelBlock;
-@property (strong, nonatomic) NSOperation *cacheOperation;
-
-@end
-
-@interface SDWebImageManager ()
-
-@property (strong, nonatomic, readwrite) SDImageCache *imageCache;
-@property (strong, nonatomic, readwrite) SDWebImageDownloader *imageDownloader;
-@property (strong, nonatomic) NSMutableSet *failedURLs;
-@property (strong, nonatomic) NSMutableArray *runningOperations;
-
-@end
-
-@implementation SDWebImageManager
-
-+ (id)sharedManager {
-    static dispatch_once_t once;
-    static id instance;
-    dispatch_once(&once, ^{
-        instance = [self new];
-    });
-    return instance;
-}
-
-- (instancetype)init {
-    SDImageCache *cache = [SDImageCache sharedImageCache];
-    SDWebImageDownloader *downloader = [SDWebImageDownloader sharedDownloader];
-    return [self initWithCache:cache downloader:downloader];
-}
-
-- (instancetype)initWithCache:(SDImageCache *)cache downloader:(SDWebImageDownloader *)downloader {
-    if ((self = [super init])) {
-        _imageCache = cache;
-        _imageDownloader = downloader;
-        _failedURLs = [NSMutableSet new];
-        _runningOperations = [NSMutableArray new];
-    }
-    return self;
-}
-
-- (NSString *)cacheKeyForURL:(NSURL *)url {
-    if (!url) {
-        return @"";
-    }
-    
-    if (self.cacheKeyFilter) {
-        return self.cacheKeyFilter(url);
-    } else {
-        return [url absoluteString];
-    }
-}
-
-- (BOOL)cachedImageExistsForURL:(NSURL *)url {
-    NSString *key = [self cacheKeyForURL:url];
-    if ([self.imageCache imageFromMemoryCacheForKey:key] != nil) return YES;
-    return [self.imageCache diskImageExistsWithKey:key];
-}
-
-- (BOOL)diskImageExistsForURL:(NSURL *)url {
-    NSString *key = [self cacheKeyForURL:url];
-    return [self.imageCache diskImageExistsWithKey:key];
-}
-
-- (void)cachedImageExistsForURL:(NSURL *)url
-                     completion:(SDWebImageCheckCacheCompletionBlock)completionBlock {
-    NSString *key = [self cacheKeyForURL:url];
-    
-    BOOL isInMemoryCache = ([self.imageCache imageFromMemoryCacheForKey:key] != nil);
-    
-    if (isInMemoryCache) {
-        // making sure we call the completion block on the main queue
-        dispatch_async(dispatch_get_main_queue(), ^{
-            if (completionBlock) {
-                completionBlock(YES);
-            }
-        });
-        return;
-    }
-    
-    [self.imageCache diskImageExistsWithKey:key completion:^(BOOL isInDiskCache) {
-        // the completion block of checkDiskCacheForImageWithKey:completion: is always called on the main queue, no need to further dispatch
-        if (completionBlock) {
-            completionBlock(isInDiskCache);
-        }
-    }];
-}
-
-- (void)diskImageExistsForURL:(NSURL *)url
-                   completion:(SDWebImageCheckCacheCompletionBlock)completionBlock {
-    NSString *key = [self cacheKeyForURL:url];
-    
-    [self.imageCache diskImageExistsWithKey:key completion:^(BOOL isInDiskCache) {
-        // the completion block of checkDiskCacheForImageWithKey:completion: is always called on the main queue, no need to further dispatch
-        if (completionBlock) {
-            completionBlock(isInDiskCache);
-        }
-    }];
-}
-
-- (id <SDWebImageOperation>)downloadImageWithURL:(NSURL *)url
-                                         options:(SDWebImageOptions)options
-                                        progress:(SDWebImageDownloaderProgressBlock)progressBlock
-                                       completed:(SDWebImageCompletionWithFinishedBlock)completedBlock {
-    // Invoking this method without a completedBlock is pointless
-    NSAssert(completedBlock != nil, @"If you mean to prefetch the image, use -[SDWebImagePrefetcher prefetchURLs] instead");
-
-    // Very common mistake is to send the URL using NSString object instead of NSURL. For some strange reason, XCode won't
-    // throw any warning for this type mismatch. Here we failsafe this error by allowing URLs to be passed as NSString.
-    if ([url isKindOfClass:NSString.class]) {
-        url = [NSURL URLWithString:(NSString *)url];
-    }
-
-    // Prevents app crashing on argument type error like sending NSNull instead of NSURL
-    if (![url isKindOfClass:NSURL.class]) {
-        url = nil;
-    }
-
-    __block SDWebImageCombinedOperation *operation = [SDWebImageCombinedOperation new];
-    __weak SDWebImageCombinedOperation *weakOperation = operation;
-
-    BOOL isFailedUrl = NO;
-    @synchronized (self.failedURLs) {
-        isFailedUrl = [self.failedURLs containsObject:url];
-    }
-
-    if (url.absoluteString.length == 0 || (!(options & SDWebImageRetryFailed) && isFailedUrl)) {
-        dispatch_main_sync_safe(^{
-            NSError *error = [NSError errorWithDomain:NSURLErrorDomain code:NSURLErrorFileDoesNotExist userInfo:nil];
-            completedBlock(nil, error, SDImageCacheTypeNone, YES, url);
-        });
-        return operation;
-    }
-
-    @synchronized (self.runningOperations) {
-        [self.runningOperations addObject:operation];
-    }
-    NSString *key = [self cacheKeyForURL:url];
-
-    operation.cacheOperation = [self.imageCache queryDiskCacheForKey:key done:^(UIImage *image, SDImageCacheType cacheType) {
-        if (operation.isCancelled) {
-            @synchronized (self.runningOperations) {
-                [self.runningOperations removeObject:operation];
-            }
-
-            return;
-        }
-
-        if ((!image || options & SDWebImageRefreshCached) && (![self.delegate respondsToSelector:@selector(imageManager:shouldDownloadImageForURL:)] || [self.delegate imageManager:self shouldDownloadImageForURL:url])) {
-            if (image && options & SDWebImageRefreshCached) {
-                dispatch_main_sync_safe(^{
-                    // If image was found in the cache but SDWebImageRefreshCached is provided, notify about the cached image
-                    // AND try to re-download it in order to let a chance to NSURLCache to refresh it from server.
-                    completedBlock(image, nil, cacheType, YES, url);
-                });
-            }
-
-            // download if no image or requested to refresh anyway, and download allowed by delegate
-            SDWebImageDownloaderOptions downloaderOptions = 0;
-            if (options & SDWebImageLowPriority) downloaderOptions |= SDWebImageDownloaderLowPriority;
-            if (options & SDWebImageProgressiveDownload) downloaderOptions |= SDWebImageDownloaderProgressiveDownload;
-            if (options & SDWebImageRefreshCached) downloaderOptions |= SDWebImageDownloaderUseNSURLCache;
-            if (options & SDWebImageContinueInBackground) downloaderOptions |= SDWebImageDownloaderContinueInBackground;
-            if (options & SDWebImageHandleCookies) downloaderOptions |= SDWebImageDownloaderHandleCookies;
-            if (options & SDWebImageAllowInvalidSSLCertificates) downloaderOptions |= SDWebImageDownloaderAllowInvalidSSLCertificates;
-            if (options & SDWebImageHighPriority) downloaderOptions |= SDWebImageDownloaderHighPriority;
-            if (image && options & SDWebImageRefreshCached) {
-                // force progressive off if image already cached but forced refreshing
-                downloaderOptions &= ~SDWebImageDownloaderProgressiveDownload;
-                // ignore image read from NSURLCache if image if cached but force refreshing
-                downloaderOptions |= SDWebImageDownloaderIgnoreCachedResponse;
-            }
-            id <SDWebImageOperation> subOperation = [self.imageDownloader downloadImageWithURL:url options:downloaderOptions progress:progressBlock completed:^(UIImage *downloadedImage, NSData *data, NSError *error, BOOL finished) {
-                __strong __typeof(weakOperation) strongOperation = weakOperation;
-                if (!strongOperation || strongOperation.isCancelled) {
-                    // Do nothing if the operation was cancelled
-                    // See #699 for more details
-                    // if we would call the completedBlock, there could be a race condition between this block and another completedBlock for the same object, so if this one is called second, we will overwrite the new data
-                }
-                else if (error) {
-                    dispatch_main_sync_safe(^{
-                        if (strongOperation && !strongOperation.isCancelled) {
-                            completedBlock(nil, error, SDImageCacheTypeNone, finished, url);
-                        }
-                    });
-
-                    if (   error.code != NSURLErrorNotConnectedToInternet
-                        && error.code != NSURLErrorCancelled
-                        && error.code != NSURLErrorTimedOut
-                        && error.code != NSURLErrorInternationalRoamingOff
-                        && error.code != NSURLErrorDataNotAllowed
-                        && error.code != NSURLErrorCannotFindHost
-                        && error.code != NSURLErrorCannotConnectToHost) {
-                        @synchronized (self.failedURLs) {
-                            [self.failedURLs addObject:url];
-                        }
-                    }
-                }
-                else {
-                    if ((options & SDWebImageRetryFailed)) {
-                        @synchronized (self.failedURLs) {
-                            [self.failedURLs removeObject:url];
-                        }
-                    }
-                    
-                    BOOL cacheOnDisk = !(options & SDWebImageCacheMemoryOnly);
-
-                    if (options & SDWebImageRefreshCached && image && !downloadedImage) {
-                        // Image refresh hit the NSURLCache cache, do not call the completion block
-                    }
-                    else if (downloadedImage && (!downloadedImage.images || (options & SDWebImageTransformAnimatedImage)) && [self.delegate respondsToSelector:@selector(imageManager:transformDownloadedImage:withURL:)]) {
-                        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{
-                            UIImage *transformedImage = [self.delegate imageManager:self transformDownloadedImage:downloadedImage withURL:url];
-
-                            if (transformedImage && finished) {
-                                BOOL imageWasTransformed = ![transformedImage isEqual:downloadedImage];
-                                [self.imageCache storeImage:transformedImage recalculateFromImage:imageWasTransformed imageData:(imageWasTransformed ? nil : data) forKey:key toDisk:cacheOnDisk];
-                            }
-
-                            dispatch_main_sync_safe(^{
-                                if (strongOperation && !strongOperation.isCancelled) {
-                                    completedBlock(transformedImage, nil, SDImageCacheTypeNone, finished, url);
-                                }
-                            });
-                        });
-                    }
-                    else {
-                        if (downloadedImage && finished) {
-                            [self.imageCache storeImage:downloadedImage recalculateFromImage:NO imageData:data forKey:key toDisk:cacheOnDisk];
-                        }
-
-                        dispatch_main_sync_safe(^{
-                            if (strongOperation && !strongOperation.isCancelled) {
-                                completedBlock(downloadedImage, nil, SDImageCacheTypeNone, finished, url);
-                            }
-                        });
-                    }
-                }
-
-                if (finished) {
-                    @synchronized (self.runningOperations) {
-                        if (strongOperation) {
-                            [self.runningOperations removeObject:strongOperation];
-                        }
-                    }
-                }
-            }];
-            operation.cancelBlock = ^{
-                [subOperation cancel];
-                
-                @synchronized (self.runningOperations) {
-                    __strong __typeof(weakOperation) strongOperation = weakOperation;
-                    if (strongOperation) {
-                        [self.runningOperations removeObject:strongOperation];
-                    }
-                }
-            };
-        }
-        else if (image) {
-            dispatch_main_sync_safe(^{
-                __strong __typeof(weakOperation) strongOperation = weakOperation;
-                if (strongOperation && !strongOperation.isCancelled) {
-                    completedBlock(image, nil, cacheType, YES, url);
-                }
-            });
-            @synchronized (self.runningOperations) {
-                [self.runningOperations removeObject:operation];
-            }
-        }
-        else {
-            // Image not in cache and download disallowed by delegate
-            dispatch_main_sync_safe(^{
-                __strong __typeof(weakOperation) strongOperation = weakOperation;
-                if (strongOperation && !weakOperation.isCancelled) {
-                    completedBlock(nil, nil, SDImageCacheTypeNone, YES, url);
-                }
-            });
-            @synchronized (self.runningOperations) {
-                [self.runningOperations removeObject:operation];
-            }
-        }
-    }];
-
-    return operation;
-}
-
-- (void)saveImageToCache:(UIImage *)image forURL:(NSURL *)url {
-    if (image && url) {
-        NSString *key = [self cacheKeyForURL:url];
-        [self.imageCache storeImage:image forKey:key toDisk:YES];
-    }
-}
-
-- (void)cancelAll {
-    @synchronized (self.runningOperations) {
-        NSArray *copiedOperations = [self.runningOperations copy];
-        [copiedOperations makeObjectsPerformSelector:@selector(cancel)];
-        [self.runningOperations removeObjectsInArray:copiedOperations];
-    }
-}
-
-- (BOOL)isRunning {
-    BOOL isRunning = NO;
-    @synchronized(self.runningOperations) {
-        isRunning = (self.runningOperations.count > 0);
-    }
-    return isRunning;
-}
-
-@end
-
-
-@implementation SDWebImageCombinedOperation
-
-- (void)setCancelBlock:(SDWebImageNoParamsBlock)cancelBlock {
-    // check if the operation is already cancelled, then we just call the cancelBlock
-    if (self.isCancelled) {
-        if (cancelBlock) {
-            cancelBlock();
-        }
-        _cancelBlock = nil; // don't forget to nil the cancelBlock, otherwise we will get crashes
-    } else {
-        _cancelBlock = [cancelBlock copy];
-    }
-}
-
-- (void)cancel {
-    self.cancelled = YES;
-    if (self.cacheOperation) {
-        [self.cacheOperation cancel];
-        self.cacheOperation = nil;
-    }
-    if (self.cancelBlock) {
-        self.cancelBlock();
-        
-        // TODO: this is a temporary fix to #809.
-        // Until we can figure the exact cause of the crash, going with the ivar instead of the setter
-//        self.cancelBlock = nil;
-        _cancelBlock = nil;
-    }
-}
-
-@end
-
-
-@implementation SDWebImageManager (Deprecated)
-
-// deprecated method, uses the non deprecated method
-// adapter for the completion block
-- (id <SDWebImageOperation>)downloadWithURL:(NSURL *)url options:(SDWebImageOptions)options progress:(SDWebImageDownloaderProgressBlock)progressBlock completed:(SDWebImageCompletedWithFinishedBlock)completedBlock {
-    return [self downloadImageWithURL:url
-                              options:options
-                             progress:progressBlock
-                            completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) {
-                                if (completedBlock) {
-                                    completedBlock(image, error, cacheType, finished);
-                                }
-                            }];
-}
-
-@end

+ 0 - 15
KulexiuForTeacher/Pods/SDWebImage/SDWebImage/SDWebImageOperation.h

@@ -1,15 +0,0 @@
-/*
- * This file is part of the SDWebImage package.
- * (c) Olivier Poitrey <rs@dailymotion.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-#import <Foundation/Foundation.h>
-
-@protocol SDWebImageOperation <NSObject>
-
-- (void)cancel;
-
-@end

+ 0 - 108
KulexiuForTeacher/Pods/SDWebImage/SDWebImage/SDWebImagePrefetcher.h

@@ -1,108 +0,0 @@
-/*
- * This file is part of the SDWebImage package.
- * (c) Olivier Poitrey <rs@dailymotion.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-#import <Foundation/Foundation.h>
-#import "SDWebImageManager.h"
-
-@class SDWebImagePrefetcher;
-
-@protocol SDWebImagePrefetcherDelegate <NSObject>
-
-@optional
-
-/**
- * Called when an image was prefetched.
- *
- * @param imagePrefetcher The current image prefetcher
- * @param imageURL        The image url that was prefetched
- * @param finishedCount   The total number of images that were prefetched (successful or not)
- * @param totalCount      The total number of images that were to be prefetched
- */
-- (void)imagePrefetcher:(SDWebImagePrefetcher *)imagePrefetcher didPrefetchURL:(NSURL *)imageURL finishedCount:(NSUInteger)finishedCount totalCount:(NSUInteger)totalCount;
-
-/**
- * Called when all images are prefetched.
- * @param imagePrefetcher The current image prefetcher
- * @param totalCount      The total number of images that were prefetched (whether successful or not)
- * @param skippedCount    The total number of images that were skipped
- */
-- (void)imagePrefetcher:(SDWebImagePrefetcher *)imagePrefetcher didFinishWithTotalCount:(NSUInteger)totalCount skippedCount:(NSUInteger)skippedCount;
-
-@end
-
-typedef void(^SDWebImagePrefetcherProgressBlock)(NSUInteger noOfFinishedUrls, NSUInteger noOfTotalUrls);
-typedef void(^SDWebImagePrefetcherCompletionBlock)(NSUInteger noOfFinishedUrls, NSUInteger noOfSkippedUrls);
-
-/**
- * Prefetch some URLs in the cache for future use. Images are downloaded in low priority.
- */
-@interface SDWebImagePrefetcher : NSObject
-
-/**
- *  The web image manager
- */
-@property (strong, nonatomic, readonly) SDWebImageManager *manager;
-
-/**
- * Maximum number of URLs to prefetch at the same time. Defaults to 3.
- */
-@property (nonatomic, assign) NSUInteger maxConcurrentDownloads;
-
-/**
- * SDWebImageOptions for prefetcher. Defaults to SDWebImageLowPriority.
- */
-@property (nonatomic, assign) SDWebImageOptions options;
-
-/**
- * Queue options for Prefetcher. Defaults to Main Queue.
- */
-@property (nonatomic, assign) dispatch_queue_t prefetcherQueue;
-
-@property (weak, nonatomic) id <SDWebImagePrefetcherDelegate> delegate;
-
-/**
- * Return the global image prefetcher instance.
- */
-+ (SDWebImagePrefetcher *)sharedImagePrefetcher;
-
-/**
- * Allows you to instantiate a prefetcher with any arbitrary image manager.
- */
-- (id)initWithImageManager:(SDWebImageManager *)manager;
-
-/**
- * Assign list of URLs to let SDWebImagePrefetcher to queue the prefetching,
- * currently one image is downloaded at a time,
- * and skips images for failed downloads and proceed to the next image in the list
- *
- * @param urls list of URLs to prefetch
- */
-- (void)prefetchURLs:(NSArray *)urls;
-
-/**
- * Assign list of URLs to let SDWebImagePrefetcher to queue the prefetching,
- * currently one image is downloaded at a time,
- * and skips images for failed downloads and proceed to the next image in the list
- *
- * @param urls            list of URLs to prefetch
- * @param progressBlock   block to be called when progress updates; 
- *                        first parameter is the number of completed (successful or not) requests, 
- *                        second parameter is the total number of images originally requested to be prefetched
- * @param completionBlock block to be called when prefetching is completed
- *                        first param is the number of completed (successful or not) requests,
- *                        second parameter is the number of skipped requests
- */
-- (void)prefetchURLs:(NSArray *)urls progress:(SDWebImagePrefetcherProgressBlock)progressBlock completed:(SDWebImagePrefetcherCompletionBlock)completionBlock;
-
-/**
- * Remove and cancel queued list
- */
-- (void)cancelPrefetching;
-
-
-@end

+ 0 - 140
KulexiuForTeacher/Pods/SDWebImage/SDWebImage/SDWebImagePrefetcher.m

@@ -1,140 +0,0 @@
-/*
- * This file is part of the SDWebImage package.
- * (c) Olivier Poitrey <rs@dailymotion.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-#import "SDWebImagePrefetcher.h"
-
-@interface SDWebImagePrefetcher ()
-
-@property (strong, nonatomic) SDWebImageManager *manager;
-@property (strong, nonatomic) NSArray *prefetchURLs;
-@property (assign, nonatomic) NSUInteger requestedCount;
-@property (assign, nonatomic) NSUInteger skippedCount;
-@property (assign, nonatomic) NSUInteger finishedCount;
-@property (assign, nonatomic) NSTimeInterval startedTime;
-@property (copy, nonatomic) SDWebImagePrefetcherCompletionBlock completionBlock;
-@property (copy, nonatomic) SDWebImagePrefetcherProgressBlock progressBlock;
-
-@end
-
-@implementation SDWebImagePrefetcher
-
-+ (SDWebImagePrefetcher *)sharedImagePrefetcher {
-    static dispatch_once_t once;
-    static id instance;
-    dispatch_once(&once, ^{
-        instance = [self new];
-    });
-    return instance;
-}
-
-- (id)init {
-    return [self initWithImageManager:[SDWebImageManager new]];
-}
-
-- (id)initWithImageManager:(SDWebImageManager *)manager {
-    if ((self = [super init])) {
-        _manager = manager;
-        _options = SDWebImageLowPriority;
-        _prefetcherQueue = dispatch_get_main_queue();
-        self.maxConcurrentDownloads = 3;
-    }
-    return self;
-}
-
-- (void)setMaxConcurrentDownloads:(NSUInteger)maxConcurrentDownloads {
-    self.manager.imageDownloader.maxConcurrentDownloads = maxConcurrentDownloads;
-}
-
-- (NSUInteger)maxConcurrentDownloads {
-    return self.manager.imageDownloader.maxConcurrentDownloads;
-}
-
-- (void)startPrefetchingAtIndex:(NSUInteger)index {
-    if (index >= self.prefetchURLs.count) return;
-    self.requestedCount++;
-    [self.manager downloadImageWithURL:self.prefetchURLs[index] options:self.options progress:nil completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) {
-        if (!finished) return;
-        self.finishedCount++;
-
-        if (image) {
-            if (self.progressBlock) {
-                self.progressBlock(self.finishedCount,[self.prefetchURLs count]);
-            }
-        }
-        else {
-            if (self.progressBlock) {
-                self.progressBlock(self.finishedCount,[self.prefetchURLs count]);
-            }
-            // Add last failed
-            self.skippedCount++;
-        }
-        if ([self.delegate respondsToSelector:@selector(imagePrefetcher:didPrefetchURL:finishedCount:totalCount:)]) {
-            [self.delegate imagePrefetcher:self
-                            didPrefetchURL:self.prefetchURLs[index]
-                             finishedCount:self.finishedCount
-                                totalCount:self.prefetchURLs.count
-             ];
-        }
-        if (self.prefetchURLs.count > self.requestedCount) {
-            dispatch_async(self.prefetcherQueue, ^{
-                [self startPrefetchingAtIndex:self.requestedCount];
-            });
-        } else if (self.finishedCount == self.requestedCount) {
-            [self reportStatus];
-            if (self.completionBlock) {
-                self.completionBlock(self.finishedCount, self.skippedCount);
-                self.completionBlock = nil;
-            }
-            self.progressBlock = nil;
-        }
-    }];
-}
-
-- (void)reportStatus {
-    NSUInteger total = [self.prefetchURLs count];
-    if ([self.delegate respondsToSelector:@selector(imagePrefetcher:didFinishWithTotalCount:skippedCount:)]) {
-        [self.delegate imagePrefetcher:self
-               didFinishWithTotalCount:(total - self.skippedCount)
-                          skippedCount:self.skippedCount
-         ];
-    }
-}
-
-- (void)prefetchURLs:(NSArray *)urls {
-    [self prefetchURLs:urls progress:nil completed:nil];
-}
-
-- (void)prefetchURLs:(NSArray *)urls progress:(SDWebImagePrefetcherProgressBlock)progressBlock completed:(SDWebImagePrefetcherCompletionBlock)completionBlock {
-    [self cancelPrefetching]; // Prevent duplicate prefetch request
-    self.startedTime = CFAbsoluteTimeGetCurrent();
-    self.prefetchURLs = urls;
-    self.completionBlock = completionBlock;
-    self.progressBlock = progressBlock;
-
-    if (urls.count == 0) {
-        if (completionBlock) {
-            completionBlock(0,0);
-        }
-    } else {
-        // Starts prefetching from the very first image on the list with the max allowed concurrency
-        NSUInteger listCount = self.prefetchURLs.count;
-        for (NSUInteger i = 0; i < self.maxConcurrentDownloads && self.requestedCount < listCount; i++) {
-            [self startPrefetchingAtIndex:i];
-        }
-    }
-}
-
-- (void)cancelPrefetching {
-    self.prefetchURLs = nil;
-    self.skippedCount = 0;
-    self.requestedCount = 0;
-    self.finishedCount = 0;
-    [self.manager cancelAll];
-}
-
-@end

+ 0 - 229
KulexiuForTeacher/Pods/SDWebImage/SDWebImage/UIButton+WebCache.h

@@ -1,229 +0,0 @@
-/*
- * This file is part of the SDWebImage package.
- * (c) Olivier Poitrey <rs@dailymotion.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-#import "SDWebImageCompat.h"
-#import "SDWebImageManager.h"
-
-/**
- * Integrates SDWebImage async downloading and caching of remote images with UIButtonView.
- */
-@interface UIButton (WebCache)
-
-/**
- * Get the current image URL.
- */
-- (NSURL *)sd_currentImageURL;
-
-/**
- * Get the image URL for a control state.
- * 
- * @param state Which state you want to know the URL for. The values are described in UIControlState.
- */
-- (NSURL *)sd_imageURLForState:(UIControlState)state;
-
-/**
- * Set the imageView `image` with an `url`.
- *
- * The download is asynchronous and cached.
- *
- * @param url   The url for the image.
- * @param state The state that uses the specified title. The values are described in UIControlState.
- */
-- (void)sd_setImageWithURL:(NSURL *)url forState:(UIControlState)state;
-
-/**
- * Set the imageView `image` with an `url` and a placeholder.
- *
- * The download is asynchronous and cached.
- *
- * @param url         The url for the image.
- * @param state       The state that uses the specified title. The values are described in UIControlState.
- * @param placeholder The image to be set initially, until the image request finishes.
- * @see sd_setImageWithURL:placeholderImage:options:
- */
-- (void)sd_setImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder;
-
-/**
- * Set the imageView `image` with an `url`, placeholder and custom options.
- *
- * The download is asynchronous and cached.
- *
- * @param url         The url for the image.
- * @param state       The state that uses the specified title. The values are described in UIControlState.
- * @param placeholder The image to be set initially, until the image request finishes.
- * @param options     The options to use when downloading the image. @see SDWebImageOptions for the possible values.
- */
-- (void)sd_setImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options;
-
-/**
- * Set the imageView `image` with an `url`.
- *
- * The download is asynchronous and cached.
- *
- * @param url            The url for the image.
- * @param state          The state that uses the specified title. The values are described in UIControlState.
- * @param completedBlock A block called when operation has been completed. This block has no return value
- *                       and takes the requested UIImage as first parameter. In case of error the image parameter
- *                       is nil and the second parameter may contain an NSError. The third parameter is a Boolean
- *                       indicating if the image was retrieved from the local cache or from the network.
- *                       The fourth parameter is the original image url.
- */
-- (void)sd_setImageWithURL:(NSURL *)url forState:(UIControlState)state completed:(SDWebImageCompletionBlock)completedBlock;
-
-/**
- * Set the imageView `image` with an `url`, placeholder.
- *
- * The download is asynchronous and cached.
- *
- * @param url            The url for the image.
- * @param state          The state that uses the specified title. The values are described in UIControlState.
- * @param placeholder    The image to be set initially, until the image request finishes.
- * @param completedBlock A block called when operation has been completed. This block has no return value
- *                       and takes the requested UIImage as first parameter. In case of error the image parameter
- *                       is nil and the second parameter may contain an NSError. The third parameter is a Boolean
- *                       indicating if the image was retrieved from the local cache or from the network.
- *                       The fourth parameter is the original image url.
- */
-- (void)sd_setImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder completed:(SDWebImageCompletionBlock)completedBlock;
-
-/**
- * Set the imageView `image` with an `url`, placeholder and custom options.
- *
- * The download is asynchronous and cached.
- *
- * @param url            The url for the image.
- * @param state          The state that uses the specified title. The values are described in UIControlState.
- * @param placeholder    The image to be set initially, until the image request finishes.
- * @param options        The options to use when downloading the image. @see SDWebImageOptions for the possible values.
- * @param completedBlock A block called when operation has been completed. This block has no return value
- *                       and takes the requested UIImage as first parameter. In case of error the image parameter
- *                       is nil and the second parameter may contain an NSError. The third parameter is a Boolean
- *                       indicating if the image was retrieved from the local cache or from the network.
- *                       The fourth parameter is the original image url.
- */
-- (void)sd_setImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options completed:(SDWebImageCompletionBlock)completedBlock;
-
-/**
- * Set the backgroundImageView `image` with an `url`.
- *
- * The download is asynchronous and cached.
- *
- * @param url   The url for the image.
- * @param state The state that uses the specified title. The values are described in UIControlState.
- */
-- (void)sd_setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state;
-
-/**
- * Set the backgroundImageView `image` with an `url` and a placeholder.
- *
- * The download is asynchronous and cached.
- *
- * @param url         The url for the image.
- * @param state       The state that uses the specified title. The values are described in UIControlState.
- * @param placeholder The image to be set initially, until the image request finishes.
- * @see sd_setImageWithURL:placeholderImage:options:
- */
-- (void)sd_setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder;
-
-/**
- * Set the backgroundImageView `image` with an `url`, placeholder and custom options.
- *
- * The download is asynchronous and cached.
- *
- * @param url         The url for the image.
- * @param state       The state that uses the specified title. The values are described in UIControlState.
- * @param placeholder The image to be set initially, until the image request finishes.
- * @param options     The options to use when downloading the image. @see SDWebImageOptions for the possible values.
- */
-- (void)sd_setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options;
-
-/**
- * Set the backgroundImageView `image` with an `url`.
- *
- * The download is asynchronous and cached.
- *
- * @param url            The url for the image.
- * @param state          The state that uses the specified title. The values are described in UIControlState.
- * @param completedBlock A block called when operation has been completed. This block has no return value
- *                       and takes the requested UIImage as first parameter. In case of error the image parameter
- *                       is nil and the second parameter may contain an NSError. The third parameter is a Boolean
- *                       indicating if the image was retrieved from the local cache or from the network.
- *                       The fourth parameter is the original image url.
- */
-- (void)sd_setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state completed:(SDWebImageCompletionBlock)completedBlock;
-
-/**
- * Set the backgroundImageView `image` with an `url`, placeholder.
- *
- * The download is asynchronous and cached.
- *
- * @param url            The url for the image.
- * @param state          The state that uses the specified title. The values are described in UIControlState.
- * @param placeholder    The image to be set initially, until the image request finishes.
- * @param completedBlock A block called when operation has been completed. This block has no return value
- *                       and takes the requested UIImage as first parameter. In case of error the image parameter
- *                       is nil and the second parameter may contain an NSError. The third parameter is a Boolean
- *                       indicating if the image was retrieved from the local cache or from the network.
- *                       The fourth parameter is the original image url.
- */
-- (void)sd_setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder completed:(SDWebImageCompletionBlock)completedBlock;
-
-/**
- * Set the backgroundImageView `image` with an `url`, placeholder and custom options.
- *
- * The download is asynchronous and cached.
- *
- * @param url            The url for the image.
- * @param placeholder    The image to be set initially, until the image request finishes.
- * @param options        The options to use when downloading the image. @see SDWebImageOptions for the possible values.
- * @param completedBlock A block called when operation has been completed. This block has no return value
- *                       and takes the requested UIImage as first parameter. In case of error the image parameter
- *                       is nil and the second parameter may contain an NSError. The third parameter is a Boolean
- *                       indicating if the image was retrieved from the local cache or from the network.
- *                       The fourth parameter is the original image url.
- */
-- (void)sd_setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options completed:(SDWebImageCompletionBlock)completedBlock;
-
-/**
- * Cancel the current image download
- */
-- (void)sd_cancelImageLoadForState:(UIControlState)state;
-
-/**
- * Cancel the current backgroundImage download
- */
-- (void)sd_cancelBackgroundImageLoadForState:(UIControlState)state;
-
-@end
-
-
-@interface UIButton (WebCacheDeprecated)
-
-- (NSURL *)currentImageURL __deprecated_msg("Use `sd_currentImageURL`");
-- (NSURL *)imageURLForState:(UIControlState)state __deprecated_msg("Use `sd_imageURLForState:`");
-
-- (void)setImageWithURL:(NSURL *)url forState:(UIControlState)state __deprecated_msg("Method deprecated. Use `sd_setImageWithURL:forState:`");
-- (void)setImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder __deprecated_msg("Method deprecated. Use `sd_setImageWithURL:forState:placeholderImage:`");
-- (void)setImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options __deprecated_msg("Method deprecated. Use `sd_setImageWithURL:forState:placeholderImage:options:`");
-
-- (void)setImageWithURL:(NSURL *)url forState:(UIControlState)state completed:(SDWebImageCompletedBlock)completedBlock __deprecated_msg("Method deprecated. Use `sd_setImageWithURL:forState:completed:`");
-- (void)setImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder completed:(SDWebImageCompletedBlock)completedBlock __deprecated_msg("Method deprecated. Use `sd_setImageWithURL:forState:placeholderImage:completed:`");
-- (void)setImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options completed:(SDWebImageCompletedBlock)completedBlock __deprecated_msg("Method deprecated. Use `sd_setImageWithURL:forState:placeholderImage:options:completed:`");
-
-- (void)setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state __deprecated_msg("Method deprecated. Use `sd_setBackgroundImageWithURL:forState:`");
-- (void)setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder __deprecated_msg("Method deprecated. Use `sd_setBackgroundImageWithURL:forState:placeholderImage:`");
-- (void)setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options __deprecated_msg("Method deprecated. Use `sd_setBackgroundImageWithURL:forState:placeholderImage:options:`");
-
-- (void)setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state completed:(SDWebImageCompletedBlock)completedBlock __deprecated_msg("Method deprecated. Use `sd_setBackgroundImageWithURL:forState:completed:`");
-- (void)setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder completed:(SDWebImageCompletedBlock)completedBlock __deprecated_msg("Method deprecated. Use `sd_setBackgroundImageWithURL:forState:placeholderImage:completed:`");
-- (void)setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options completed:(SDWebImageCompletedBlock)completedBlock __deprecated_msg("Method deprecated. Use `sd_setBackgroundImageWithURL:forState:placeholderImage:options:completed:`");
-
-- (void)cancelCurrentImageLoad __deprecated_msg("Use `sd_cancelImageLoadForState:`");
-- (void)cancelBackgroundImageLoadForState:(UIControlState)state __deprecated_msg("Use `sd_cancelBackgroundImageLoadForState:`");
-
-@end

+ 0 - 270
KulexiuForTeacher/Pods/SDWebImage/SDWebImage/UIButton+WebCache.m

@@ -1,270 +0,0 @@
-/*
- * This file is part of the SDWebImage package.
- * (c) Olivier Poitrey <rs@dailymotion.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-#import "UIButton+WebCache.h"
-#import "objc/runtime.h"
-#import "UIView+WebCacheOperation.h"
-
-static char imageURLStorageKey;
-
-@implementation UIButton (WebCache)
-
-- (NSURL *)sd_currentImageURL {
-    NSURL *url = self.imageURLStorage[@(self.state)];
-
-    if (!url) {
-        url = self.imageURLStorage[@(UIControlStateNormal)];
-    }
-
-    return url;
-}
-
-- (NSURL *)sd_imageURLForState:(UIControlState)state {
-    return self.imageURLStorage[@(state)];
-}
-
-- (void)sd_setImageWithURL:(NSURL *)url forState:(UIControlState)state {
-    [self sd_setImageWithURL:url forState:state placeholderImage:nil options:0 completed:nil];
-}
-
-- (void)sd_setImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder {
-    [self sd_setImageWithURL:url forState:state placeholderImage:placeholder options:0 completed:nil];
-}
-
-- (void)sd_setImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options {
-    [self sd_setImageWithURL:url forState:state placeholderImage:placeholder options:options completed:nil];
-}
-
-- (void)sd_setImageWithURL:(NSURL *)url forState:(UIControlState)state completed:(SDWebImageCompletionBlock)completedBlock {
-    [self sd_setImageWithURL:url forState:state placeholderImage:nil options:0 completed:completedBlock];
-}
-
-- (void)sd_setImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder completed:(SDWebImageCompletionBlock)completedBlock {
-    [self sd_setImageWithURL:url forState:state placeholderImage:placeholder options:0 completed:completedBlock];
-}
-
-- (void)sd_setImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options completed:(SDWebImageCompletionBlock)completedBlock {
-
-    [self setImage:placeholder forState:state];
-    [self sd_cancelImageLoadForState:state];
-    
-    if (!url) {
-        [self.imageURLStorage removeObjectForKey:@(state)];
-        
-        dispatch_main_async_safe(^{
-            if (completedBlock) {
-                NSError *error = [NSError errorWithDomain:SDWebImageErrorDomain code:-1 userInfo:@{NSLocalizedDescriptionKey : @"Trying to load a nil url"}];
-                completedBlock(nil, error, SDImageCacheTypeNone, url);
-            }
-        });
-        
-        return;
-    }
-    
-    self.imageURLStorage[@(state)] = url;
-
-    __weak __typeof(self)wself = self;
-    id <SDWebImageOperation> operation = [SDWebImageManager.sharedManager downloadImageWithURL:url options:options progress:nil completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) {
-        if (!wself) return;
-        dispatch_main_sync_safe(^{
-            __strong UIButton *sself = wself;
-            if (!sself) return;
-            if (image && (options & SDWebImageAvoidAutoSetImage) && completedBlock)
-            {
-                completedBlock(image, error, cacheType, url);
-                return;
-            }
-            else if (image) {
-                [sself setImage:image forState:state];
-            }
-            if (completedBlock && finished) {
-                completedBlock(image, error, cacheType, url);
-            }
-        });
-    }];
-    [self sd_setImageLoadOperation:operation forState:state];
-}
-
-- (void)sd_setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state {
-    [self sd_setBackgroundImageWithURL:url forState:state placeholderImage:nil options:0 completed:nil];
-}
-
-- (void)sd_setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder {
-    [self sd_setBackgroundImageWithURL:url forState:state placeholderImage:placeholder options:0 completed:nil];
-}
-
-- (void)sd_setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options {
-    [self sd_setBackgroundImageWithURL:url forState:state placeholderImage:placeholder options:options completed:nil];
-}
-
-- (void)sd_setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state completed:(SDWebImageCompletionBlock)completedBlock {
-    [self sd_setBackgroundImageWithURL:url forState:state placeholderImage:nil options:0 completed:completedBlock];
-}
-
-- (void)sd_setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder completed:(SDWebImageCompletionBlock)completedBlock {
-    [self sd_setBackgroundImageWithURL:url forState:state placeholderImage:placeholder options:0 completed:completedBlock];
-}
-
-- (void)sd_setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options completed:(SDWebImageCompletionBlock)completedBlock {
-    [self sd_cancelBackgroundImageLoadForState:state];
-
-    [self setBackgroundImage:placeholder forState:state];
-
-    if (url) {
-        __weak __typeof(self)wself = self;
-        id <SDWebImageOperation> operation = [SDWebImageManager.sharedManager downloadImageWithURL:url options:options progress:nil completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) {
-            if (!wself) return;
-            dispatch_main_sync_safe(^{
-                __strong UIButton *sself = wself;
-                if (!sself) return;
-                if (image && (options & SDWebImageAvoidAutoSetImage) && completedBlock)
-                {
-                    completedBlock(image, error, cacheType, url);
-                    return;
-                }
-                else if (image) {
-                    [sself setBackgroundImage:image forState:state];
-                }
-                if (completedBlock && finished) {
-                    completedBlock(image, error, cacheType, url);
-                }
-            });
-        }];
-        [self sd_setBackgroundImageLoadOperation:operation forState:state];
-    } else {
-        dispatch_main_async_safe(^{
-            NSError *error = [NSError errorWithDomain:SDWebImageErrorDomain code:-1 userInfo:@{NSLocalizedDescriptionKey : @"Trying to load a nil url"}];
-            if (completedBlock) {
-                completedBlock(nil, error, SDImageCacheTypeNone, url);
-            }
-        });
-    }
-}
-
-- (void)sd_setImageLoadOperation:(id<SDWebImageOperation>)operation forState:(UIControlState)state {
-    [self sd_setImageLoadOperation:operation forKey:[NSString stringWithFormat:@"UIButtonImageOperation%@", @(state)]];
-}
-
-- (void)sd_cancelImageLoadForState:(UIControlState)state {
-    [self sd_cancelImageLoadOperationWithKey:[NSString stringWithFormat:@"UIButtonImageOperation%@", @(state)]];
-}
-
-- (void)sd_setBackgroundImageLoadOperation:(id<SDWebImageOperation>)operation forState:(UIControlState)state {
-    [self sd_setImageLoadOperation:operation forKey:[NSString stringWithFormat:@"UIButtonBackgroundImageOperation%@", @(state)]];
-}
-
-- (void)sd_cancelBackgroundImageLoadForState:(UIControlState)state {
-    [self sd_cancelImageLoadOperationWithKey:[NSString stringWithFormat:@"UIButtonBackgroundImageOperation%@", @(state)]];
-}
-
-- (NSMutableDictionary *)imageURLStorage {
-    NSMutableDictionary *storage = objc_getAssociatedObject(self, &imageURLStorageKey);
-    if (!storage)
-    {
-        storage = [NSMutableDictionary dictionary];
-        objc_setAssociatedObject(self, &imageURLStorageKey, storage, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
-    }
-
-    return storage;
-}
-
-@end
-
-
-@implementation UIButton (WebCacheDeprecated)
-
-- (NSURL *)currentImageURL {
-    return [self sd_currentImageURL];
-}
-
-- (NSURL *)imageURLForState:(UIControlState)state {
-    return [self sd_imageURLForState:state];
-}
-
-- (void)setImageWithURL:(NSURL *)url forState:(UIControlState)state {
-    [self sd_setImageWithURL:url forState:state placeholderImage:nil options:0 completed:nil];
-}
-
-- (void)setImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder {
-    [self sd_setImageWithURL:url forState:state placeholderImage:placeholder options:0 completed:nil];
-}
-
-- (void)setImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options {
-    [self sd_setImageWithURL:url forState:state placeholderImage:placeholder options:options completed:nil];
-}
-
-- (void)setImageWithURL:(NSURL *)url forState:(UIControlState)state completed:(SDWebImageCompletedBlock)completedBlock {
-    [self sd_setImageWithURL:url forState:state placeholderImage:nil options:0 completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {
-        if (completedBlock) {
-            completedBlock(image, error, cacheType);
-        }
-    }];
-}
-
-- (void)setImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder completed:(SDWebImageCompletedBlock)completedBlock {
-    [self sd_setImageWithURL:url forState:state placeholderImage:placeholder options:0 completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {
-        if (completedBlock) {
-            completedBlock(image, error, cacheType);
-        }
-    }];
-}
-
-- (void)setImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options completed:(SDWebImageCompletedBlock)completedBlock {
-    [self sd_setImageWithURL:url forState:state placeholderImage:placeholder options:options completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {
-        if (completedBlock) {
-            completedBlock(image, error, cacheType);
-        }
-    }];
-}
-
-- (void)setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state {
-    [self sd_setBackgroundImageWithURL:url forState:state placeholderImage:nil options:0 completed:nil];
-}
-
-- (void)setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder {
-    [self sd_setBackgroundImageWithURL:url forState:state placeholderImage:placeholder options:0 completed:nil];
-}
-
-- (void)setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options {
-    [self sd_setBackgroundImageWithURL:url forState:state placeholderImage:placeholder options:options completed:nil];
-}
-
-- (void)setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state completed:(SDWebImageCompletedBlock)completedBlock {
-    [self sd_setBackgroundImageWithURL:url forState:state placeholderImage:nil options:0 completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {
-        if (completedBlock) {
-            completedBlock(image, error, cacheType);
-        }
-    }];
-}
-
-- (void)setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder completed:(SDWebImageCompletedBlock)completedBlock {
-    [self sd_setBackgroundImageWithURL:url forState:state placeholderImage:placeholder options:0 completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {
-        if (completedBlock) {
-            completedBlock(image, error, cacheType);
-        }
-    }];
-}
-
-- (void)setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options completed:(SDWebImageCompletedBlock)completedBlock {
-    [self sd_setBackgroundImageWithURL:url forState:state placeholderImage:placeholder options:options completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {
-        if (completedBlock) {
-            completedBlock(image, error, cacheType);
-        }
-    }];
-}
-
-- (void)cancelCurrentImageLoad {
-    // in a backwards compatible manner, cancel for current state
-    [self sd_cancelImageLoadForState:self.state];
-}
-
-- (void)cancelBackgroundImageLoadForState:(UIControlState)state {
-    [self sd_cancelBackgroundImageLoadForState:state];
-}
-
-@end

+ 0 - 19
KulexiuForTeacher/Pods/SDWebImage/SDWebImage/UIImage+GIF.h

@@ -1,19 +0,0 @@
-//
-//  UIImage+GIF.h
-//  LBGIFImage
-//
-//  Created by Laurin Brandner on 06.01.12.
-//  Copyright (c) 2012 __MyCompanyName__. All rights reserved.
-//
-
-#import <UIKit/UIKit.h>
-
-@interface UIImage (GIF)
-
-+ (UIImage *)sd_animatedGIFNamed:(NSString *)name;
-
-+ (UIImage *)sd_animatedGIFWithData:(NSData *)data;
-
-- (UIImage *)sd_animatedImageByScalingAndCroppingToSize:(CGSize)size;
-
-@end

+ 0 - 161
KulexiuForTeacher/Pods/SDWebImage/SDWebImage/UIImage+GIF.m

@@ -1,161 +0,0 @@
-//
-//  UIImage+GIF.m
-//  LBGIFImage
-//
-//  Created by Laurin Brandner on 06.01.12.
-//  Copyright (c) 2012 __MyCompanyName__. All rights reserved.
-//
-
-#import "UIImage+GIF.h"
-#import <ImageIO/ImageIO.h>
-
-@implementation UIImage (GIF)
-
-+ (UIImage *)sd_animatedGIFWithData:(NSData *)data {
-    if (!data) {
-        return nil;
-    }
-
-    CGImageSourceRef source = CGImageSourceCreateWithData((__bridge CFDataRef)data, NULL);
-
-    size_t count = CGImageSourceGetCount(source);
-
-    UIImage *animatedImage;
-
-    if (count <= 1) {
-        animatedImage = [[UIImage alloc] initWithData:data];
-    }
-    else {
-        NSMutableArray *images = [NSMutableArray array];
-
-        NSTimeInterval duration = 0.0f;
-
-        for (size_t i = 0; i < count; i++) {
-            CGImageRef image = CGImageSourceCreateImageAtIndex(source, i, NULL);
-            if (!image) {
-                continue;
-            }
-
-            duration += [self sd_frameDurationAtIndex:i source:source];
-
-            [images addObject:[UIImage imageWithCGImage:image scale:[UIScreen mainScreen].scale orientation:UIImageOrientationUp]];
-
-            CGImageRelease(image);
-        }
-
-        if (!duration) {
-            duration = (1.0f / 10.0f) * count;
-        }
-
-        animatedImage = [UIImage animatedImageWithImages:images duration:duration];
-    }
-
-    CFRelease(source);
-
-    return animatedImage;
-}
-
-+ (float)sd_frameDurationAtIndex:(NSUInteger)index source:(CGImageSourceRef)source {
-    float frameDuration = 0.1f;
-    CFDictionaryRef cfFrameProperties = CGImageSourceCopyPropertiesAtIndex(source, index, nil);
-    NSDictionary *frameProperties = (__bridge NSDictionary *)cfFrameProperties;
-    NSDictionary *gifProperties = frameProperties[(NSString *)kCGImagePropertyGIFDictionary];
-
-    NSNumber *delayTimeUnclampedProp = gifProperties[(NSString *)kCGImagePropertyGIFUnclampedDelayTime];
-    if (delayTimeUnclampedProp) {
-        frameDuration = [delayTimeUnclampedProp floatValue];
-    }
-    else {
-
-        NSNumber *delayTimeProp = gifProperties[(NSString *)kCGImagePropertyGIFDelayTime];
-        if (delayTimeProp) {
-            frameDuration = [delayTimeProp floatValue];
-        }
-    }
-
-    // Many annoying ads specify a 0 duration to make an image flash as quickly as possible.
-    // We follow Firefox's behavior and use a duration of 100 ms for any frames that specify
-    // a duration of <= 10 ms. See <rdar://problem/7689300> and <http://webkit.org/b/36082>
-    // for more information.
-
-    if (frameDuration < 0.011f) {
-        frameDuration = 0.100f;
-    }
-
-    CFRelease(cfFrameProperties);
-    return frameDuration;
-}
-
-+ (UIImage *)sd_animatedGIFNamed:(NSString *)name {
-    CGFloat scale = [UIScreen mainScreen].scale;
-
-    if (scale > 1.0f) {
-        NSString *retinaPath = [[NSBundle mainBundle] pathForResource:[name stringByAppendingString:@"@2x"] ofType:@"gif"];
-
-        NSData *data = [NSData dataWithContentsOfFile:retinaPath];
-
-        if (data) {
-            return [UIImage sd_animatedGIFWithData:data];
-        }
-
-        NSString *path = [[NSBundle mainBundle] pathForResource:name ofType:@"gif"];
-
-        data = [NSData dataWithContentsOfFile:path];
-
-        if (data) {
-            return [UIImage sd_animatedGIFWithData:data];
-        }
-
-        return [UIImage imageNamed:name];
-    }
-    else {
-        NSString *path = [[NSBundle mainBundle] pathForResource:name ofType:@"gif"];
-
-        NSData *data = [NSData dataWithContentsOfFile:path];
-
-        if (data) {
-            return [UIImage sd_animatedGIFWithData:data];
-        }
-
-        return [UIImage imageNamed:name];
-    }
-}
-
-- (UIImage *)sd_animatedImageByScalingAndCroppingToSize:(CGSize)size {
-    if (CGSizeEqualToSize(self.size, size) || CGSizeEqualToSize(size, CGSizeZero)) {
-        return self;
-    }
-
-    CGSize scaledSize = size;
-    CGPoint thumbnailPoint = CGPointZero;
-
-    CGFloat widthFactor = size.width / self.size.width;
-    CGFloat heightFactor = size.height / self.size.height;
-    CGFloat scaleFactor = (widthFactor > heightFactor) ? widthFactor : heightFactor;
-    scaledSize.width = self.size.width * scaleFactor;
-    scaledSize.height = self.size.height * scaleFactor;
-
-    if (widthFactor > heightFactor) {
-        thumbnailPoint.y = (size.height - scaledSize.height) * 0.5;
-    }
-    else if (widthFactor < heightFactor) {
-        thumbnailPoint.x = (size.width - scaledSize.width) * 0.5;
-    }
-
-    NSMutableArray *scaledImages = [NSMutableArray array];
-
-    for (UIImage *image in self.images) {
-        UIGraphicsBeginImageContextWithOptions(size, NO, 0.0);
-        
-        [image drawInRect:CGRectMake(thumbnailPoint.x, thumbnailPoint.y, scaledSize.width, scaledSize.height)];
-        UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
-
-        [scaledImages addObject:newImage];
-
-        UIGraphicsEndImageContext();
-    }
- 
-    return [UIImage animatedImageWithImages:scaledImages duration:self.duration];
-}
-
-@end

+ 0 - 15
KulexiuForTeacher/Pods/SDWebImage/SDWebImage/UIImage+MultiFormat.h

@@ -1,15 +0,0 @@
-//
-//  UIImage+MultiFormat.h
-//  SDWebImage
-//
-//  Created by Olivier Poitrey on 07/06/13.
-//  Copyright (c) 2013 Dailymotion. All rights reserved.
-//
-
-#import <UIKit/UIKit.h>
-
-@interface UIImage (MultiFormat)
-
-+ (UIImage *)sd_imageWithData:(NSData *)data;
-
-@end

+ 0 - 118
KulexiuForTeacher/Pods/SDWebImage/SDWebImage/UIImage+MultiFormat.m

@@ -1,118 +0,0 @@
-//
-//  UIImage+MultiFormat.m
-//  SDWebImage
-//
-//  Created by Olivier Poitrey on 07/06/13.
-//  Copyright (c) 2013 Dailymotion. All rights reserved.
-//
-
-#import "UIImage+MultiFormat.h"
-#import "UIImage+GIF.h"
-#import "NSData+ImageContentType.h"
-#import <ImageIO/ImageIO.h>
-
-#ifdef SD_WEBP
-#import "UIImage+WebP.h"
-#endif
-
-@implementation UIImage (MultiFormat)
-
-+ (UIImage *)sd_imageWithData:(NSData *)data {
-    if (!data) {
-        return nil;
-    }
-    
-    UIImage *image;
-    NSString *imageContentType = [NSData sd_contentTypeForImageData:data];
-    if ([imageContentType isEqualToString:@"image/gif"]) {
-        image = [UIImage sd_animatedGIFWithData:data];
-    }
-#ifdef SD_WEBP
-    else if ([imageContentType isEqualToString:@"image/webp"])
-    {
-        image = [UIImage sd_imageWithWebPData:data];
-    }
-#endif
-    else {
-        image = [[UIImage alloc] initWithData:data];
-        UIImageOrientation orientation = [self sd_imageOrientationFromImageData:data];
-        if (orientation != UIImageOrientationUp) {
-            image = [UIImage imageWithCGImage:image.CGImage
-                                        scale:image.scale
-                                  orientation:orientation];
-        }
-    }
-
-
-    return image;
-}
-
-
-+(UIImageOrientation)sd_imageOrientationFromImageData:(NSData *)imageData {
-    UIImageOrientation result = UIImageOrientationUp;
-    CGImageSourceRef imageSource = CGImageSourceCreateWithData((__bridge CFDataRef)imageData, NULL);
-    if (imageSource) {
-        CFDictionaryRef properties = CGImageSourceCopyPropertiesAtIndex(imageSource, 0, NULL);
-        if (properties) {
-            CFTypeRef val;
-            int exifOrientation;
-            val = CFDictionaryGetValue(properties, kCGImagePropertyOrientation);
-            if (val) {
-                CFNumberGetValue(val, kCFNumberIntType, &exifOrientation);
-                result = [self sd_exifOrientationToiOSOrientation:exifOrientation];
-            } // else - if it's not set it remains at up
-            CFRelease((CFTypeRef) properties);
-        } else {
-            //NSLog(@"NO PROPERTIES, FAIL");
-        }
-        CFRelease(imageSource);
-    }
-    return result;
-}
-
-#pragma mark EXIF orientation tag converter
-// Convert an EXIF image orientation to an iOS one.
-// reference see here: http://sylvana.net/jpegcrop/exif_orientation.html
-+ (UIImageOrientation) sd_exifOrientationToiOSOrientation:(int)exifOrientation {
-    UIImageOrientation orientation = UIImageOrientationUp;
-    switch (exifOrientation) {
-        case 1:
-            orientation = UIImageOrientationUp;
-            break;
-
-        case 3:
-            orientation = UIImageOrientationDown;
-            break;
-
-        case 8:
-            orientation = UIImageOrientationLeft;
-            break;
-
-        case 6:
-            orientation = UIImageOrientationRight;
-            break;
-
-        case 2:
-            orientation = UIImageOrientationUpMirrored;
-            break;
-
-        case 4:
-            orientation = UIImageOrientationDownMirrored;
-            break;
-
-        case 5:
-            orientation = UIImageOrientationLeftMirrored;
-            break;
-
-        case 7:
-            orientation = UIImageOrientationRightMirrored;
-            break;
-        default:
-            break;
-    }
-    return orientation;
-}
-
-
-
-@end

+ 0 - 100
KulexiuForTeacher/Pods/SDWebImage/SDWebImage/UIImageView+HighlightedWebCache.h

@@ -1,100 +0,0 @@
-/*
- * This file is part of the SDWebImage package.
- * (c) Olivier Poitrey <rs@dailymotion.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-#import <UIKit/UIKit.h>
-#import "SDWebImageCompat.h"
-#import "SDWebImageManager.h"
-
-/**
- * Integrates SDWebImage async downloading and caching of remote images with UIImageView for highlighted state.
- */
-@interface UIImageView (HighlightedWebCache)
-
-/**
- * Set the imageView `highlightedImage` with an `url`.
- *
- * The download is asynchronous and cached.
- *
- * @param url The url for the image.
- */
-- (void)sd_setHighlightedImageWithURL:(NSURL *)url;
-
-/**
- * Set the imageView `highlightedImage` with an `url` and custom options.
- *
- * The download is asynchronous and cached.
- *
- * @param url     The url for the image.
- * @param options The options to use when downloading the image. @see SDWebImageOptions for the possible values.
- */
-- (void)sd_setHighlightedImageWithURL:(NSURL *)url options:(SDWebImageOptions)options;
-
-/**
- * Set the imageView `highlightedImage` with an `url`.
- *
- * The download is asynchronous and cached.
- *
- * @param url            The url for the image.
- * @param completedBlock A block called when operation has been completed. This block has no return value
- *                       and takes the requested UIImage as first parameter. In case of error the image parameter
- *                       is nil and the second parameter may contain an NSError. The third parameter is a Boolean
- *                       indicating if the image was retrieved from the local cache or from the network.
- *                       The fourth parameter is the original image url.
- */
-- (void)sd_setHighlightedImageWithURL:(NSURL *)url completed:(SDWebImageCompletionBlock)completedBlock;
-
-/**
- * Set the imageView `highlightedImage` with an `url` and custom options.
- *
- * The download is asynchronous and cached.
- *
- * @param url            The url for the image.
- * @param options        The options to use when downloading the image. @see SDWebImageOptions for the possible values.
- * @param completedBlock A block called when operation has been completed. This block has no return value
- *                       and takes the requested UIImage as first parameter. In case of error the image parameter
- *                       is nil and the second parameter may contain an NSError. The third parameter is a Boolean
- *                       indicating if the image was retrieved from the local cache or from the network.
- *                       The fourth parameter is the original image url.
- */
-- (void)sd_setHighlightedImageWithURL:(NSURL *)url options:(SDWebImageOptions)options completed:(SDWebImageCompletionBlock)completedBlock;
-
-/**
- * Set the imageView `highlightedImage` with an `url` and custom options.
- *
- * The download is asynchronous and cached.
- *
- * @param url            The url for the image.
- * @param options        The options to use when downloading the image. @see SDWebImageOptions for the possible values.
- * @param progressBlock  A block called while image is downloading
- * @param completedBlock A block called when operation has been completed. This block has no return value
- *                       and takes the requested UIImage as first parameter. In case of error the image parameter
- *                       is nil and the second parameter may contain an NSError. The third parameter is a Boolean
- *                       indicating if the image was retrieved from the local cache or from the network.
- *                       The fourth parameter is the original image url.
- */
-- (void)sd_setHighlightedImageWithURL:(NSURL *)url options:(SDWebImageOptions)options progress:(SDWebImageDownloaderProgressBlock)progressBlock completed:(SDWebImageCompletionBlock)completedBlock;
-
-/**
- * Cancel the current download
- */
-- (void)sd_cancelCurrentHighlightedImageLoad;
-
-@end
-
-
-@interface UIImageView (HighlightedWebCacheDeprecated)
-
-- (void)setHighlightedImageWithURL:(NSURL *)url __deprecated_msg("Method deprecated. Use `sd_setHighlightedImageWithURL:`");
-- (void)setHighlightedImageWithURL:(NSURL *)url options:(SDWebImageOptions)options __deprecated_msg("Method deprecated. Use `sd_setHighlightedImageWithURL:options:`");
-- (void)setHighlightedImageWithURL:(NSURL *)url completed:(SDWebImageCompletedBlock)completedBlock __deprecated_msg("Method deprecated. Use `sd_setHighlightedImageWithURL:completed:`");
-- (void)setHighlightedImageWithURL:(NSURL *)url options:(SDWebImageOptions)options completed:(SDWebImageCompletedBlock)completedBlock __deprecated_msg("Method deprecated. Use `sd_setHighlightedImageWithURL:options:completed:`");
-- (void)setHighlightedImageWithURL:(NSURL *)url options:(SDWebImageOptions)options progress:(SDWebImageDownloaderProgressBlock)progressBlock completed:(SDWebImageCompletedBlock)completedBlock __deprecated_msg("Method deprecated. Use `sd_setHighlightedImageWithURL:options:progress:completed:`");
-
-- (void)cancelCurrentHighlightedImageLoad __deprecated_msg("Use `sd_cancelCurrentHighlightedImageLoad`");
-
-@end

+ 0 - 112
KulexiuForTeacher/Pods/SDWebImage/SDWebImage/UIImageView+HighlightedWebCache.m

@@ -1,112 +0,0 @@
-/*
- * This file is part of the SDWebImage package.
- * (c) Olivier Poitrey <rs@dailymotion.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-#import "UIImageView+HighlightedWebCache.h"
-#import "UIView+WebCacheOperation.h"
-
-#define UIImageViewHighlightedWebCacheOperationKey @"highlightedImage"
-
-@implementation UIImageView (HighlightedWebCache)
-
-- (void)sd_setHighlightedImageWithURL:(NSURL *)url {
-    [self sd_setHighlightedImageWithURL:url options:0 progress:nil completed:nil];
-}
-
-- (void)sd_setHighlightedImageWithURL:(NSURL *)url options:(SDWebImageOptions)options {
-    [self sd_setHighlightedImageWithURL:url options:options progress:nil completed:nil];
-}
-
-- (void)sd_setHighlightedImageWithURL:(NSURL *)url completed:(SDWebImageCompletionBlock)completedBlock {
-    [self sd_setHighlightedImageWithURL:url options:0 progress:nil completed:completedBlock];
-}
-
-- (void)sd_setHighlightedImageWithURL:(NSURL *)url options:(SDWebImageOptions)options completed:(SDWebImageCompletionBlock)completedBlock {
-    [self sd_setHighlightedImageWithURL:url options:options progress:nil completed:completedBlock];
-}
-
-- (void)sd_setHighlightedImageWithURL:(NSURL *)url options:(SDWebImageOptions)options progress:(SDWebImageDownloaderProgressBlock)progressBlock completed:(SDWebImageCompletionBlock)completedBlock {
-    [self sd_cancelCurrentHighlightedImageLoad];
-
-    if (url) {
-        __weak __typeof(self)wself = self;
-        id<SDWebImageOperation> operation = [SDWebImageManager.sharedManager downloadImageWithURL:url options:options progress:progressBlock completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) {
-            if (!wself) return;
-            dispatch_main_sync_safe (^
-                                     {
-                                         if (!wself) return;
-                                         if (image && (options & SDWebImageAvoidAutoSetImage) && completedBlock)
-                                         {
-                                             completedBlock(image, error, cacheType, url);
-                                             return;
-                                         }
-                                         else if (image) {
-                                             wself.highlightedImage = image;
-                                             [wself setNeedsLayout];
-                                         }
-                                         if (completedBlock && finished) {
-                                             completedBlock(image, error, cacheType, url);
-                                         }
-                                     });
-        }];
-        [self sd_setImageLoadOperation:operation forKey:UIImageViewHighlightedWebCacheOperationKey];
-    } else {
-        dispatch_main_async_safe(^{
-            NSError *error = [NSError errorWithDomain:SDWebImageErrorDomain code:-1 userInfo:@{NSLocalizedDescriptionKey : @"Trying to load a nil url"}];
-            if (completedBlock) {
-                completedBlock(nil, error, SDImageCacheTypeNone, url);
-            }
-        });
-    }
-}
-
-- (void)sd_cancelCurrentHighlightedImageLoad {
-    [self sd_cancelImageLoadOperationWithKey:UIImageViewHighlightedWebCacheOperationKey];
-}
-
-@end
-
-
-@implementation UIImageView (HighlightedWebCacheDeprecated)
-
-- (void)setHighlightedImageWithURL:(NSURL *)url {
-    [self sd_setHighlightedImageWithURL:url options:0 progress:nil completed:nil];
-}
-
-- (void)setHighlightedImageWithURL:(NSURL *)url options:(SDWebImageOptions)options {
-    [self sd_setHighlightedImageWithURL:url options:options progress:nil completed:nil];
-}
-
-- (void)setHighlightedImageWithURL:(NSURL *)url completed:(SDWebImageCompletedBlock)completedBlock {
-    [self sd_setHighlightedImageWithURL:url options:0 progress:nil completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {
-        if (completedBlock) {
-            completedBlock(image, error, cacheType);
-        }
-    }];
-}
-
-- (void)setHighlightedImageWithURL:(NSURL *)url options:(SDWebImageOptions)options completed:(SDWebImageCompletedBlock)completedBlock {
-    [self sd_setHighlightedImageWithURL:url options:options progress:nil completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {
-        if (completedBlock) {
-            completedBlock(image, error, cacheType);
-        }
-    }];
-}
-
-- (void)setHighlightedImageWithURL:(NSURL *)url options:(SDWebImageOptions)options progress:(SDWebImageDownloaderProgressBlock)progressBlock completed:(SDWebImageCompletedBlock)completedBlock {
-    [self sd_setHighlightedImageWithURL:url options:0 progress:progressBlock completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {
-        if (completedBlock) {
-            completedBlock(image, error, cacheType);
-        }
-    }];
-}
-
-- (void)cancelCurrentHighlightedImageLoad {
-    [self sd_cancelCurrentHighlightedImageLoad];
-}
-
-@end

+ 0 - 215
KulexiuForTeacher/Pods/SDWebImage/SDWebImage/UIImageView+WebCache.h

@@ -1,215 +0,0 @@
-/*
- * This file is part of the SDWebImage package.
- * (c) Olivier Poitrey <rs@dailymotion.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-#import "SDWebImageCompat.h"
-#import "SDWebImageManager.h"
-
-/**
- * Integrates SDWebImage async downloading and caching of remote images with UIImageView.
- *
- * Usage with a UITableViewCell sub-class:
- *
- * @code
-
-#import <SDWebImage/UIImageView+WebCache.h>
-
-...
-
-- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
-{
-    static NSString *MyIdentifier = @"MyIdentifier";
- 
-    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier];
- 
-    if (cell == nil) {
-        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:MyIdentifier]
-                 autorelease];
-    }
- 
-    // Here we use the provided sd_setImageWithURL: method to load the web image
-    // Ensure you use a placeholder image otherwise cells will be initialized with no image
-    [cell.imageView sd_setImageWithURL:[NSURL URLWithString:@"http://example.com/image.jpg"]
-                      placeholderImage:[UIImage imageNamed:@"placeholder"]];
- 
-    cell.textLabel.text = @"My Text";
-    return cell;
-}
-
- * @endcode
- */
-@interface UIImageView (WebCache)
-
-/**
- * Get the current image URL.
- *
- * Note that because of the limitations of categories this property can get out of sync
- * if you use sd_setImage: directly.
- */
-- (NSURL *)sd_imageURL;
-
-/**
- * Set the imageView `image` with an `url`.
- *
- * The download is asynchronous and cached.
- *
- * @param url The url for the image.
- */
-- (void)sd_setImageWithURL:(NSURL *)url;
-
-/**
- * Set the imageView `image` with an `url` and a placeholder.
- *
- * The download is asynchronous and cached.
- *
- * @param url         The url for the image.
- * @param placeholder The image to be set initially, until the image request finishes.
- * @see sd_setImageWithURL:placeholderImage:options:
- */
-- (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder;
-
-/**
- * Set the imageView `image` with an `url`, placeholder and custom options.
- *
- * The download is asynchronous and cached.
- *
- * @param url         The url for the image.
- * @param placeholder The image to be set initially, until the image request finishes.
- * @param options     The options to use when downloading the image. @see SDWebImageOptions for the possible values.
- */
-- (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options;
-
-/**
- * Set the imageView `image` with an `url`.
- *
- * The download is asynchronous and cached.
- *
- * @param url            The url for the image.
- * @param completedBlock A block called when operation has been completed. This block has no return value
- *                       and takes the requested UIImage as first parameter. In case of error the image parameter
- *                       is nil and the second parameter may contain an NSError. The third parameter is a Boolean
- *                       indicating if the image was retrieved from the local cache or from the network.
- *                       The fourth parameter is the original image url.
- */
-- (void)sd_setImageWithURL:(NSURL *)url completed:(SDWebImageCompletionBlock)completedBlock;
-
-/**
- * Set the imageView `image` with an `url`, placeholder.
- *
- * The download is asynchronous and cached.
- *
- * @param url            The url for the image.
- * @param placeholder    The image to be set initially, until the image request finishes.
- * @param completedBlock A block called when operation has been completed. This block has no return value
- *                       and takes the requested UIImage as first parameter. In case of error the image parameter
- *                       is nil and the second parameter may contain an NSError. The third parameter is a Boolean
- *                       indicating if the image was retrieved from the local cache or from the network.
- *                       The fourth parameter is the original image url.
- */
-- (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder completed:(SDWebImageCompletionBlock)completedBlock;
-
-/**
- * Set the imageView `image` with an `url`, placeholder and custom options.
- *
- * The download is asynchronous and cached.
- *
- * @param url            The url for the image.
- * @param placeholder    The image to be set initially, until the image request finishes.
- * @param options        The options to use when downloading the image. @see SDWebImageOptions for the possible values.
- * @param completedBlock A block called when operation has been completed. This block has no return value
- *                       and takes the requested UIImage as first parameter. In case of error the image parameter
- *                       is nil and the second parameter may contain an NSError. The third parameter is a Boolean
- *                       indicating if the image was retrieved from the local cache or from the network.
- *                       The fourth parameter is the original image url.
- */
-- (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options completed:(SDWebImageCompletionBlock)completedBlock;
-
-/**
- * Set the imageView `image` with an `url`, placeholder and custom options.
- *
- * The download is asynchronous and cached.
- *
- * @param url            The url for the image.
- * @param placeholder    The image to be set initially, until the image request finishes.
- * @param options        The options to use when downloading the image. @see SDWebImageOptions for the possible values.
- * @param progressBlock  A block called while image is downloading
- * @param completedBlock A block called when operation has been completed. This block has no return value
- *                       and takes the requested UIImage as first parameter. In case of error the image parameter
- *                       is nil and the second parameter may contain an NSError. The third parameter is a Boolean
- *                       indicating if the image was retrieved from the local cache or from the network.
- *                       The fourth parameter is the original image url.
- */
-- (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options progress:(SDWebImageDownloaderProgressBlock)progressBlock completed:(SDWebImageCompletionBlock)completedBlock;
-
-/**
- * Set the imageView `image` with an `url` and optionally a placeholder image.
- *
- * The download is asynchronous and cached.
- *
- * @param url            The url for the image.
- * @param placeholder    The image to be set initially, until the image request finishes.
- * @param options        The options to use when downloading the image. @see SDWebImageOptions for the possible values.
- * @param progressBlock  A block called while image is downloading
- * @param completedBlock A block called when operation has been completed. This block has no return value
- *                       and takes the requested UIImage as first parameter. In case of error the image parameter
- *                       is nil and the second parameter may contain an NSError. The third parameter is a Boolean
- *                       indicating if the image was retrieved from the local cache or from the network.
- *                       The fourth parameter is the original image url.
- */
-- (void)sd_setImageWithPreviousCachedImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options progress:(SDWebImageDownloaderProgressBlock)progressBlock completed:(SDWebImageCompletionBlock)completedBlock;
-
-/**
- * Download an array of images and starts them in an animation loop
- *
- * @param arrayOfURLs An array of NSURL
- */
-- (void)sd_setAnimationImagesWithURLs:(NSArray *)arrayOfURLs;
-
-/**
- * Cancel the current download
- */
-- (void)sd_cancelCurrentImageLoad;
-
-- (void)sd_cancelCurrentAnimationImagesLoad;
-
-/**
- *  Show activity UIActivityIndicatorView
- */
-- (void)setShowActivityIndicatorView:(BOOL)show;
-
-/**
- *  set desired UIActivityIndicatorViewStyle
- *
- *  @param style The style of the UIActivityIndicatorView
- */
-- (void)setIndicatorStyle:(UIActivityIndicatorViewStyle)style;
-
-@end
-
-
-@interface UIImageView (WebCacheDeprecated)
-
-- (NSURL *)imageURL __deprecated_msg("Use `sd_imageURL`");
-
-- (void)setImageWithURL:(NSURL *)url __deprecated_msg("Method deprecated. Use `sd_setImageWithURL:`");
-- (void)setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder __deprecated_msg("Method deprecated. Use `sd_setImageWithURL:placeholderImage:`");
-- (void)setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options __deprecated_msg("Method deprecated. Use `sd_setImageWithURL:placeholderImage:options`");
-
-- (void)setImageWithURL:(NSURL *)url completed:(SDWebImageCompletedBlock)completedBlock __deprecated_msg("Method deprecated. Use `sd_setImageWithURL:completed:`");
-- (void)setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder completed:(SDWebImageCompletedBlock)completedBlock __deprecated_msg("Method deprecated. Use `sd_setImageWithURL:placeholderImage:completed:`");
-- (void)setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options completed:(SDWebImageCompletedBlock)completedBlock __deprecated_msg("Method deprecated. Use `sd_setImageWithURL:placeholderImage:options:completed:`");
-- (void)setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options progress:(SDWebImageDownloaderProgressBlock)progressBlock completed:(SDWebImageCompletedBlock)completedBlock __deprecated_msg("Method deprecated. Use `sd_setImageWithURL:placeholderImage:options:progress:completed:`");
-
-- (void)sd_setImageWithPreviousCachedImageWithURL:(NSURL *)url andPlaceholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options progress:(SDWebImageDownloaderProgressBlock)progressBlock completed:(SDWebImageCompletionBlock)completedBlock __deprecated_msg("Method deprecated. Use `sd_setImageWithPreviousCachedImageWithURL:placeholderImage:options:progress:completed:`");
-
-- (void)setAnimationImagesWithURLs:(NSArray *)arrayOfURLs __deprecated_msg("Use `sd_setAnimationImagesWithURLs:`");
-
-- (void)cancelCurrentArrayLoad __deprecated_msg("Use `sd_cancelCurrentAnimationImagesLoad`");
-
-- (void)cancelCurrentImageLoad __deprecated_msg("Use `sd_cancelCurrentImageLoad`");
-
-@end

+ 0 - 281
KulexiuForTeacher/Pods/SDWebImage/SDWebImage/UIImageView+WebCache.m

@@ -1,281 +0,0 @@
-/*
- * This file is part of the SDWebImage package.
- * (c) Olivier Poitrey <rs@dailymotion.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-#import "UIImageView+WebCache.h"
-#import "objc/runtime.h"
-#import "UIView+WebCacheOperation.h"
-
-static char imageURLKey;
-static char TAG_ACTIVITY_INDICATOR;
-static char TAG_ACTIVITY_STYLE;
-static char TAG_ACTIVITY_SHOW;
-
-@implementation UIImageView (WebCache)
-
-- (void)sd_setImageWithURL:(NSURL *)url {
-    [self sd_setImageWithURL:url placeholderImage:nil options:0 progress:nil completed:nil];
-}
-
-- (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder {
-    [self sd_setImageWithURL:url placeholderImage:placeholder options:0 progress:nil completed:nil];
-}
-
-- (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options {
-    [self sd_setImageWithURL:url placeholderImage:placeholder options:options progress:nil completed:nil];
-}
-
-- (void)sd_setImageWithURL:(NSURL *)url completed:(SDWebImageCompletionBlock)completedBlock {
-    [self sd_setImageWithURL:url placeholderImage:nil options:0 progress:nil completed:completedBlock];
-}
-
-- (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder completed:(SDWebImageCompletionBlock)completedBlock {
-    [self sd_setImageWithURL:url placeholderImage:placeholder options:0 progress:nil completed:completedBlock];
-}
-
-- (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options completed:(SDWebImageCompletionBlock)completedBlock {
-    [self sd_setImageWithURL:url placeholderImage:placeholder options:options progress:nil completed:completedBlock];
-}
-
-- (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options progress:(SDWebImageDownloaderProgressBlock)progressBlock completed:(SDWebImageCompletionBlock)completedBlock {
-    [self sd_cancelCurrentImageLoad];
-    objc_setAssociatedObject(self, &imageURLKey, url, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
-
-    if (!(options & SDWebImageDelayPlaceholder)) {
-        dispatch_main_async_safe(^{
-            self.image = placeholder;
-        });
-    }
-    
-    if (url) {
-
-        // check if activityView is enabled or not
-        if ([self showActivityIndicatorView]) {
-            [self addActivityIndicator];
-        }
-
-        __weak __typeof(self)wself = self;
-        id <SDWebImageOperation> operation = [SDWebImageManager.sharedManager downloadImageWithURL:url options:options progress:progressBlock completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) {
-            [wself removeActivityIndicator];
-            if (!wself) return;
-            dispatch_main_sync_safe(^{
-                if (!wself) return;
-                if (image && (options & SDWebImageAvoidAutoSetImage) && completedBlock)
-                {
-                    completedBlock(image, error, cacheType, url);
-                    return;
-                }
-                else if (image) {
-                    wself.image = image;
-                    [wself setNeedsLayout];
-                } else {
-                    if ((options & SDWebImageDelayPlaceholder)) {
-                        wself.image = placeholder;
-                        [wself setNeedsLayout];
-                    }
-                }
-                if (completedBlock && finished) {
-                    completedBlock(image, error, cacheType, url);
-                }
-            });
-        }];
-        [self sd_setImageLoadOperation:operation forKey:@"UIImageViewImageLoad"];
-    } else {
-        dispatch_main_async_safe(^{
-            [self removeActivityIndicator];
-            if (completedBlock) {
-                NSError *error = [NSError errorWithDomain:SDWebImageErrorDomain code:-1 userInfo:@{NSLocalizedDescriptionKey : @"Trying to load a nil url"}];
-                completedBlock(nil, error, SDImageCacheTypeNone, url);
-            }
-        });
-    }
-}
-
-- (void)sd_setImageWithPreviousCachedImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options progress:(SDWebImageDownloaderProgressBlock)progressBlock completed:(SDWebImageCompletionBlock)completedBlock {
-    NSString *key = [[SDWebImageManager sharedManager] cacheKeyForURL:url];
-    UIImage *lastPreviousCachedImage = [[SDImageCache sharedImageCache] imageFromDiskCacheForKey:key];
-    
-    [self sd_setImageWithURL:url placeholderImage:lastPreviousCachedImage ?: placeholder options:options progress:progressBlock completed:completedBlock];    
-}
-
-- (NSURL *)sd_imageURL {
-    return objc_getAssociatedObject(self, &imageURLKey);
-}
-
-- (void)sd_setAnimationImagesWithURLs:(NSArray *)arrayOfURLs {
-    [self sd_cancelCurrentAnimationImagesLoad];
-    __weak __typeof(self)wself = self;
-
-    NSMutableArray *operationsArray = [[NSMutableArray alloc] init];
-
-    for (NSURL *logoImageURL in arrayOfURLs) {
-        id <SDWebImageOperation> operation = [SDWebImageManager.sharedManager downloadImageWithURL:logoImageURL options:0 progress:nil completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) {
-            if (!wself) return;
-            dispatch_main_sync_safe(^{
-                __strong UIImageView *sself = wself;
-                [sself stopAnimating];
-                if (sself && image) {
-                    NSMutableArray *currentImages = [[sself animationImages] mutableCopy];
-                    if (!currentImages) {
-                        currentImages = [[NSMutableArray alloc] init];
-                    }
-                    [currentImages addObject:image];
-
-                    sself.animationImages = currentImages;
-                    [sself setNeedsLayout];
-                }
-                [sself startAnimating];
-            });
-        }];
-        [operationsArray addObject:operation];
-    }
-
-    [self sd_setImageLoadOperation:[NSArray arrayWithArray:operationsArray] forKey:@"UIImageViewAnimationImages"];
-}
-
-- (void)sd_cancelCurrentImageLoad {
-    [self sd_cancelImageLoadOperationWithKey:@"UIImageViewImageLoad"];
-}
-
-- (void)sd_cancelCurrentAnimationImagesLoad {
-    [self sd_cancelImageLoadOperationWithKey:@"UIImageViewAnimationImages"];
-}
-
-
-#pragma mark -
-- (UIActivityIndicatorView *)activityIndicator {
-    return (UIActivityIndicatorView *)objc_getAssociatedObject(self, &TAG_ACTIVITY_INDICATOR);
-}
-
-- (void)setActivityIndicator:(UIActivityIndicatorView *)activityIndicator {
-    objc_setAssociatedObject(self, &TAG_ACTIVITY_INDICATOR, activityIndicator, OBJC_ASSOCIATION_RETAIN);
-}
-
-- (void)setShowActivityIndicatorView:(BOOL)show{
-    objc_setAssociatedObject(self, &TAG_ACTIVITY_SHOW, [NSNumber numberWithBool:show], OBJC_ASSOCIATION_RETAIN);
-}
-
-- (BOOL)showActivityIndicatorView{
-    return [objc_getAssociatedObject(self, &TAG_ACTIVITY_SHOW) boolValue];
-}
-
-- (void)setIndicatorStyle:(UIActivityIndicatorViewStyle)style{
-    objc_setAssociatedObject(self, &TAG_ACTIVITY_STYLE, [NSNumber numberWithInteger:style], OBJC_ASSOCIATION_RETAIN);
-}
-
-- (int)getIndicatorStyle{
-    return [objc_getAssociatedObject(self, &TAG_ACTIVITY_STYLE) intValue];
-}
-
-- (void)addActivityIndicator {
-    if (!self.activityIndicator) {
-        self.activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:[self getIndicatorStyle]];
-        self.activityIndicator.translatesAutoresizingMaskIntoConstraints = NO;
-
-        dispatch_main_async_safe(^{
-            [self addSubview:self.activityIndicator];
-
-            [self addConstraint:[NSLayoutConstraint constraintWithItem:self.activityIndicator
-                                                             attribute:NSLayoutAttributeCenterX
-                                                             relatedBy:NSLayoutRelationEqual
-                                                                toItem:self
-                                                             attribute:NSLayoutAttributeCenterX
-                                                            multiplier:1.0
-                                                              constant:0.0]];
-            [self addConstraint:[NSLayoutConstraint constraintWithItem:self.activityIndicator
-                                                             attribute:NSLayoutAttributeCenterY
-                                                             relatedBy:NSLayoutRelationEqual
-                                                                toItem:self
-                                                             attribute:NSLayoutAttributeCenterY
-                                                            multiplier:1.0
-                                                              constant:0.0]];
-        });
-    }
-
-    dispatch_main_async_safe(^{
-        [self.activityIndicator startAnimating];
-    });
-
-}
-
-- (void)removeActivityIndicator {
-    if (self.activityIndicator) {
-        [self.activityIndicator removeFromSuperview];
-        self.activityIndicator = nil;
-    }
-}
-
-@end
-
-
-@implementation UIImageView (WebCacheDeprecated)
-
-- (NSURL *)imageURL {
-    return [self sd_imageURL];
-}
-
-- (void)setImageWithURL:(NSURL *)url {
-    [self sd_setImageWithURL:url placeholderImage:nil options:0 progress:nil completed:nil];
-}
-
-- (void)setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder {
-    [self sd_setImageWithURL:url placeholderImage:placeholder options:0 progress:nil completed:nil];
-}
-
-- (void)setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options {
-    [self sd_setImageWithURL:url placeholderImage:placeholder options:options progress:nil completed:nil];
-}
-
-- (void)setImageWithURL:(NSURL *)url completed:(SDWebImageCompletedBlock)completedBlock {
-    [self sd_setImageWithURL:url placeholderImage:nil options:0 progress:nil completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {
-        if (completedBlock) {
-            completedBlock(image, error, cacheType);
-        }
-    }];
-}
-
-- (void)setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder completed:(SDWebImageCompletedBlock)completedBlock {
-    [self sd_setImageWithURL:url placeholderImage:placeholder options:0 progress:nil completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {
-        if (completedBlock) {
-            completedBlock(image, error, cacheType);
-        }
-    }];
-}
-
-- (void)setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options completed:(SDWebImageCompletedBlock)completedBlock {
-    [self sd_setImageWithURL:url placeholderImage:placeholder options:options progress:nil completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {
-        if (completedBlock) {
-            completedBlock(image, error, cacheType);
-        }
-    }];
-}
-
-- (void)setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options progress:(SDWebImageDownloaderProgressBlock)progressBlock completed:(SDWebImageCompletedBlock)completedBlock {
-    [self sd_setImageWithURL:url placeholderImage:placeholder options:options progress:progressBlock completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {
-        if (completedBlock) {
-            completedBlock(image, error, cacheType);
-        }
-    }];
-}
-
-- (void)sd_setImageWithPreviousCachedImageWithURL:(NSURL *)url andPlaceholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options progress:(SDWebImageDownloaderProgressBlock)progressBlock completed:(SDWebImageCompletionBlock)completedBlock {
-    [self sd_setImageWithPreviousCachedImageWithURL:url placeholderImage:placeholder options:options progress:progressBlock completed:completedBlock];
-}
-
-- (void)cancelCurrentArrayLoad {
-    [self sd_cancelCurrentAnimationImagesLoad];
-}
-
-- (void)cancelCurrentImageLoad {
-    [self sd_cancelCurrentImageLoad];
-}
-
-- (void)setAnimationImagesWithURLs:(NSArray *)arrayOfURLs {
-    [self sd_setAnimationImagesWithURLs:arrayOfURLs];
-}
-
-@end

+ 0 - 36
KulexiuForTeacher/Pods/SDWebImage/SDWebImage/UIView+WebCacheOperation.h

@@ -1,36 +0,0 @@
-/*
- * This file is part of the SDWebImage package.
- * (c) Olivier Poitrey <rs@dailymotion.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-#import <UIKit/UIKit.h>
-#import "SDWebImageManager.h"
-
-@interface UIView (WebCacheOperation)
-
-/**
- *  Set the image load operation (storage in a UIView based dictionary)
- *
- *  @param operation the operation
- *  @param key       key for storing the operation
- */
-- (void)sd_setImageLoadOperation:(id)operation forKey:(NSString *)key;
-
-/**
- *  Cancel all operations for the current UIView and key
- *
- *  @param key key for identifying the operations
- */
-- (void)sd_cancelImageLoadOperationWithKey:(NSString *)key;
-
-/**
- *  Just remove the operations corresponding to the current UIView and key without cancelling them
- *
- *  @param key key for identifying the operations
- */
-- (void)sd_removeImageLoadOperationWithKey:(NSString *)key;
-
-@end

+ 0 - 55
KulexiuForTeacher/Pods/SDWebImage/SDWebImage/UIView+WebCacheOperation.m

@@ -1,55 +0,0 @@
-/*
- * This file is part of the SDWebImage package.
- * (c) Olivier Poitrey <rs@dailymotion.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-#import "UIView+WebCacheOperation.h"
-#import "objc/runtime.h"
-
-static char loadOperationKey;
-
-@implementation UIView (WebCacheOperation)
-
-- (NSMutableDictionary *)operationDictionary {
-    NSMutableDictionary *operations = objc_getAssociatedObject(self, &loadOperationKey);
-    if (operations) {
-        return operations;
-    }
-    operations = [NSMutableDictionary dictionary];
-    objc_setAssociatedObject(self, &loadOperationKey, operations, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
-    return operations;
-}
-
-- (void)sd_setImageLoadOperation:(id)operation forKey:(NSString *)key {
-    [self sd_cancelImageLoadOperationWithKey:key];
-    NSMutableDictionary *operationDictionary = [self operationDictionary];
-    [operationDictionary setObject:operation forKey:key];
-}
-
-- (void)sd_cancelImageLoadOperationWithKey:(NSString *)key {
-    // Cancel in progress downloader from queue
-    NSMutableDictionary *operationDictionary = [self operationDictionary];
-    id operations = [operationDictionary objectForKey:key];
-    if (operations) {
-        if ([operations isKindOfClass:[NSArray class]]) {
-            for (id <SDWebImageOperation> operation in operations) {
-                if (operation) {
-                    [operation cancel];
-                }
-            }
-        } else if ([operations conformsToProtocol:@protocol(SDWebImageOperation)]){
-            [(id<SDWebImageOperation>) operations cancel];
-        }
-        [operationDictionary removeObjectForKey:key];
-    }
-}
-
-- (void)sd_removeImageLoadOperationWithKey:(NSString *)key {
-    NSMutableDictionary *operationDictionary = [self operationDictionary];
-    [operationDictionary removeObjectForKey:key];
-}
-
-@end

+ 1 - 1
KulexiuForTeacher/Pods/Target Support Files/Pods-KulexiuForTeacher/Pods-KulexiuForTeacher-acknowledgements.markdown

@@ -249,7 +249,7 @@ Copyright 2021 RongCloud
 
 ## SDWebImage
 
-Copyright (c) 2016 Olivier Poitrey rs@dailymotion.com
+Copyright (c) 2009-2020 Olivier Poitrey rs@dailymotion.com
  
 Permission is hereby granted, free of charge, to any person obtaining a copy
 of this software and associated documentation files (the "Software"), to deal

+ 1 - 1
KulexiuForTeacher/Pods/Target Support Files/Pods-KulexiuForTeacher/Pods-KulexiuForTeacher-acknowledgements.plist

@@ -350,7 +350,7 @@ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
 		</dict>
 		<dict>
 			<key>FooterText</key>
-			<string>Copyright (c) 2016 Olivier Poitrey rs@dailymotion.com
+			<string>Copyright (c) 2009-2020 Olivier Poitrey rs@dailymotion.com
  
 Permission is hereby granted, free of charge, to any person obtaining a copy
 of this software and associated documentation files (the "Software"), to deal

+ 2 - 0
KulexiuForTeacher/Pods/Target Support Files/SDWebImage/SDWebImage.debug.xcconfig

@@ -1,5 +1,6 @@
 CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
 CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage
+DERIVE_MACCATALYST_PRODUCT_BUNDLE_IDENTIFIER = NO
 GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
 HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/SDWebImage" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/SDWebImage"
 PODS_BUILD_DIR = ${BUILD_DIR}
@@ -9,4 +10,5 @@ PODS_TARGET_SRCROOT = ${PODS_ROOT}/SDWebImage
 PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates
 PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
 SKIP_INSTALL = YES
+SUPPORTS_MACCATALYST = YES
 USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES

+ 2 - 0
KulexiuForTeacher/Pods/Target Support Files/SDWebImage/SDWebImage.release.xcconfig

@@ -1,5 +1,6 @@
 CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
 CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage
+DERIVE_MACCATALYST_PRODUCT_BUNDLE_IDENTIFIER = NO
 GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
 HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/SDWebImage" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/SDWebImage"
 PODS_BUILD_DIR = ${BUILD_DIR}
@@ -9,4 +10,5 @@ PODS_TARGET_SRCROOT = ${PODS_ROOT}/SDWebImage
 PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates
 PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
 SKIP_INSTALL = YES
+SUPPORTS_MACCATALYST = YES
 USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES

二進制
KulexiuForTeacher/build/Debug-iphonesimulator/KulexiuForTeacher.app/Assets.car


二進制
KulexiuForTeacher/build/Debug-iphonesimulator/KulexiuForTeacher.app/KulexiuForTeacher


二進制
KulexiuForTeacher/build/Debug-iphonesimulator/KulexiuForTeacher.app/PasswordBodyView.nib


Some files were not shown because too many files changed in this diff