From 71ef4fb3a70e0179af0d4632e8e52f165e02d541 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=90=E5=96=84=E6=A0=8B?= Date: Tue, 9 Aug 2022 16:30:54 +0800 Subject: [PATCH 1/2] =?UTF-8?q?pod=20=E6=B7=BB=E5=8A=A0=E8=AF=B4=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Podfile | 17 ++++++++++++++++- app/AppDelegate.swift | 3 +-- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/Podfile b/Podfile index f7610bb3..30784b8f 100644 --- a/Podfile +++ b/Podfile @@ -5,14 +5,30 @@ target 'app' do # Comment the next line if you don't want to use dynamic frameworks use_frameworks! + #登录组件 pod 'YXLogin', '1.0.0' + #可选UI库 pod 'NEContactUIKit', '9.2.6-rc01' pod 'NEQChatUIKit', '9.2.6-rc01' pod 'NEConversationUIKit', '9.2.6-rc01' pod 'NEChatUIKit', '9.2.6-rc01' pod 'NETeamUIKit', '9.2.6-rc01' + + #可选Kit库(和UIKit对应) + pod 'NEContactKit', '9.2.6-rc01' + pod 'NEQChatKit', '9.2.6-rc01' + pod 'NEConversationKit', '9.2.6-rc01' + pod 'NEChatKit', '9.2.6-rc01' + pod 'NETeamKit', '9.2.6-rc01' + + #基础kit库 + pod 'NECommonUIKit', '9.2.6-rc01' + pod 'NECommonKit', '9.2.6-rc01' + pod 'NECoreIMKit', '9.2.6-rc01' + pod 'NECoreKit', '9.2.6-rc01' + # 如果需要查看UI部分源码请注释掉以上在线依赖,打开下面的本地依赖 # pod 'NEChatKit', '9.2.6-rc01' @@ -25,7 +41,6 @@ target 'app' do # pod 'NEKitQChatUI', :path => 'NEQChatUIKit/NEKitQChatUI.podspec' # pod 'NEKitContactUI', :path => 'NEContactUIKit/NEKitContactUI.podspec' # pod 'NEKitConversationUI', :path => 'NEConversationUIKit/NEKitConversationUI.podspec' -# pod 'NEKitCommonUI', :path => 'NECommonUIKit/NEKitCommonUI.podspec' # pod 'NEKitTeamUI', :path => 'NETeamUIKit/NEKitTeamUI.podspec' # pod 'NEKitChatUI', :path => 'NEChatUIKit/NEKitChatUI.podspec' # diff --git a/app/AppDelegate.swift b/app/AppDelegate.swift index c47a70e4..dfb682fd 100644 --- a/app/AppDelegate.swift +++ b/app/AppDelegate.swift @@ -39,7 +39,6 @@ class AppDelegate: UIResponder, UIApplicationDelegate, UNUserNotificationCenterD //login action startLogin(account: <#imaccid#>, token: <#imToken#>) - } @objc func refreshRoot(){ @@ -76,7 +75,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate, UNUserNotificationCenterD } func application(_ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error) { - QChatLog.infoLog("app delegate : ", desc: error.localizedDescription) + NELog.infoLog("app delegate : ", desc: error.localizedDescription) } func startLogin(account:String,token:String){ From ea8fc98e741f5be9d66d0cf945556c5f4632f627 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=90=E5=96=84=E6=A0=8B?= Date: Tue, 9 Aug 2022 16:34:28 +0800 Subject: [PATCH 2/2] =?UTF-8?q?commonUI=E9=97=AD=E6=BA=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- NECommonUIKit/NEKitCommonUI.podspec | 48 --- NECommonUIKit/NEKitCommonUI/Assets/.gitkeep | 0 .../Assets/NECommonUI.xcassets/Contents.json | 6 - .../NECommonUI.xcassets/common/Contents.json | 6 - .../common/close_btn.imageset/Contents.json | 22 -- .../close_btn.imageset/close_btn@2x.png | Bin 1327 -> 0 bytes .../close_btn.imageset/close_btn@3x.png | Bin 1898 -> 0 bytes .../common/photo_btn.imageset/Contents.json | 22 -- .../photo_btn.imageset/photo_btn@2x.png | Bin 1112 -> 0 bytes .../photo_btn.imageset/photo_btn@3x.png | Bin 1646 -> 0 bytes .../common/save_btn.imageset/Contents.json | 22 -- .../common/save_btn.imageset/save_btn@2x.png | Bin 1306 -> 0 bytes .../common/save_btn.imageset/save_btn@3x.png | Bin 1912 -> 0 bytes .../common/thumb.imageset/Contents.json | 22 -- .../common/thumb.imageset/thumb@2x.png | Bin 385 -> 0 bytes .../common/thumb.imageset/thumb@3x.png | Bin 571 -> 0 bytes .../common/video_play.imageset/Contents.json | 22 -- .../video_play.imageset/video_play@2x.png | Bin 2635 -> 0 bytes .../video_play.imageset/video_play@3x.png | Bin 4117 -> 0 bytes .../video_play_big.imageset/Contents.json | 22 -- .../video_play_big@2x.png | Bin 3670 -> 0 bytes .../video_play_big@3x.png | Bin 5272 -> 0 bytes .../video_play_icon.imageset/Contents.json | 22 -- .../video_play@2x.png | Bin 413 -> 0 bytes .../video_play@3x.png | Bin 584 -> 0 bytes .../video_stop_icon.imageset/Contents.json | 22 -- .../video_stop@2x.png | Bin 294 -> 0 bytes .../video_stop@3x.png | Bin 373 -> 0 bytes .../white_right_img.imageset/Contents.json | 22 -- .../white_right@2x.png | Bin 376 -> 0 bytes .../white_right@3x.png | Bin 511 -> 0 bytes .../placeholder/Contents.json | 6 - .../emptyView.imageset/Contents.json | 22 -- .../emptyView.imageset/Frame 1020@2x.png | Bin 6493 -> 0 bytes .../emptyView.imageset/Frame 1020@3x.png | Bin 10997 -> 0 bytes .../user_empty.imageset/Contents.json | 22 -- .../user_empty.imageset/user_empty@2x.png | Bin 9958 -> 0 bytes .../user_empty.imageset/user_empty@3x.png | Bin 7154 -> 0 bytes .../Assets/en.lproj/Localizable.strings | 13 - .../Assets/zh-Hans.lproj/Localizable.strings | 11 - NECommonUIKit/NEKitCommonUI/Classes/.gitkeep | 0 .../NEKitCommonUI/Classes/Constant.swift | 15 - .../NEKitCommonUI/Classes/ExpandButton.swift | 28 -- .../Classes/NEBrokenNetworkView.swift | 40 --- .../Classes/NEButtonExtension.swift | 114 ------ .../Classes/NEEmptyDataView.swift | 73 ---- .../Classes/NEUserHeaderView.swift | 58 --- .../PhotoBrowserBigImgBackView.swift | 274 --------------- .../PhotoBrowser/PhotoBrowserCell.swift | 329 ------------------ .../PhotoBrowser/PhotoBrowserController.swift | 136 -------- .../PhotoBrowser/PhotoBrowserFlowLayout.swift | 81 ----- .../Classes/PopListViewController.swift | 121 ------- .../NEKitCommonUI/Classes/RedAngleLabel.swift | 26 -- .../Classes/SearchTextField.swift | 35 -- .../Classes/TabbarExtensionView.swift | 46 --- .../Classes/UIAlertController.swift | 16 - .../NEKitCommonUI/Classes/UIImageView.swift | 124 ------- .../VideoPlayerViewController.swift | 241 ------------- .../Classes/VideoBrowser/VideoToolBar.swift | 146 -------- .../Classes/View/BrowserToolsBar.swift | 98 ------ .../Classes/View/CornerCell.swift | 98 ------ .../Classes/View/TextBaseCell.swift | 67 ---- .../Classes/View/ToastImageView.swift | 66 ---- .../Classes/View/VideoStateView.swift | 168 --------- .../Classes/ViewControllerExtension.swift | 270 -------------- 65 files changed, 3002 deletions(-) delete mode 100644 NECommonUIKit/NEKitCommonUI.podspec delete mode 100644 NECommonUIKit/NEKitCommonUI/Assets/.gitkeep delete mode 100644 NECommonUIKit/NEKitCommonUI/Assets/NECommonUI.xcassets/Contents.json delete mode 100644 NECommonUIKit/NEKitCommonUI/Assets/NECommonUI.xcassets/common/Contents.json delete mode 100644 NECommonUIKit/NEKitCommonUI/Assets/NECommonUI.xcassets/common/close_btn.imageset/Contents.json delete mode 100644 NECommonUIKit/NEKitCommonUI/Assets/NECommonUI.xcassets/common/close_btn.imageset/close_btn@2x.png delete mode 100644 NECommonUIKit/NEKitCommonUI/Assets/NECommonUI.xcassets/common/close_btn.imageset/close_btn@3x.png delete mode 100644 NECommonUIKit/NEKitCommonUI/Assets/NECommonUI.xcassets/common/photo_btn.imageset/Contents.json delete mode 100644 NECommonUIKit/NEKitCommonUI/Assets/NECommonUI.xcassets/common/photo_btn.imageset/photo_btn@2x.png delete mode 100644 NECommonUIKit/NEKitCommonUI/Assets/NECommonUI.xcassets/common/photo_btn.imageset/photo_btn@3x.png delete mode 100644 NECommonUIKit/NEKitCommonUI/Assets/NECommonUI.xcassets/common/save_btn.imageset/Contents.json delete mode 100644 NECommonUIKit/NEKitCommonUI/Assets/NECommonUI.xcassets/common/save_btn.imageset/save_btn@2x.png delete mode 100644 NECommonUIKit/NEKitCommonUI/Assets/NECommonUI.xcassets/common/save_btn.imageset/save_btn@3x.png delete mode 100644 NECommonUIKit/NEKitCommonUI/Assets/NECommonUI.xcassets/common/thumb.imageset/Contents.json delete mode 100644 NECommonUIKit/NEKitCommonUI/Assets/NECommonUI.xcassets/common/thumb.imageset/thumb@2x.png delete mode 100644 NECommonUIKit/NEKitCommonUI/Assets/NECommonUI.xcassets/common/thumb.imageset/thumb@3x.png delete mode 100644 NECommonUIKit/NEKitCommonUI/Assets/NECommonUI.xcassets/common/video_play.imageset/Contents.json delete mode 100644 NECommonUIKit/NEKitCommonUI/Assets/NECommonUI.xcassets/common/video_play.imageset/video_play@2x.png delete mode 100644 NECommonUIKit/NEKitCommonUI/Assets/NECommonUI.xcassets/common/video_play.imageset/video_play@3x.png delete mode 100644 NECommonUIKit/NEKitCommonUI/Assets/NECommonUI.xcassets/common/video_play_big.imageset/Contents.json delete mode 100644 NECommonUIKit/NEKitCommonUI/Assets/NECommonUI.xcassets/common/video_play_big.imageset/video_play_big@2x.png delete mode 100644 NECommonUIKit/NEKitCommonUI/Assets/NECommonUI.xcassets/common/video_play_big.imageset/video_play_big@3x.png delete mode 100644 NECommonUIKit/NEKitCommonUI/Assets/NECommonUI.xcassets/common/video_play_icon.imageset/Contents.json delete mode 100644 NECommonUIKit/NEKitCommonUI/Assets/NECommonUI.xcassets/common/video_play_icon.imageset/video_play@2x.png delete mode 100644 NECommonUIKit/NEKitCommonUI/Assets/NECommonUI.xcassets/common/video_play_icon.imageset/video_play@3x.png delete mode 100644 NECommonUIKit/NEKitCommonUI/Assets/NECommonUI.xcassets/common/video_stop_icon.imageset/Contents.json delete mode 100644 NECommonUIKit/NEKitCommonUI/Assets/NECommonUI.xcassets/common/video_stop_icon.imageset/video_stop@2x.png delete mode 100644 NECommonUIKit/NEKitCommonUI/Assets/NECommonUI.xcassets/common/video_stop_icon.imageset/video_stop@3x.png delete mode 100644 NECommonUIKit/NEKitCommonUI/Assets/NECommonUI.xcassets/common/white_right_img.imageset/Contents.json delete mode 100644 NECommonUIKit/NEKitCommonUI/Assets/NECommonUI.xcassets/common/white_right_img.imageset/white_right@2x.png delete mode 100644 NECommonUIKit/NEKitCommonUI/Assets/NECommonUI.xcassets/common/white_right_img.imageset/white_right@3x.png delete mode 100644 NECommonUIKit/NEKitCommonUI/Assets/NECommonUI.xcassets/placeholder/Contents.json delete mode 100644 NECommonUIKit/NEKitCommonUI/Assets/NECommonUI.xcassets/placeholder/emptyView.imageset/Contents.json delete mode 100644 NECommonUIKit/NEKitCommonUI/Assets/NECommonUI.xcassets/placeholder/emptyView.imageset/Frame 1020@2x.png delete mode 100644 NECommonUIKit/NEKitCommonUI/Assets/NECommonUI.xcassets/placeholder/emptyView.imageset/Frame 1020@3x.png delete mode 100644 NECommonUIKit/NEKitCommonUI/Assets/NECommonUI.xcassets/placeholder/user_empty.imageset/Contents.json delete mode 100644 NECommonUIKit/NEKitCommonUI/Assets/NECommonUI.xcassets/placeholder/user_empty.imageset/user_empty@2x.png delete mode 100644 NECommonUIKit/NEKitCommonUI/Assets/NECommonUI.xcassets/placeholder/user_empty.imageset/user_empty@3x.png delete mode 100644 NECommonUIKit/NEKitCommonUI/Assets/en.lproj/Localizable.strings delete mode 100644 NECommonUIKit/NEKitCommonUI/Assets/zh-Hans.lproj/Localizable.strings delete mode 100644 NECommonUIKit/NEKitCommonUI/Classes/.gitkeep delete mode 100644 NECommonUIKit/NEKitCommonUI/Classes/Constant.swift delete mode 100644 NECommonUIKit/NEKitCommonUI/Classes/ExpandButton.swift delete mode 100644 NECommonUIKit/NEKitCommonUI/Classes/NEBrokenNetworkView.swift delete mode 100644 NECommonUIKit/NEKitCommonUI/Classes/NEButtonExtension.swift delete mode 100644 NECommonUIKit/NEKitCommonUI/Classes/NEEmptyDataView.swift delete mode 100644 NECommonUIKit/NEKitCommonUI/Classes/NEUserHeaderView.swift delete mode 100644 NECommonUIKit/NEKitCommonUI/Classes/PhotoBrowser/PhotoBrowserBigImgBackView.swift delete mode 100644 NECommonUIKit/NEKitCommonUI/Classes/PhotoBrowser/PhotoBrowserCell.swift delete mode 100644 NECommonUIKit/NEKitCommonUI/Classes/PhotoBrowser/PhotoBrowserController.swift delete mode 100644 NECommonUIKit/NEKitCommonUI/Classes/PhotoBrowser/PhotoBrowserFlowLayout.swift delete mode 100644 NECommonUIKit/NEKitCommonUI/Classes/PopListViewController.swift delete mode 100644 NECommonUIKit/NEKitCommonUI/Classes/RedAngleLabel.swift delete mode 100644 NECommonUIKit/NEKitCommonUI/Classes/SearchTextField.swift delete mode 100644 NECommonUIKit/NEKitCommonUI/Classes/TabbarExtensionView.swift delete mode 100644 NECommonUIKit/NEKitCommonUI/Classes/UIAlertController.swift delete mode 100644 NECommonUIKit/NEKitCommonUI/Classes/UIImageView.swift delete mode 100644 NECommonUIKit/NEKitCommonUI/Classes/VideoBrowser/VideoPlayerViewController.swift delete mode 100644 NECommonUIKit/NEKitCommonUI/Classes/VideoBrowser/VideoToolBar.swift delete mode 100644 NECommonUIKit/NEKitCommonUI/Classes/View/BrowserToolsBar.swift delete mode 100644 NECommonUIKit/NEKitCommonUI/Classes/View/CornerCell.swift delete mode 100644 NECommonUIKit/NEKitCommonUI/Classes/View/TextBaseCell.swift delete mode 100644 NECommonUIKit/NEKitCommonUI/Classes/View/ToastImageView.swift delete mode 100644 NECommonUIKit/NEKitCommonUI/Classes/View/VideoStateView.swift delete mode 100644 NECommonUIKit/NEKitCommonUI/Classes/ViewControllerExtension.swift diff --git a/NECommonUIKit/NEKitCommonUI.podspec b/NECommonUIKit/NEKitCommonUI.podspec deleted file mode 100644 index 95cb563e..00000000 --- a/NECommonUIKit/NEKitCommonUI.podspec +++ /dev/null @@ -1,48 +0,0 @@ -# -# Be sure to run `pod lib lint NEKitCommonUI.podspec' to ensure this is a -# valid spec before submitting. -# -# Any lines starting with a # are optional, but their use is encouraged -# To learn more about a Podspec see https://guides.cocoapods.org/syntax/podspec.html -# - -Pod::Spec.new do |s| - s.name = 'NEKitCommonUI' - s.version = '9.2.6-rc01' - s.summary = 'Netease XKit' - -# This description is used to generate tags and improve search results. -# * Think: What does it do? Why did you write it? What is the focus? -# * Try to keep it short, snappy and to the point. -# * Write the description between the DESC delimiters below. -# * Finally, don't worry about the indent, CocoaPods strips it! - - s.description = <<-DESC -TODO: Add long description of the pod here. - DESC - - s.homepage = 'http://netease.im' - # s.screenshots = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2' - s.license = { :'type' => 'Copyright', :'text' => ' Copyright 2022 Netease '} - s.author = 'yunxin engineering department' - s.source = { :git => 'ssh://git@g.hz.netease.com:22222/yunxin-app/xkit-ios.git', :tag => s.version.to_s } - # s.social_media_url = 'https://twitter.com/' - - s.ios.deployment_target = '9.0' - - s.source_files = 'NEKitCommonUI/Classes/**/*' - s.resource = 'NEKitCommonUI/Assets/**/*' - - # s.resource_bundles = { - # 'NEKitCommonUI' => ['NEKitCommonUI/Assets/*.png'] - # } - - # s.public_header_files = 'Pod/Classes/**/*.h' - # s.frameworks = 'UIKit', 'MapKit' - - s.dependency 'NECommonKit' - s.dependency 'Toast-Swift' - s.dependency 'MJRefresh' - s.dependency 'Toast' - s.dependency 'RSKPlaceholderTextView' -end diff --git a/NECommonUIKit/NEKitCommonUI/Assets/.gitkeep b/NECommonUIKit/NEKitCommonUI/Assets/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/NECommonUIKit/NEKitCommonUI/Assets/NECommonUI.xcassets/Contents.json b/NECommonUIKit/NEKitCommonUI/Assets/NECommonUI.xcassets/Contents.json deleted file mode 100644 index 73c00596..00000000 --- a/NECommonUIKit/NEKitCommonUI/Assets/NECommonUI.xcassets/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/NECommonUIKit/NEKitCommonUI/Assets/NECommonUI.xcassets/common/Contents.json b/NECommonUIKit/NEKitCommonUI/Assets/NECommonUI.xcassets/common/Contents.json deleted file mode 100644 index 73c00596..00000000 --- a/NECommonUIKit/NEKitCommonUI/Assets/NECommonUI.xcassets/common/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/NECommonUIKit/NEKitCommonUI/Assets/NECommonUI.xcassets/common/close_btn.imageset/Contents.json b/NECommonUIKit/NEKitCommonUI/Assets/NECommonUI.xcassets/common/close_btn.imageset/Contents.json deleted file mode 100644 index b1692492..00000000 --- a/NECommonUIKit/NEKitCommonUI/Assets/NECommonUI.xcassets/common/close_btn.imageset/Contents.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x" - }, - { - "filename" : "close_btn@2x.png", - "idiom" : "universal", - "scale" : "2x" - }, - { - "filename" : "close_btn@3x.png", - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/NECommonUIKit/NEKitCommonUI/Assets/NECommonUI.xcassets/common/close_btn.imageset/close_btn@2x.png b/NECommonUIKit/NEKitCommonUI/Assets/NECommonUI.xcassets/common/close_btn.imageset/close_btn@2x.png deleted file mode 100644 index 6956c76e11f28d993d585cc07eac1bc2234dd019..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1327 zcmV+~11K~#7F)tkFd z<5(2NPhx_C04dv0P-O`((Ja$tt1+VCB`sSn&CV1^yA|1LOETR|7aBApgai$un~Vg3 zkw9ergV2otDU>4`G6Fv%^z@8B zK0b~|qtV|U9v;T|av~CmB+c*R`{#V^oQoAMf8lazXJ@BK9upxC&_$_ST;i7|h{UMy ztH@u z>G^m(e#FHoe#NOhsEVS@4-O7~KRrDyx%r@D3&Lu>y}ipE5Hj?P@c+-<+}yk=7K;@p z?{_3{YHBLk(b4gdeg=?d2krCj?ry?~%eE8#mzm!qV>SKzqEpx_V*mBkNq0`?|lwDh{CToI=(mA~g%@oq3tUPv!dh z`d7n>H4AbiS|$M|Cnsrpdz;qR*R`@N9y~8$wqi{n4^CAQU}0f_ID%1MUms;M87YzY zES_OJZ*g&v1X(h=4NV{-r)b+lWz2|*G{l+Vq?!atbai#9C};xNdVi20Yinyw*W8M< z5(l=nwn!9ia!c9~e};#L-;?0ju3RqD#l;1s)9JeFILCF|e+oNsxm=D84-ZL#M1Oz( z2W4(EBp`#kei|n=Ew)^EZK-(;&c*G z@)1-V0_^ZvoQAIggMhCBTeU;k+|>!n(9jS@@SabH;I( z<~wCDIOP@tncuD-)<=VU`kL| z8rLRr@LviksC%_q-7sIP69_AE=lCCm6c*UDX{c#^@Z{v=D`z*qa4}8cVub@s)4HbR zc#vH+OOl;`JArHRic;3M_JV?u2&`}-KH+q0rR)8o`Zkm0XK>jH zTkZAU-d^6#hg|O$#eU6HD)osMHoo(zO8$fB_>Q}QzYY!#Tz6ekTblI%l;z?}A1tcn z#w;x7bZ@8?o@`17a9w>VTqU_p=?EYzx3{-N8DR#V2{eOMWBjaut@@Hr6WHKj^Roiv lz9k-PALGc@DtRHw%n#K1(RIgo(wG1M002ovPDHLkV1j$gWCQ>J diff --git a/NECommonUIKit/NEKitCommonUI/Assets/NECommonUI.xcassets/common/close_btn.imageset/close_btn@3x.png b/NECommonUIKit/NEKitCommonUI/Assets/NECommonUI.xcassets/common/close_btn.imageset/close_btn@3x.png deleted file mode 100644 index 97214dd6113d2da8699e3fd9744b4e90fa5af27d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1898 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 Q3;+NC07*qoM6N<$f|s;gH~;_u diff --git a/NECommonUIKit/NEKitCommonUI/Assets/NECommonUI.xcassets/common/save_btn.imageset/save_btn@3x.png b/NECommonUIKit/NEKitCommonUI/Assets/NECommonUI.xcassets/common/save_btn.imageset/save_btn@3x.png deleted file mode 100644 index 26f479179d968c39e6a4b2b994a4e13bf4e3c608..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1912 zcmV-;2Z#8HP)eRzI;j$y;^_&k(<-`?InBA+QEABe}}(em>0VHV+M zobnbWF+gDD>FH^WH)VHs_mVuuGeJ{C?4|!j^a6;x?4`J_3)zbetl6Mp2oi$p*ZDEBA+TPwCi$o${`LK^9#w}sPBoMaB3GS(v`0yi1 z4mUv``CiBB>+9+C^z=^>gb)kWtnwQbfsjUE$aQ~z-y*_V3%1ano}Mp!L%;K3jEa{i zTkCLLUERNDXJ?0000jx!-QE3_+oDN6d`HF4J2s5=LYn|bE{`!~MMVW%JWj6@<@)-% zUs05#&A+oRXtB4KR$PpgbM|Y;NoN(ZdLi5#mRTxd0({nR zIQ$Kt-Rj?17F269U$vVXf$^&L*)3tIm&bsecf(Y=#CS**WD8`v=`oB?$ z!yF0@-a#z8Oeu-hfijmRK)DBwI1DfF>7mUX=G%C8X6kt;^Knl z=H}GB4@A*P@%~e;3v#-=)^7S9F{-MnqM4Z)s;;h9&nqh{skynCc6N4%hcx6h?D{|Q z(^MHhO({mdH|*u%>b#pI321C=B#!i_y@vDF)>iV7FPcVK7z)Z}JwcL?DQ3RcJtC^b ze6z?B6w0$%4^u!s`m|YzG_nMh$vTUGEUnT64Xo2P@k}dC6Ev_+`(Q>l_54N9z&f3Q z>G9Oy$%~*o1rVnIC#VS=`bnywpDDl*S~iS|DyTL{jZ=VA;=0?b&+=ZlI|kw$xl*6U zu~}thWd)OgS+5Tc4${WP23ZBq{_E@Ow7XBc7uEZ5fjEAIQcv7sdV1Qe4`CbJ2kuAoqpOyhNuiF84oqvf7NSECLl!Z0 za6f2%1QQ(?82AuE)-bt9Z?CJZiDTSodTwuTTj27pPQ2CB)R2t0At;O!g8oDSLcsa} z2pY^62?F!@p;Ag*a2u>x3Gt7>LIo1Iyg*c!rvRZu$VXOJS7~i+O+9XFYg6amWqeON z_$KJW!otf32ROdIzE+>NoiaN+n-=`Qd%l1FUX3Am1$y~Q@`1g*y{y+D21Ic}rkFa2 zFnLH)x;E5_sJX=S8XhqvL)xld&oK*5*bz0Km|kX>z}qAI;~y54yaw&s)zwu_G4$8X zB2`wz9334cuV5{|NBpu-pm#uKqUMTQqHVmnxuIM@%tAUiC$N@Bp{J*(OY#wXXfwCW zC7Ntv0u(}kpbGg+K2h!9mzV(F9@4ULZ7*;VjR;Zw6q8A!M29|XQb+;{5!Gig(IKhJ z8C5~qRD~^XE)*xC`Yk44K@-@kf`-H4C6Wj`qRJp9(EB1)&_p7kR+Ax#up+7~Vlpp9 zVqP9S+3nXzGR#DkNK9DgvVQy`sOI**_x70>i7JzrAa&@O_RQJY*}24)Dl`kvPX3V@ zhlhu1ev;kXC^L+5rtE@ZFk4$&zv$;_@lY0XiFZ<_HDY-UHrYUBoz(NR@ZIL-rb3c+ zPBH`Q%v`2u6c3#ufgB$nlZ=R1+L&pbAWKlqN)sdqSp_XLl5b?4z%XL}@bK^}3F`52 zVLypPwh|>+63Y0ePcX;EEo)sj12D<%B8_b9{W*K>-4LBv8(5;y<&N~liSk+D&4hA3J)h+ ztXyb0(Sh62e%>8XiGh-BsDo$qdfTPiI4X5uPzwE3f*zg6o9>iq19)Tn11bSa)rtw) zF4Af{w+a7%-5;VV^m%ZZ9zFW+)+)EL79jmXO24{$IYsh7BH0pVIfoG z(OwXH`Bax-t_u6YZe8iY}sv6GQz!?n?tfid}Zbqr}H?r z8ubPpdbnNkpKHCB$+}DPCs{fj{U%i|$ydB&|B)cc`G2?P$}HYgKEpV(G{${H%liWo zBDW5D`>FLthz0iONb$xeK6w?TwYKQl5&2ibIX4QtgKta>D&VsYyK~7pt~@y>i;IhA z<^c(=Ya13XOJKF;;)+W+-rHpP=ET|c+qQZ0cbpGi{M#nBG(v&z{40x>^A5{Ck`a7% zrzS@5{iS1SC$9ITE;4FSxOacbCHbf`EdP}Rdp2;3#2vQ3Qe%DdWbEqrgZINKJFeC< Yu=70fk1+ma0Sqw)Pgg&ebxsLQ08dkrm;e9( diff --git a/NECommonUIKit/NEKitCommonUI/Assets/NECommonUI.xcassets/common/thumb.imageset/thumb@3x.png b/NECommonUIKit/NEKitCommonUI/Assets/NECommonUI.xcassets/common/thumb.imageset/thumb@3x.png deleted file mode 100644 index 134e0c241ff8893adcd74aefb289359089eecebe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 571 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 diff --git a/NECommonUIKit/NEKitCommonUI/Assets/NECommonUI.xcassets/common/video_play_big.imageset/Contents.json b/NECommonUIKit/NEKitCommonUI/Assets/NECommonUI.xcassets/common/video_play_big.imageset/Contents.json deleted file mode 100644 index 6a1dcb52..00000000 --- a/NECommonUIKit/NEKitCommonUI/Assets/NECommonUI.xcassets/common/video_play_big.imageset/Contents.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x" - }, - { - "filename" : "video_play_big@2x.png", - "idiom" : "universal", - "scale" : "2x" - }, - { - "filename" : "video_play_big@3x.png", - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/NECommonUIKit/NEKitCommonUI/Assets/NECommonUI.xcassets/common/video_play_big.imageset/video_play_big@2x.png b/NECommonUIKit/NEKitCommonUI/Assets/NECommonUI.xcassets/common/video_play_big.imageset/video_play_big@2x.png deleted file mode 100644 index b1914957fa7fc9d595fa19f6229e74bdade00c08..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3670 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 C?bR{> diff --git a/NECommonUIKit/NEKitCommonUI/Assets/NECommonUI.xcassets/common/video_play_big.imageset/video_play_big@3x.png b/NECommonUIKit/NEKitCommonUI/Assets/NECommonUI.xcassets/common/video_play_big.imageset/video_play_big@3x.png deleted file mode 100644 index e4393c8eb9aa28052a8a9b68bed65460fbcc0bae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5272 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 bd;H{%k{H1IwTk6^+uyB@23WmH)js-vpVtR4 diff --git a/NECommonUIKit/NEKitCommonUI/Assets/NECommonUI.xcassets/common/video_play_icon.imageset/Contents.json b/NECommonUIKit/NEKitCommonUI/Assets/NECommonUI.xcassets/common/video_play_icon.imageset/Contents.json deleted file mode 100644 index 0f8bd751..00000000 --- a/NECommonUIKit/NEKitCommonUI/Assets/NECommonUI.xcassets/common/video_play_icon.imageset/Contents.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x" - }, - { - "filename" : "video_play@2x.png", - "idiom" : "universal", - "scale" : "2x" - }, - { - "filename" : "video_play@3x.png", - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/NECommonUIKit/NEKitCommonUI/Assets/NECommonUI.xcassets/common/video_play_icon.imageset/video_play@2x.png b/NECommonUIKit/NEKitCommonUI/Assets/NECommonUI.xcassets/common/video_play_icon.imageset/video_play@2x.png deleted file mode 100644 index 4faa6003f4893f6f1bbc0ca3d5496d14f1dacd61..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 413 zcmV;O0b>4%P)dOq-_J4!?Y(GPE3-lEa`+ zr6x0E&*^wd>l$P(e3V+ITTE(@k!AXqGQU$Cp0-yrZDjsY-u=S_00000NkvXX Hu0mjf*Dax| diff --git a/NECommonUIKit/NEKitCommonUI/Assets/NECommonUI.xcassets/common/video_play_icon.imageset/video_play@3x.png b/NECommonUIKit/NEKitCommonUI/Assets/NECommonUI.xcassets/common/video_play_icon.imageset/video_play@3x.png deleted file mode 100644 index 90f2695d92cf6a502ea1225fb94de5fef4a82335..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 584 zcmV-O0=NB%P){JjsuuDh>QU^%~H@jo|#{&X`9xI)h`-K@e zv%Y?c06cLTbQn&>nNzOx0%JsMLpjp_`E$r;Ysv{+hskC)#55}PVz`YB=ZQ3e+cD7C zFWiseypR^)j|v+41^-k@#SjLARQ*C&Oms2C;Ty4bL&T*DEjE*1p}1I1J)6yT6au8f zAV9xTOlZsx=Zz<3$pa6Ro+U@7Rl!5QG)!pBmUG~V{m~6*6cQ|F$5J&-M61w%<-D_4 zd+irAbjZb=(@g1?_6d#IQ`awhZiC!}1WS&74aF$LIX$6=dc@=AT+RMsjrfR zBzqFzDU9RPH0AVqR{e~Q2_~m?13gDkDQm!(AKN=LW zPN6{|D@mj$Ytja$BO+;g;sVpCP{?|@2AX=}0+-jEzEV!~eHf#=Coa&f+pe=0>G=mh WM@}jqmzQV&0000|k1|%Oc%$NbBI14-?iy0WiR6&^0Gf3qFP>``W z$lZxy-8q?;Kn_c~qpu?a!^VE@KZ&eB{%%hf$B+ufw=)6-4;cu!=!Z76csVffU1(s^ zTIjKY3CMiKAfqDmN+E|Qb#kM>%i_T8P=J>S5GiMTO!~6H@So7V|qkKqGDUCgjf=G z#<6=&swUgiws0`BhOY~K@xMjwtJmA33p3m--T!|Jo^aYveeW^h-Ou$Sem?owd1ICp P&>IY%u6{1-oD!MZ&H|6fVg?393lL^>oo1K-6l5$8 za(7}_cTVOdki(Mh=SGV|Ky#=F&QX5L)#PxsZY`Pe3NF7Ex0h%CQ;tHTKW%lv@Bg^A{S|557$_l4GBI1M%(X}O4_DKc4a|SIk`8_A zsJyWI_xhQo&y3v#KHsl+duz@W`HthcmwV1{4ZgK(N*_l`|LJqmJiBK^UfBJnhWWJk Wezh5W((izw#Ng@b=d#Wzp$PzK^O*Di diff --git a/NECommonUIKit/NEKitCommonUI/Assets/NECommonUI.xcassets/common/white_right_img.imageset/Contents.json b/NECommonUIKit/NEKitCommonUI/Assets/NECommonUI.xcassets/common/white_right_img.imageset/Contents.json deleted file mode 100644 index 23b0ac0e..00000000 --- a/NECommonUIKit/NEKitCommonUI/Assets/NECommonUI.xcassets/common/white_right_img.imageset/Contents.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x" - }, - { - "filename" : "white_right@2x.png", - "idiom" : "universal", - "scale" : "2x" - }, - { - "filename" : "white_right@3x.png", - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/NECommonUIKit/NEKitCommonUI/Assets/NECommonUI.xcassets/common/white_right_img.imageset/white_right@2x.png b/NECommonUIKit/NEKitCommonUI/Assets/NECommonUI.xcassets/common/white_right_img.imageset/white_right@2x.png deleted file mode 100644 index de7f5fe39ef471089b1daa3fc994083bba145f5b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 376 zcmeAS@N?(olHy`uVBq!ia0vp^HbAV+!3HE%^j`-8Db50q$YKTtF;x&|^bAt@02E{_ z4sv&5Sa(k5C6L3C?&#~tz_78O`%fY(P>$Er#WAFU@$Joryv+&%Z4dKX`W|rPUC9eF z*OazwQnolGs(gLY7O^c21s~M@eXS5mYGTl}6uii~bxXom<5$lcrHmr{%&HhKr7u3A zyRWf!p`s>xnWv-I*2MRGYv!zd)2yl~zq)O$g!R?7w+ai}aw8ZsPi#$;-u7Wqa;9zN zoKMpo&cBttVaYblyUXmx&BnKaTEFU+`81tloy{^=Cc91RSFFgEy8Pz{f(q7{+GyTN zP(OY~I%yi$T-Iw*J|QJx5!r!(7b26^9%Xf{PGX-EsZk;r@h-k3FyfuYE)SjU;=ZqC z--f76`|Nu8x6`f|o#)MB%};GE6m7WU_@!ae?ar_X6V#&|gZQ>I9WlGWCHa*l@5zI* Ul?=t~z<^@#boFyt=akR{0Kc4)0RR91 diff --git a/NECommonUIKit/NEKitCommonUI/Assets/NECommonUI.xcassets/common/white_right_img.imageset/white_right@3x.png b/NECommonUIKit/NEKitCommonUI/Assets/NECommonUI.xcassets/common/white_right_img.imageset/white_right@3x.png deleted file mode 100644 index 6cdf30055c739580a4f42124fd8d7b4135a1869c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 511 zcmVf?PXYWHA$=NPAR8LY-dI;h zNS+0l@rNPL0NevukrDVpNY;S$!n%3@D*~`{0Co<*&H>mt06Pa@=M2C%04p*AKNFHQ zU|m@kfHeWwIRh{QSdkI95Rx^%M%Gsd$(n(0I$r>b1F&;O;8)r*o<0;;N*GV$Qz?LJ zsi67id|G(mRM44$Q$Qa9I5hN;fI~uO0lu)l5YQ=r7nd!pZ&&D4z>7<#fi?oaQ-m@= z^ZFV=eBfGSXjTqkhXk%gggz8-EfTa5IL8on6le=DXPOb-8=B8D<-Qm6X@F~6L-SeJ z2)2Uev#$|&Lo)^dr@Wv6d{=8|0I$>v8o>YbC^UeDS)l=}%m@u&ZH~}bBUt7DjUnvc zY6uPBziI#tU`Y=`16Z07x)9Q(gf4_^384!es1KAoZiH`UaiahL002ovPDHLkV1g>Y B#6|!B diff --git a/NECommonUIKit/NEKitCommonUI/Assets/NECommonUI.xcassets/placeholder/Contents.json b/NECommonUIKit/NEKitCommonUI/Assets/NECommonUI.xcassets/placeholder/Contents.json deleted file mode 100644 index 73c00596..00000000 --- a/NECommonUIKit/NEKitCommonUI/Assets/NECommonUI.xcassets/placeholder/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/NECommonUIKit/NEKitCommonUI/Assets/NECommonUI.xcassets/placeholder/emptyView.imageset/Contents.json b/NECommonUIKit/NEKitCommonUI/Assets/NECommonUI.xcassets/placeholder/emptyView.imageset/Contents.json deleted file mode 100644 index c2c5c4c2..00000000 --- a/NECommonUIKit/NEKitCommonUI/Assets/NECommonUI.xcassets/placeholder/emptyView.imageset/Contents.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x" - }, - { - "filename" : "Frame 1020@2x.png", - "idiom" : "universal", - "scale" : "2x" - }, - { - "filename" : "Frame 1020@3x.png", - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/NECommonUIKit/NEKitCommonUI/Assets/NECommonUI.xcassets/placeholder/emptyView.imageset/Frame 1020@2x.png b/NECommonUIKit/NEKitCommonUI/Assets/NECommonUI.xcassets/placeholder/emptyView.imageset/Frame 1020@2x.png deleted file mode 100644 index c1903c38fa211a69ae473c01266c20699d869a24..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6493 zcmbt(bx;&;&_76bcXvogN+aRPA$bzg3Q8X>UD6;297xA;^w9_$9w3Ma9Ni%ZsMOKj z_41wh{rj7FXWl=aXJ=zR^UTid?z6k`26`{Zh?$A8u&~I0TAH8-dh&3Pg!m8lUT0zU z10nLzGV{j5qUZbXU;{zC2MMtlAOQ%?Ae8K}}Z;3#%cSod`Lqm*hRU7ZloTxJfXocZc%$8dA4`S&=EnY)r- zSgWe48h|}z5~ol;+6CraVw?{1;s_JdDaSWY1{tWB*d7)ANyPPF_tP5*OJ4Ta82RRX zE`OePJ$HU@vF#PBc>ZA|Z~3z0b~ofq&tFBI&@)1qD@qP0n*S%4pfne`8l1?JkXScP z!@yCUHA0={A0=%LWo+SClpOB=(!@E6Hodl1Y;$if1H6FDhMi`__x1w3b0zFzQ0`7n z66aBZw5{PjK0fFSQH#X(Hs4+5R((3Ur_aNBy`NPc_>-RdFK(8@+}t+u{R)Qi75(Od zQU< zKJ$Y;^uht>C^hR-T1#+KU6g#kr`3a z7vzsks#98)LoN2com(Hz4P{HcA1`{o-bT}Rpe1wSo#5z5T;X*BZg0hP~le+v? z&pkdgM`wIv-=9 z7n|{d_N!8XeB7($7Y$QN8(^K*hZ5_sY?N|L0ii_%txci1~?IIRr_ z*7MELLG2ECix!xq9}XAlE4*NpNmc0TZT1~-*fmnT<%Kp2asDIn*C)eni>=cnB&%K5 z6+cs28AGOoTVU8(;G;&eH7YV1F3Ghp<`B3iTO&x%&l{KI$Ne0!)p( zaBU~QCcIAg%uhQ{KoFoJnOTY6d~@w%(G4(9XWrM)PEKG@fT0t)()>jy=0WuGY`U;+ zx2HTGHbLX+F1hkUYLG}KLngdpFT52LG$uBFMp$NHs`PmeF`J3K5(gDiOK^ftX+#2( zug#wif;Z5KLhfilWg>>TDW|5+TVi^usxCs7t)8Mme*n?{SCUSk36Nfh@G`ocEG0c7 z0v!}mF`WrsMJ% zGh!KM?SX4MN^NlK(6R8WOm<}olE;(N^l=If0;GKtK4dV!p16@l@;H>YD+V-y%# zBq+;vMN0 z@By1YR(9HdXQ8OUZ*v{1ybT){^H{82f49GLQ=%B%uw2Ib>7Bxv4z6)-{4~I>X{l+Q z+hGrx_}v-Z)i3LlGT=KVEXRaRE zwXzJKiOwF^|IF*~ih?{y$xzYSc{J33`gF3yGS1F|(z8LFD#XIv91tQ_wRpH<6a~ng z<6i_QvOs(IQ_njCw+XSsXZ;MWTIw>qiuTviq3)k*!x25`@$bvM{5fd{ay-&SVs5gZ z8deG;#$-u%f`qsC+av27XiI2;d#$6v%dUxMZI*>0iD^z^2Q6L8gjJrY{vH6#*_rRF zlKy6qDw7t^@ffoBoI|s)ShVaI%21oFWWJwGmHAdaSls_ zrp#$>a7IgYNBuGjlL_i)@tU}-da0s){_TK4zLN)u2mbp6qkbxjC!XgszQlj{Cvi+p z%aym8&IVE7r8cwtfkQio*6UcmQ=nA)-lb)|+IIN}c3om;Q@0uk*tC2D4cd{Srg-pp zWY2nl+EqbS4#PX$wz{t#PrfZ5EUSM0h$9X}jNfl7>MR6ED=cjvM~9ByXI_eG+J(gJ{0GT;HAtv zw{lb;eCg$PD7=i6yti1mgB!8D!o^z@*mQh5R2GuBA-S7GAQ06X zC!UKlAuBqnIXv{3cl-oJmE6K=BXHjyTzMJr3!ML@>NuRK1bTCtT#|xG(PPPO={#+? z*|mzy#^v@lGR^(#9-d||CY_Up@#I%uAgn#wP7g`SN zy1orvUJ_-X<25fnh~~=2Aqa&Yqf(fbss1<%EgbI1&J{2UJ~;LjZ6jptk}$slCe{qI zN^4NQ{k}!-lnqi8Y_@S!KV>we8K2i2F$CmAS~@n z2T+ah3rC*n`;evmvfq&rQg!}G6;Tp&Sp?FkoI=N)NtduEjzw;sli9$yO|9j|Zf0m49qm%E;VZ1{@cK$-WiTh!|_T;5{dO13y#%8RTJ;c{_{l}}z z;qQ8x;3N>})h7y4ZDo;v{3@t;XyC6-p8=@_ic4FLeG(hR6A^Uwi959&3k%baFAGaD zu(~(W3=_86Yy5gvV7j$q*C$|SRgkGJ%>9nyqmIwnwJ+EHGzoup->m8(Jbvb@IIdMJ zzK)T~@fI7v9{p)rtjU5%%C}eI<_lvOjwCA*e*9BQd4qm4&tv*YHphLr+0i$5y|kx$ z`J$O2p*IFi1>a7{c#z1tV$J6&@B6p;djLU9#;zhyVjE^K?nxHTAj>?;d88MFN#Ro1>$kd26O{3~?kOBoy;;F*l~bZ;eA=x@Oog!NKGk3MNsir+1)_3t5SQxpS%19yl)tXfFL)a9P3;lEF3cIl6XT`Eshb z<=6X7yFeV-?JVSz=ubZOkbaxPnKSI-y-=^M00eCklRx}%VimtFo$dQ8=idLkz8Ig3 zaSLsdtvl>FACU*=UCP5)R4h7UcYk=GI)WHo8Opl9G+BNZWB)Jqc*x5v->l)YemAWC zLunMZN+3?&zbIKc(!RInk^}h@#Bmd{|8ZKtKa?T!>3ucPQl43#f2hxhU>yt@bbRmF z+G2aTRP>-<$qrP`g1og1=L!{JK3Y)0trk8Dp z$=J?+9HlU6D1IE~_A<0pY);!X8sz0I;Ne`;IF)ATaqccf=0|d3gWL*VuF`v5n%wH- zj%t`ESrbuHjA%OMv(MNQvnnxEInbtlEpCj^!CQ#EHK-7T(5j;IFly^QJY62bYvifE z3`a*@Ul&F;-@GBJx7w1i@o|D%7WTr!1RfGPWUW{2Jxu_~wCuwQqh{VV<`VuT5@X+1 z>q)!1z(r+#mjL$9qh5P@RDWE6Ha(vs`Jva$Y5B|c(B z0qLTXg)$J(*V4_Lff1mA=e&7x;K~IogzDt(qd)R7Nlr+nQPx$|JGuFDSE&=aZsp?k z0m!>P6k$zqscYrp8g=PQsvW5vhuj@C9(f_Gf=Eodsw__?V`*gZZ2H1OVT9(bCZ~BP zz@NnA4r>WPCaO$osBQa-o`2FY9OqXkcA*42kn;;s78G;-!)F>zjEe+5LSz0=>n@zt zTW9p|lzZ?VB+C)64^GG32+JI^i45lb^i$V%XH!U?btc^nlQf3z-Pr z0)OZ+DUER4hOyQZ3}P%<^ODA}44HSG7Vw5QhI1W?0y{_w+whA-E2oh-#u*PC$=-^& zZ|u7+Z`PVG^CLWEG~@sYUFhRNB;~tSJ`?1p*kg4ZTCa$q#!`fWLmBH%QEE611wL>X z*klwn=BPnXV|y*s0&Pt#PDDmFh`WwE>LqAACnS^J!l$A&xb~O!0czX6PGei!xoD2`uBYQqEY^1BZl=NX+4>-wb_Qs)}7`r~# zw2C74ipG$pd?41i8r}pt&X+d&(K;qh{2~yaiaCO67KBjSoR~E z=&jUx;^tH6!K;Fr_`>di@5-l2@uKx`2t;tvEuBn97;a45yq4ig1`8~H)F9q7c^B3eJAPeHkfS&D zK4kPeP^gk77JTp1I@S40^^a)#VVvLkbZo5K?BcW?yTIY!8(f07T|SCgtk`de^DD~u zCisjSws1}M#-1PhOjG>c{&{+peIa&bep7vZ#r(VeXX0+jx$K`?2|k*Gwu)*b$3n#H z@52??fYoT8aL^frYSS6=-r(w7g*UA)L|S^$i);3}5?9cNyxx}Ao}x$DWGxPdu+rAf zs@Ap27TMI46+}qd_0QY{(8BNoFCVqmAkZ>!y1o5==pqB&cNNsS+Dyg(Jk7#)Qdv<1 zNtGFPoW<4+SgBqR95cy!cTgz`HsQrpD3t1b9&erc4#b;e;!&{MDlAM}*`M3(x4Cyo zW>pG4NdaZ&+FS8YhGeIw<}6d_R}8UTE1{0>m9p;;=1wXdfGuYlv-kLl3d*QE)vfoF#roOJ=&yl5 zX#)%vC)qUcXsn}G?e&PQ#yeLWJy6`poUE(em=QblQoM7SN7a2l{hWgLy-q&I$8wI0 zr%yx7_+iqZb@;5|7W(Y~8+FNF;U;>&0Y17|w4;FCbFHR6=w6IfknpPV@*w_-sxISVz>KE6=|SsPt>wf=Y(|+|JGpuD+_3R^3+|6VDGyliZ$c23b8vtds$?csUnmfNK(5 z${CG4-2PflT;%U^6#d*>t#pYeHXr&59z3^;FlTeN=?&FJW%(kQ+2$>VjY;Zn6#QOe zD~709vJ|0x7MwD4Re%8T+~VtWMs~^iBw{$J(U2fbSFO@p^w-fBUb`(b*uod2zgNC_ zK8g>l2MV7n%?q3>&8Yr6wCm$vZI115o*$jmzm5_21_fR#$@^NS=gnF2bk2_p^nV=~HEiKkNbogqCste)EW*3=W^4k_GL&N^@Dg z02&`{4d#}HOiH3oaxzOoEsJ+B7%9+wSO14EE`G3^GmkwDw~_eiiL2&rum0y7uePuZ zFx+V>d5vvtirZQeaZ6)kDV|x5a5a`IefJ%S^TJjIE^mj~ORBH4=!MIFqDOy6V%H+p z^aq*{G;70FA(HPw&6kS>=V`?qezy`t@~Bdi-WgJKGfC*678@3^u6m?w9m4AxR8B$$ zD!udZPCF4${Vn$xN>ZxrUz{;A*}wucUmr6)MgKI* z%z0ez!Dm7_)(cn*(g}gw%zhF;m%S*E#POFaa+OOQ^oN|n9(P0tEC`C48hdRWl zr@f9--|E+$E^`hoboqW_Rn9Odc&a5R9S;dEnK5)wT;9!$jK%*FieJi39?jp7`f@8@ zUnEn5!I-x zmH@BMWA#RQIeSHPSc?Yij}!=}E^x;zq$$k0K5b;#SiU>OQ9UDbV+rXuXztp7Y;Pk%DkFuF!n0kcKmFNSPnRA zt=@-cI@?#pm=;aZ=FpO*x87w5Grh`Wl!z28p}&Xc>x+$E1Zp~v;;})r({j|)iXI{A zzO~QnmklT}i{wsa`8>%!0px$T`8Wj@HwEPWXW_lcWPFs~*vOIat3=P9gGwRdy5(fB zWW^#c^Ff`81uAD400A==W%{0_Av4dUo0Tj;82bU3ng!8DL5}u5w~=xF95ck|mO$llF|Z3 zik0W?Zx3GuS?WXH77uUymM`gFDCTj)~@(TywpTyO^#5r z2*2%_nvp@$hj*BLap-iQ&+oh4moe?{>A3oZ8UFwOR|pqu*cofV V29JGLAGRS_z~_3Jwd!vo{s-1XhoS%g diff --git a/NECommonUIKit/NEKitCommonUI/Assets/NECommonUI.xcassets/placeholder/emptyView.imageset/Frame 1020@3x.png b/NECommonUIKit/NEKitCommonUI/Assets/NECommonUI.xcassets/placeholder/emptyView.imageset/Frame 1020@3x.png deleted file mode 100644 index cc9ae67863c28c7175f1627e824a748d37e1a5ca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10997 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 diff --git a/NECommonUIKit/NEKitCommonUI/Assets/NECommonUI.xcassets/placeholder/user_empty.imageset/Contents.json b/NECommonUIKit/NEKitCommonUI/Assets/NECommonUI.xcassets/placeholder/user_empty.imageset/Contents.json deleted file mode 100644 index 68b5b589..00000000 --- a/NECommonUIKit/NEKitCommonUI/Assets/NECommonUI.xcassets/placeholder/user_empty.imageset/Contents.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x" - }, - { - "filename" : "user_empty@2x.png", - "idiom" : "universal", - "scale" : "2x" - }, - { - "filename" : "user_empty@3x.png", - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/NECommonUIKit/NEKitCommonUI/Assets/NECommonUI.xcassets/placeholder/user_empty.imageset/user_empty@2x.png b/NECommonUIKit/NEKitCommonUI/Assets/NECommonUI.xcassets/placeholder/user_empty.imageset/user_empty@2x.png deleted file mode 100644 index 6fc940f000169bd6d970e38303522ac14fab6275..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9958 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 diff --git a/NECommonUIKit/NEKitCommonUI/Assets/en.lproj/Localizable.strings b/NECommonUIKit/NEKitCommonUI/Assets/en.lproj/Localizable.strings deleted file mode 100644 index 0732f82d..00000000 --- a/NECommonUIKit/NEKitCommonUI/Assets/en.lproj/Localizable.strings +++ /dev/null @@ -1,13 +0,0 @@ -/* - YXLogin.strings - Pods - - Created by yu chen on 2021/12/24. - -*/ - -"qchat_tip"="提示"; -"qchat_sure"="确定"; -"qchat_cancel"="取消"; - - diff --git a/NECommonUIKit/NEKitCommonUI/Assets/zh-Hans.lproj/Localizable.strings b/NECommonUIKit/NEKitCommonUI/Assets/zh-Hans.lproj/Localizable.strings deleted file mode 100644 index 12be96e8..00000000 --- a/NECommonUIKit/NEKitCommonUI/Assets/zh-Hans.lproj/Localizable.strings +++ /dev/null @@ -1,11 +0,0 @@ -/* - YXLogin.strings - Pods - - Created by yu chen on 2021/12/24. - -*/ - -"qchat_tip"="提示"; -"qchat_sure"="确定"; -"qchat_cancel"="取消"; diff --git a/NECommonUIKit/NEKitCommonUI/Classes/.gitkeep b/NECommonUIKit/NEKitCommonUI/Classes/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/NECommonUIKit/NEKitCommonUI/Classes/Constant.swift b/NECommonUIKit/NEKitCommonUI/Classes/Constant.swift deleted file mode 100644 index 6c57bdba..00000000 --- a/NECommonUIKit/NEKitCommonUI/Classes/Constant.swift +++ /dev/null @@ -1,15 +0,0 @@ - -// Copyright (c) 2022 NetEase, Inc. All rights reserved. -// Use of this source code is governed by a MIT license that can be found in the LICENSE file. - -import Foundation -import NEKitCommon - - -let coreLoader = CommonLoader() -public func commonLocalizable(_ key: String) -> String{ - return coreLoader.localizable(key) -} - -let kScreenWidth:CGFloat = UIScreen.main.bounds.size.width -let kScreenHeight:CGFloat = UIScreen.main.bounds.size.height diff --git a/NECommonUIKit/NEKitCommonUI/Classes/ExpandButton.swift b/NECommonUIKit/NEKitCommonUI/Classes/ExpandButton.swift deleted file mode 100644 index fc698bdd..00000000 --- a/NECommonUIKit/NEKitCommonUI/Classes/ExpandButton.swift +++ /dev/null @@ -1,28 +0,0 @@ - -// Copyright (c) 2022 NetEase, Inc. All rights reserved. -// Use of this source code is governed by a MIT license that can be found in the LICENSE file. - -import UIKit - -public class ExpandButton: UIButton { - - /* - // Only override draw() if you perform custom drawing. - // An empty implementation adversely affects performance during animation. - override func draw(_ rect: CGRect) { - // Drawing code - } - */ - public override func point(inside point: CGPoint, with event: UIEvent?) -> Bool { - var bounds = self.bounds - // 若原热区小于44*44, 则放大热区,否则保持不变 - let widthDelta = max(44.0 - bounds.size.width, 0) - let heightDelta = max(44.0 - bounds.size.height, 0) - - bounds = bounds.insetBy(dx: -0.5 * widthDelta, dy: -0.5 * heightDelta) - - // 如果返回新的bounds里,就返回YES - return bounds.contains(point) - } - -} diff --git a/NECommonUIKit/NEKitCommonUI/Classes/NEBrokenNetworkView.swift b/NECommonUIKit/NEKitCommonUI/Classes/NEBrokenNetworkView.swift deleted file mode 100644 index af400568..00000000 --- a/NECommonUIKit/NEKitCommonUI/Classes/NEBrokenNetworkView.swift +++ /dev/null @@ -1,40 +0,0 @@ - -// Copyright (c) 2022 NetEase, Inc. All rights reserved. -// Use of this source code is governed by a MIT license that can be found in the LICENSE file. - -import UIKit - -public class NEBrokenNetworkView: UIView { - - public override init(frame: CGRect) { - super.init(frame: frame) - commonUI() - } - - required init?(coder: NSCoder) { - fatalError("init(coder:) has not been implemented") - } - - func commonUI(){ - - self.backgroundColor = UIColor.init(red: 254/255, green: 227/255, blue: 230/255, alpha: 1) - self.addSubview(content) - NSLayoutConstraint.activate([ - content.leftAnchor.constraint(equalTo: self.leftAnchor, constant: 15), - content.centerYAnchor.constraint(equalTo: self.centerYAnchor), - content.rightAnchor.constraint(equalTo: self.rightAnchor, constant: -15), - ]) - } - - private lazy var content:UILabel = { - let label = UILabel() - label.translatesAutoresizingMaskIntoConstraints = false - label.font = UIFont.systemFont(ofSize: 14) - label.textColor = UIColor.init(red: 252/255, green: 89/255, blue: 106/255, alpha: 1) - label.textAlignment = .center - label.text = "当前网络不可用,请检查你当网络设置。" - return label - }() - - -} diff --git a/NECommonUIKit/NEKitCommonUI/Classes/NEButtonExtension.swift b/NECommonUIKit/NEKitCommonUI/Classes/NEButtonExtension.swift deleted file mode 100644 index 8d01c408..00000000 --- a/NECommonUIKit/NEKitCommonUI/Classes/NEButtonExtension.swift +++ /dev/null @@ -1,114 +0,0 @@ - -// Copyright (c) 2022 NetEase, Inc. All rights reserved. -// Use of this source code is governed by a MIT license that can be found in the LICENSE file. - - -import Foundation - -public enum ButtonStyle { - case top /// image在上,label在下 - case left /// image在左,label在右 - case bottom /// image在下,label在上 - case right /// image在右,label在左 -} -public extension UIButton { - - func layoutButtonImage(style:ButtonStyle = ButtonStyle.left,space:CGFloat = 5){ - - let imageWith = self.imageView?.bounds.width ?? 0 - let imageHeight = self.imageView?.bounds.height ?? 0 - - let labelWidth = self.titleLabel?.intrinsicContentSize.width ?? 0 - let labelHeight = self.titleLabel?.intrinsicContentSize.height ?? 0 - - var imageEdgeInsets = UIEdgeInsets.zero - var labelEdgeInsets = UIEdgeInsets.zero - var contentEdgeInsets = UIEdgeInsets.zero - - let bWidth = self.bounds.width - - let min_height = min(imageHeight, labelHeight) - - switch style { - case .left: - self.contentVerticalAlignment = .center - imageEdgeInsets = UIEdgeInsets(top: 0, - left: 0, - bottom: 0, - right: 0) - labelEdgeInsets = UIEdgeInsets(top: 0, - left: space, - bottom: 0, - right: -space) - contentEdgeInsets = UIEdgeInsets(top: 0,left: 0,bottom: 0,right: space) - case .right: - self.contentVerticalAlignment = .center - var w_di = labelWidth + space/2 - if (labelWidth+imageWith+space) > bWidth{ - let labelWidth_f = self.titleLabel?.frame.width ?? 0 - w_di = labelWidth_f + space/2 - } - imageEdgeInsets = UIEdgeInsets(top: 0, - left: w_di, - bottom: 0, - right: -w_di) - labelEdgeInsets = UIEdgeInsets(top: 0, - left: -(imageWith+space/2), - bottom: 0, - right: imageWith+space/2) - contentEdgeInsets = UIEdgeInsets(top: 0, left: space/2, bottom: 0, right: space/2.0) - case .top: - - self.contentHorizontalAlignment = .center - self.contentVerticalAlignment = .center - - var w_di = labelWidth/2.0 - - if (labelWidth+imageWith+space) > bWidth{ - w_di = (bWidth - imageWith)/2 - } - - let labelWidth_f = self.titleLabel?.frame.width ?? 0 - if (imageWith+labelWidth_f+space)>bWidth{ - w_di = (bWidth - imageWith)/2 - } - imageEdgeInsets = UIEdgeInsets(top: -(labelHeight+space), - left: w_di, - bottom: 0, - right: -w_di) - labelEdgeInsets = UIEdgeInsets(top: 0, - left: -imageWith, - bottom:-(space+imageHeight), - right: 0) - let h_di = (min_height+space)/2.0 - contentEdgeInsets = UIEdgeInsets(top:h_di,left: 0,bottom:h_di,right: 0) - case .bottom: - - self.contentHorizontalAlignment = .center - self.contentVerticalAlignment = .center - var w_di = labelWidth/2 - - if (labelWidth+imageWith+space) > bWidth{ - w_di = (bWidth - imageWith)/2 - } - - let labelWidth_f = self.titleLabel?.frame.width ?? 0 - if (imageWith+labelWidth_f+space)>bWidth{ - w_di = (bWidth - imageWith)/2 - } - imageEdgeInsets = UIEdgeInsets(top: 0, - left: w_di, - bottom: -(labelHeight+space), - right: -w_di) - labelEdgeInsets = UIEdgeInsets(top: -(space+imageHeight), - left: -imageWith, - bottom: 0, - right: 0) - let h_di = (min_height+space)/2.0 - contentEdgeInsets = UIEdgeInsets(top:h_di, left: 0,bottom:h_di,right: 0) - } - self.contentEdgeInsets = contentEdgeInsets - self.titleEdgeInsets = labelEdgeInsets - self.imageEdgeInsets = imageEdgeInsets - } -} diff --git a/NECommonUIKit/NEKitCommonUI/Classes/NEEmptyDataView.swift b/NECommonUIKit/NEKitCommonUI/Classes/NEEmptyDataView.swift deleted file mode 100644 index e133f8ac..00000000 --- a/NECommonUIKit/NEKitCommonUI/Classes/NEEmptyDataView.swift +++ /dev/null @@ -1,73 +0,0 @@ - -// Copyright (c) 2022 NetEase, Inc. All rights reserved. -// Use of this source code is governed by a MIT license that can be found in the LICENSE file. - - -import Foundation - -public class NEEmptyDataView: UIView { - - private var imageName:String? - private var content:String? - - public init(imageName:String,content:String,frame:CGRect){ - self.imageName = imageName - self.content = content - super.init(frame: frame) - setupSubviews() - setupSubviewStyle() - } - - - required init?(coder: NSCoder) { - fatalError("init(coder:) has not been implemented") - } - - func setupSubviews(){ - self.backgroundColor = .white - self.addSubview(emptyImageView) - self.addSubview(contentLabel) - - NSLayoutConstraint.activate([ - emptyImageView.topAnchor.constraint(equalTo: self.topAnchor, constant: 60), - emptyImageView.centerXAnchor.constraint(equalTo: self.centerXAnchor), - emptyImageView.widthAnchor.constraint(equalToConstant: 122), - emptyImageView.heightAnchor.constraint(equalToConstant: 91), - ]) - - NSLayoutConstraint.activate([ - contentLabel.topAnchor.constraint(equalTo: emptyImageView.bottomAnchor, constant: 8), - contentLabel.centerXAnchor.constraint(equalTo: self.centerXAnchor), - ]) - } - - func setupSubviewStyle(){ - emptyImageView.image = coreLoader.loadImage(imageName ?? "") - contentLabel.text = content - } - - private lazy var emptyImageView: UIImageView = { - let avatar = UIImageView() - avatar.translatesAutoresizingMaskIntoConstraints = false - return avatar - }() - - private lazy var contentLabel: UILabel = { - let label = UILabel() - label.translatesAutoresizingMaskIntoConstraints = false - label.textColor = UIColor.ne_emptyTitleColor - label.font = UIFont.systemFont(ofSize: 14) - label.numberOfLines = 0 - label.textAlignment = .center - return label - }() - - public func setttingContent(content:String) { - self.contentLabel.text = content - } - - public func setEmptyImage(name:String) { - emptyImageView.image = coreLoader.loadImage(imageName ?? "") - } - -} diff --git a/NECommonUIKit/NEKitCommonUI/Classes/NEUserHeaderView.swift b/NECommonUIKit/NEKitCommonUI/Classes/NEUserHeaderView.swift deleted file mode 100644 index b852cc6c..00000000 --- a/NECommonUIKit/NEKitCommonUI/Classes/NEUserHeaderView.swift +++ /dev/null @@ -1,58 +0,0 @@ - -// Copyright (c) 2022 NetEase, Inc. All rights reserved. -// Use of this source code is governed by a MIT license that can be found in the LICENSE file. - - -import UIKit - - -public class NEUserHeaderView: UIImageView { - - - public lazy var titleLabel: UILabel = { - let label = UILabel() - label.font = UIFont.systemFont(ofSize: 12) - label.textColor = .white - label.translatesAutoresizingMaskIntoConstraints = false - return label - }() - - public override init(frame: CGRect) { - super.init(frame: frame) - setupUI() - } - - required init?(coder: NSCoder) { - super.init(coder: coder) - } - - func setupUI(){ - contentMode = .scaleAspectFill - isUserInteractionEnabled = true - clipsToBounds = false - addSubview(titleLabel) - NSLayoutConstraint.activate([ - titleLabel.centerYAnchor - .constraint(equalTo: centerYAnchor), - titleLabel.centerXAnchor.constraint(equalTo: centerXAnchor) - ]) - backgroundColor = .clear - } - - - public func configHeadData(headUrl:String?,name:String){ - if let avatar = headUrl { - setTitle("") - self.sd_setImage(with: URL(string: avatar), completed: nil) - }else { - setTitle(name) - self.sd_setImage(with:nil, completed: nil) - self.backgroundColor = UIColor.colorWithString(string: name) - } - } - - public func setTitle(_ name: String){ - titleLabel.text = name.count > 2 ? String(name[name.index(name.endIndex, offsetBy: -2)...]) : name - } - -} diff --git a/NECommonUIKit/NEKitCommonUI/Classes/PhotoBrowser/PhotoBrowserBigImgBackView.swift b/NECommonUIKit/NEKitCommonUI/Classes/PhotoBrowser/PhotoBrowserBigImgBackView.swift deleted file mode 100644 index df033a6b..00000000 --- a/NECommonUIKit/NEKitCommonUI/Classes/PhotoBrowser/PhotoBrowserBigImgBackView.swift +++ /dev/null @@ -1,274 +0,0 @@ - -// Copyright (c) 2022 NetEase, Inc. All rights reserved. -// Use of this source code is governed by a MIT license that can be found in the LICENSE file. - - -import UIKit - - -public class PhotoBrowserBigImgBackView: UIView { - - let duration = 0.3 - -// lazy var backBtn : UIButton = { -// let button = UIButton.init(type: .custom) -// button.setImage(UIImage(named: "back_white"), for: .normal) -// return button -// }() - - lazy var collectionView : UICollectionView = { - let layout = PhotoBrowserFlowLayout.init() // 给分页添加间距 - layout.sectionHeadersPinToVisibleBounds = true - layout.scrollDirection = .horizontal - layout.minimumLineSpacing = 10 - layout.minimumInteritemSpacing = 0 - layout.itemSize = CGSize(width: floor(kScreenWidth), height: kScreenHeight) - layout.sectionInset = UIEdgeInsets.init(top: 0, left: 0, bottom: 0, right: 0) - let collectionView = UICollectionView.init(frame: .zero, collectionViewLayout: layout) - collectionView.backgroundColor = .clear - collectionView.isScrollEnabled = true - collectionView.keyboardDismissMode = .onDrag - collectionView.alwaysBounceVertical = false // 不允许上下弹跳 - collectionView.showsVerticalScrollIndicator = false - collectionView.register(PhotoBrowserCell.self, forCellWithReuseIdentifier: "CollectionViewCell") - - return collectionView - }() - - lazy var pageControl : UIPageControl = { - let pageControl = UIPageControl.init() - pageControl.isUserInteractionEnabled = false - pageControl.isHidden = true - return pageControl - }() - - var dismissCallBack: (() -> Void)? - - var urlArr : [String] = [] - var imgArr : [UIImage] = [] - ///URL初始化 - public init(urlArr: [String],number: Int) { - super.init(frame: .zero) - self.frame = CGRect(x: 0, y: 0, width: kScreenWidth, height: kScreenHeight) - self.backgroundColor = UIColor.black - showUrlScroll(urlArr: urlArr, number: number) - } - - private func showUrlScroll(urlArr: [String],number: Int) { - self.urlArr = urlArr - self.addSubview(collectionView) - self.collectionView.frame = CGRect(x: 0, y: 0, width: kScreenWidth, height: kScreenHeight) - self.collectionView.delegate = self - self.collectionView.dataSource = self - self.collectionView.scrollToItem(at: IndexPath.init(item: number, section: 0), at: .centeredHorizontally, animated: false) - setPageControl(urlArr.count, current: number) - } - - public init(imgArr: [UIImage],number: Int) { - super.init(frame: .zero) - self.frame = CGRect(x: 0, y: 0, width: kScreenWidth, height: kScreenHeight) - self.backgroundColor = UIColor.black - showImages(Images: imgArr, number: number) - } - - private func showImages(Images: [UIImage],number: Int) { - self.imgArr = Images - self.addSubview(collectionView) - self.collectionView.frame = CGRect(x: 0, y: 0, width: kScreenWidth, height: kScreenHeight) - self.collectionView.delegate = self - self.collectionView.dataSource = self - self.collectionView.scrollToItem(at: IndexPath.init(item: number, section: 0), at: .centeredHorizontally, animated: false) - setPageControl(Images.count, current: number) - } - - private func setPageControl(_ total: Int,current: Int) { - self.addSubview(self.pageControl) - self.pageControl.frame = CGRect(x: 0, y: kScreenHeight - 80, width: kScreenWidth, height: 30) - self.pageControl.numberOfPages = total - self.pageControl.currentPage = current - self.pageControl.currentPageIndicatorTintColor = UIColor.white - self.pageControl.pageIndicatorTintColor = UIColor.lightGray - self.pageControl.hidesForSinglePage = true - } - - public func currentIndex() -> Int { - Int(collectionView.contentOffset.x / kScreenWidth) - } - - required init?(coder aDecoder: NSCoder) { - fatalError("init(coder:) has not been implemented") - } -} - -extension PhotoBrowserBigImgBackView: UICollectionViewDelegate,UICollectionViewDataSource { - public func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { - if self.urlArr.count != 0 { - return self.urlArr.count - }else{ - return self.imgArr.count - } - } - - public func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { - let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "CollectionViewCell", for: indexPath) as! PhotoBrowserCell - if self.urlArr.count != 0 { - - cell.imgUrl = self.urlArr[indexPath.row] - }else{ - cell.image = self.imgArr[indexPath.row] - } - // pan手势 - cell.backRemoveCallBack = { [weak self] in - guard let `self` = self else { return } - self.backRemoveAnimation(self.duration) - } - // 点击手势 - cell.tapMoveCallBack = {[weak self] (imgView) in - guard let `self` = self else { return } - self.removeAnimation(imgView) - } - cell.changeAlphaCallBack = { [weak self] (alpha) in - guard let `self` = self else { return } - self.changeBackAlpha(alpha: alpha) - } - return cell - } - - public func dismissPhotoBrowser(){ - if let cell = collectionView.cellForItem(at: IndexPath(row: currentIndex(), section: 0)) as? PhotoBrowserCell { - removeAnimation(cell.imgView) - } - } - - public func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) { - if scrollView == self.collectionView ,let index = collectionView.indexPathForItem(at: collectionView.contentOffset)?.item{ - - self.pageControl.currentPage = Int(index) - } - } -} - -// MARK: 点击的方法 -extension PhotoBrowserBigImgBackView { - - @objc func backBtnClick() { - self.dismissCallBack?() - } -} -//MARK: 动画 -extension PhotoBrowserBigImgBackView { - - /* - 视图将要显示时获取到第一次要显示的cell上的imgView来显示动画 - */ - public func transformAnimation() { - // 第一次弹出时的动画 - collectionView.reloadData() - collectionView.setNeedsLayout() - self.collectionView.layoutIfNeeded() - - guard let indexPath = collectionView.indexPathForItem(at: collectionView.contentOffset) else { - return - } - guard let cell = collectionView.cellForItem(at: indexPath) as? PhotoBrowserCell else { - return - } - self.showAnimation() - self.transformScaleAnimation(fromValue: 0.3, toValue: 1, duration: 0.3, view: cell.imgView) - DispatchQueue.main.asyncAfter(deadline: .now() + duration) { - // 赋值方法中imageview重新布局 - self.collectionView.reloadData() - - } - } - - // 缩放 + 淡入淡出 - func removeAnimation(_ imgView: UIView) { - if imgView.frame.size.height <= kScreenHeight { - self.transformScaleAnimation(fromValue: 1.0, toValue: 0.3, duration: 0.3, view: imgView) - } - self.backRemoveAnimation(duration) - } - - // 缩放 - func transformScaleAnimation(fromValue: CGFloat,toValue: CGFloat,duration: CFTimeInterval,view: UIView) { - let scale = CABasicAnimation() - scale.keyPath = "transform.scale" - scale.fromValue = fromValue - scale.toValue = toValue - scale.duration = duration - scale.fillMode = CAMediaTimingFillMode.forwards - scale.isRemovedOnCompletion = false - view.layer.add(scale, forKey: nil) - } - - func showAnimation() { - let backAnimation = CAKeyframeAnimation() - backAnimation.keyPath = "opacity" - backAnimation.duration = duration - backAnimation.values = [ - NSNumber(value: 0.10 as Float), - NSNumber(value: 0.40 as Float), - NSNumber(value: 0.80 as Float), - NSNumber(value: 1.0 as Float), - ] - backAnimation.keyTimes = [ - NSNumber(value: 0.1), - NSNumber(value: 0.2), - NSNumber(value: 0.3), - NSNumber(value: 0.4) - ] - backAnimation.fillMode = CAMediaTimingFillMode.forwards - backAnimation.isRemovedOnCompletion = false - self.layer.add(backAnimation, forKey: nil) - } - - // 背景变淡消失的动画 - func backRemoveAnimation(_ duration: CFTimeInterval) { - let backAnimation = CAKeyframeAnimation() - backAnimation.delegate = self - backAnimation.keyPath = "opacity" - backAnimation.duration = duration - backAnimation.values = [ - NSNumber(value: 0.90 as Float), - NSNumber(value: 0.60 as Float), - NSNumber(value: 0.30 as Float), - NSNumber(value: 0.0 as Float), - - ] - backAnimation.keyTimes = [ - NSNumber(value: 0.1), - NSNumber(value: 0.2), - NSNumber(value: 0.3), - NSNumber(value: 0.4) - ] - backAnimation.fillMode = CAMediaTimingFillMode.forwards - backAnimation.isRemovedOnCompletion = false - self.layer.add(backAnimation, forKey: nil) - } - - func changeBackAlpha(alpha: CGFloat) { - self.backgroundColor = UIColor.black.withAlphaComponent(alpha) - } -} -// MARK: 动画代理 -extension PhotoBrowserBigImgBackView: CAAnimationDelegate { - public func animationDidStop(_ anim: CAAnimation, finished flag: Bool) { - if anim.isKind(of: CAKeyframeAnimation.self) && flag { - self.dismissCallBack?() - } - } - -} -extension UIImage { - static func imageWithColor(color: UIColor) -> UIImage? { - let rect = CGRect(x: 0.0, y: 0.0, width: 1.0, height: 1.0) - UIGraphicsBeginImageContext(rect.size) - let context = UIGraphicsGetCurrentContext() - context?.setFillColor(color.cgColor) - context?.fill(rect) - let image = UIGraphicsGetImageFromCurrentImageContext() - UIGraphicsEndImageContext() - return image ?? nil - } -} diff --git a/NECommonUIKit/NEKitCommonUI/Classes/PhotoBrowser/PhotoBrowserCell.swift b/NECommonUIKit/NEKitCommonUI/Classes/PhotoBrowser/PhotoBrowserCell.swift deleted file mode 100644 index 6280de7b..00000000 --- a/NECommonUIKit/NEKitCommonUI/Classes/PhotoBrowser/PhotoBrowserCell.swift +++ /dev/null @@ -1,329 +0,0 @@ - -// Copyright (c) 2022 NetEase, Inc. All rights reserved. -// Use of this source code is governed by a MIT license that can be found in the LICENSE file. - - - -import UIKit -import SDWebImage -//import SDWebImageFLPlugin - -class PhotoBrowserCell: UICollectionViewCell { - - lazy var backScroll : UIScrollView = { - let scroll = UIScrollView.init(frame: CGRect(x: 0,y: 0, width: kScreenWidth, height: kScreenHeight)) - scroll.delegate = self - scroll.isPagingEnabled = false - scroll.minimumZoomScale = 1.0 - scroll.maximumZoomScale = 4 - scroll.showsHorizontalScrollIndicator = false - scroll.showsVerticalScrollIndicator = false - return scroll - }() - - lazy var imgView : UIImageView = { - let imageView = UIImageView() - imageView.contentMode = .scaleAspectFit - return imageView - }() - - - lazy var loading: UIActivityIndicatorView = { - let loading = UIActivityIndicatorView.init() - loading.backgroundColor = .clear - loading.color = .white - loading.hidesWhenStopped = true - loading.stopAnimating() - return loading - }() - - var imgUrl: String? { - didSet { - guard let img_url = imgUrl else { - return - } - - loading.startAnimating() - if img_url.hasPrefix("http") { - imgView.sd_setImage(with: URL(string: img_url), placeholderImage: UIImage.init(contentsOfFile: img_url), options: .allowInvalidSSLCertificates) { [weak self](img, error, _, url) in - guard let `self` = self else { return } - guard img != nil else { - return - } - guard let width = img?.size.width else { - return - } - guard let height = img?.size.height else { - return - } - self.loading.stopAnimating() - self.resizeImage() - } - }else { - imgView.image = UIImage.init(contentsOfFile: img_url) - self.loading.stopAnimating() - self.resizeImage() - } - - } - } - - var image: UIImage? { - didSet { - guard let imageV = image else { - return - } - imgView.image = imageV - let w = kScreenWidth - let h = kScreenWidth / (imageV.size.width / imageV.size.height) - - if h > kScreenHeight { -// let y = (h - kScreenHeight) / 2 - self.backScroll.contentSize = CGSize(width: kScreenWidth, height: h) - self.backScroll.contentOffset = CGPoint(x: 0, y: 0) - imgView.frame = CGRect(x: 0, y: 0, width: w, height: h) - }else{ - let y = (kScreenHeight - h) / 2 - self.backScroll.contentSize = CGSize(width: kScreenWidth, height: kScreenHeight) - self.backScroll.contentOffset = CGPoint(x: 0, y: 0) - imgView.frame = CGRect(x: 0, y: y, width: w, height: h) - } - } - } - - var backRemoveCallBack: (() -> Void)? - var tapMoveCallBack:((_ view: UIView) -> Void)? - var changeAlphaCallBack: ((_ value: CGFloat) -> Void)? - - override init(frame: CGRect) { - super.init(frame: frame) - self.backgroundColor = .clear - self.contentView.backgroundColor = .clear - self.contentView.addSubview(self.backScroll) - - self.backScroll.addSubview(self.imgView) - self.addTapGesture(imageview: self.imgView, scroll: self.backScroll) - self.addPanGesture(imgView) - - self.contentView.addSubview(self.loading) - self.loading.translatesAutoresizingMaskIntoConstraints = false - self.loading.centerXAnchor.constraint(equalTo: self.centerXAnchor).isActive = true - self.loading.centerYAnchor.constraint(equalTo: self.centerYAnchor).isActive = true - self.loading.heightAnchor.constraint(equalToConstant: 30).isActive = true - self.loading.widthAnchor.constraint(equalToConstant: 30).isActive = true - } - - required init?(coder: NSCoder) { - fatalError("init(coder:) has not been implemented") - } - - private func resizeImage() { - let w = kScreenWidth - let h = kScreenWidth / (width / height) - if h > kScreenHeight { - DispatchQueue.main.async { - self.backScroll.contentSize = CGSize(width: kScreenWidth, height: h) - self.backScroll.contentOffset = CGPoint(x: 0, y: 0) - self.imgView.frame = CGRect(x: 0, y: 0, width: w, height: h) - } - - }else{ - let y = (kScreenHeight - h) / 2 - DispatchQueue.main.async { - self.backScroll.contentSize = CGSize(width: kScreenWidth, height: kScreenHeight) - self.backScroll.contentOffset = CGPoint(x: 0, y: 0) - self.imgView.frame = CGRect(x: 0, y: y, width: w, height: h) - } - } - } -} -//MARK: UIScrollViewDelegate -extension PhotoBrowserCell : UIScrollViewDelegate { - // 当scrollview 尝试进行缩放的时候 - public func viewForZooming(in scrollView: UIScrollView) -> UIView? { - return self.imgView - } - - // 当缩放完毕的时候调用 - public func scrollViewDidEndZooming(_ scrollView: UIScrollView, with view: UIView?, atScale scale: CGFloat) { - - } - // 将要开始缩放 - public func scrollViewWillBeginZooming(_ scrollView: UIScrollView, with view: UIView?) { - - } - - // 当正在缩放的时候 - public func scrollViewDidZoom(_ scrollView: UIScrollView) { -// 获取到这个scrollview - var centerX = self.backScroll.center.x - var centerY = self.backScroll.center.y - centerX = scrollView.contentSize.width > scrollView.frame.size.width ? scrollView.contentSize.width/2 : centerX - centerY = scrollView.contentSize.height > scrollView.frame.size.height ? scrollView.contentSize.height/2 : centerY - self.imgView.center = CGPoint(x: centerX, y: centerY) - } - - public func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) { - - } - -} - -// MARK: 点击的方法 -extension PhotoBrowserCell { - - @objc func imageClick(tap:UITapGestureRecognizer) { - - var newscale : CGFloat = 0 - - guard let scroll = tap.view?.superview as? UIScrollView else { - return - } - - if scroll.zoomScale == 1.0 { - newscale = 3 - }else { - newscale = 1.0 - } - - let zoomRect = self.zoomRectForScale(scrollview: scroll,scale: newscale, center: tap.location(in: tap.view)) - - scroll.zoom(to: zoomRect, animated: true) - } - - @objc func viewClick(tap:UITapGestureRecognizer) { - if self.backScroll.zoomScale != 1 { - let zoomRect = self.zoomRectForScale(scrollview: self.backScroll,scale: 1, center: self.center) - self.backScroll.zoom(to: zoomRect, animated: true) - }else{ - - if tap.state == .recognized { - self.tapMoveCallBack?(self.imgView) - } - } - } - - func zoomRectForScale(scrollview: UIScrollView, scale: CGFloat,center: CGPoint) -> CGRect { - var zoomRect: CGRect = CGRect() - zoomRect.size.height = scrollview.frame.size.height / scale - zoomRect.size.width = scrollview.frame.size.width / scale - zoomRect.origin.x = center.x - (zoomRect.size.width / 2.0) - zoomRect.origin.y = center.y - (zoomRect.size.height / 2.0) - return zoomRect - } - -} - - -// MARK: 添加手势 -extension PhotoBrowserCell: UIGestureRecognizerDelegate { - // 点击手势 - func addTapGesture(imageview: UIView,scroll: UIScrollView) { - imageview.isUserInteractionEnabled = true - scroll.isUserInteractionEnabled = true - let doubleTap = UITapGestureRecognizer(target: self, action: #selector(imageClick(tap:))) - doubleTap.numberOfTapsRequired = 2 - imageview.addGestureRecognizer(doubleTap) - - let tap = UITapGestureRecognizer(target: self, action: #selector(viewClick(tap:))) - tap.numberOfTapsRequired = 1 - tap.numberOfTouchesRequired = 1 - imageview.addGestureRecognizer(tap) - scroll.addGestureRecognizer(tap) - - tap.require(toFail: doubleTap) - } - // 拖动手势 - func addPanGesture(_ imgView: UIView) { - let pan = UIPanGestureRecognizer(target: self, action: #selector(panRecognizerAction(pan:))) - imgView.addGestureRecognizer(pan) - imgView.isUserInteractionEnabled = true - pan.delegate = self - } - - @objc func panRecognizerAction(pan:UIPanGestureRecognizer) { - guard let imageview = pan.view else { - return - } - guard let imgSuperView = imageview.superview else { - return - } - let translation = pan.translation(in: imageview) - if pan.state == .changed { - imageview.center = CGPoint(x: imageview.center.x, y: imageview.center.y + translation.y) - pan.setTranslation(.zero, in: imgSuperView) - //滑动时改变背景透明度 - - let alphaScale = abs(imageview.center.y - kScreenHeight / 2) -// self.backView.backgroundColor = UIColor.black.withAlphaComponent((kScreenHeight - CGFloat(alphaScale)) / kScreenHeight) - self.changeAlphaCallBack?(((kScreenHeight - CGFloat(alphaScale)) / kScreenHeight)) - }else if pan.state == .ended { - - // 如果偏移量大于某个值,直接划走消失,否则回归原位 - if imageview.center.y > kScreenHeight / 2 + 60 { - self.imagePanRemoveAnimation(false, imageview: imageview) - }else if imageview.center.y < kScreenHeight / 2 - 60 { - self.imagePanRemoveAnimation(true, imageview: imageview) - }else{ - // 回复原位 - let imgW = kScreenWidth - let imgH = kScreenWidth * (imageview.frame.size.height) / (imageview.frame.size.width) - let y = (kScreenHeight - imgH) / 2 - UIView.animate(withDuration: 0.3) { - //背景色不透明 - self.changeAlphaCallBack?(1) - imageview.frame = CGRect(x: 0, y: y, width: imgW, height: imgH) - } - } - } - } - - // 只允许上下起作用 - public override func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool { - guard let panView = gestureRecognizer.view else { - return false - } - // 正在缩放的view,不支持手势 - guard panView.frame.size.width == kScreenWidth else{ - return false - } - // 长图不支持 - guard panView.frame.size.height <= kScreenHeight else{ - return false - } - if gestureRecognizer.isKind(of: UIPanGestureRecognizer.self) { - let panGesture = gestureRecognizer as! UIPanGestureRecognizer - let offset = panGesture.translation(in: panView) - if offset.x == 0 && offset.y != 0 { - return true - } - } - - return false - } - - func imagePanRemoveAnimation(_ isTop: Bool,imageview: UIView) { - let duration = 0.4 - if isTop { - // 向上划走消失 - let imgW = kScreenWidth - let imgH = kScreenWidth * (imageview.frame.size.height) / (imageview.frame.size.width) - - UIView.animate(withDuration: duration) { - imageview.frame = CGRect(x: 0, y: -imgH , width: imgW, height: imgH) - } - - self.backRemoveCallBack?() - }else{ - // 向下划走消失 - let imgW = kScreenWidth - let imgH = kScreenWidth * (imageview.frame.size.height) / (imageview.frame.size.width) - - UIView.animate(withDuration: duration) { - imageview.frame = CGRect(x: 0, y: kScreenHeight, width: imgW, height: imgH) - } - - self.backRemoveCallBack?() - } - } -} diff --git a/NECommonUIKit/NEKitCommonUI/Classes/PhotoBrowser/PhotoBrowserController.swift b/NECommonUIKit/NEKitCommonUI/Classes/PhotoBrowser/PhotoBrowserController.swift deleted file mode 100644 index 96e3328b..00000000 --- a/NECommonUIKit/NEKitCommonUI/Classes/PhotoBrowser/PhotoBrowserController.swift +++ /dev/null @@ -1,136 +0,0 @@ - -// Copyright (c) 2022 NetEase, Inc. All rights reserved. -// Use of this source code is governed by a MIT license that can be found in the LICENSE file. - - -import Foundation -import NEKitCommon - -public class PhotoBrowserController: UIViewController { - - private let SystemNaviBarHeight: CGFloat = UIApplication.shared.statusBarFrame.height + 24 - - public lazy var toolsBar: BrowserToolsBar = { - let bar = BrowserToolsBar() - bar.delegate = self - bar.translatesAutoresizingMaskIntoConstraints = false - return bar - }() - - public lazy var successView: ToastImageView = { - let success = ToastImageView() - success.frame = CGRect(x: 0, y: 0, width: 118, height: 120) - success.contentLabel.text = "已保存到系统相册" - return success - }() - - internal var showView: PhotoBrowserBigImgBackView - internal var number: Int - public init(imgs: [UIImage],img: UIImage) { - var number = 0 - _ = imgs.enumerated().map { (index,urlStr) in - if urlStr == img { - number = index - } - } - self.number = number - self.showView = PhotoBrowserBigImgBackView(imgArr: imgs, number: number) - super.init(nibName: nil, bundle: nil) - } - - public init(urls: [String],url: String) { - var number = 0 - _ = urls.enumerated().map { (index,urlStr) in - if urlStr == url { - number = index - } - } - self.number = number - self.showView = PhotoBrowserBigImgBackView.init(urlArr: urls, number: number) - super.init(nibName: nil, bundle: nil) - } - - required init?(coder: NSCoder) { - fatalError("init(coder:) has not been implemented") - } - - public override func viewDidLoad() { - super.viewDidLoad() - self.view.backgroundColor = .clear - self.layoutViews() - self.showView.transformAnimation() - } - - func layoutViews() { - self.view.addSubview(self.showView) - - self.showView.dismissCallBack = { [weak self] in - self?.dismiss(animated: false, completion: nil) - } - - showView.addSubview(toolsBar) - toolsBar.leftAnchor.constraint(equalTo: showView.leftAnchor).isActive = true - toolsBar.rightAnchor.constraint(equalTo: showView.rightAnchor).isActive = true - toolsBar.heightAnchor.constraint(equalToConstant: 44.0).isActive = true - if #available(iOS 11.0, *) { - toolsBar.bottomAnchor.constraint(equalTo: showView.safeAreaLayoutGuide.bottomAnchor, constant: -27).isActive = true - } else { - toolsBar.bottomAnchor.constraint(equalTo: showView.bottomAnchor, constant: -27).isActive = true - } - } - - public override func viewWillAppear(_ animated: Bool) { - super.viewWillAppear(animated) - } - -} - -extension PhotoBrowserController: BrowserToolsBarDelegate { - - public func didCloseClick() { - showView.dismissPhotoBrowser() - } - - public func didPhotoClick() { - let imagePickerVC = UIImagePickerController() - imagePickerVC.allowsEditing = false - imagePickerVC.sourceType = .photoLibrary - present(imagePickerVC, animated: true) - } - - public func didSaveClick() { - view.makeToastActivity(.center) - weak var weakSelf = self - DispatchQueue.main.async { - weakSelf?.saveImage() - } - } - - - // 保存图片 - @objc func saveImage() { - - let index = showView.currentIndex() - if self.showView.urlArr.count > 0 { - let urlString = self.showView.urlArr[index] - if let url = URL(string: urlString), let data = try? Data.init(contentsOf: url), let img = UIImage(data: data) { - UIImageWriteToSavedPhotosAlbum(img, self, #selector(save(image:didFinishSavingWithError:contextInfo:)), nil) - }else { - view.hideToastActivity() - } - }else{ - let img = self.showView.imgArr[index] - UIImageWriteToSavedPhotosAlbum(img, self, #selector(save(image:didFinishSavingWithError:contextInfo:)), nil) - } - } - - @objc func save(image:UIImage, didFinishSavingWithError:NSError?,contextInfo:AnyObject) { - view.hideToastActivity() - if let error = didFinishSavingWithError { - showToast(error.localizedDescription) - } else { - view.showToast(successView, point: view.center) - } - } - -} diff --git a/NECommonUIKit/NEKitCommonUI/Classes/PhotoBrowser/PhotoBrowserFlowLayout.swift b/NECommonUIKit/NEKitCommonUI/Classes/PhotoBrowser/PhotoBrowserFlowLayout.swift deleted file mode 100644 index 35512b8f..00000000 --- a/NECommonUIKit/NEKitCommonUI/Classes/PhotoBrowser/PhotoBrowserFlowLayout.swift +++ /dev/null @@ -1,81 +0,0 @@ - -// Copyright (c) 2022 NetEase, Inc. All rights reserved. -// Use of this source code is governed by a MIT license that can be found in the LICENSE file. - - -import UIKit - -public class PhotoBrowserFlowLayout: UICollectionViewFlowLayout { - - public var lastOffset: CGPoint - - public override init() { - self.lastOffset = .zero - super.init() - } - - required init?(coder: NSCoder) { - fatalError("init(coder:) has not been implemented") - } - - public override func prepare() { - super.prepare() - self.lastOffset = self.collectionView?.contentOffset ?? .zero - self.collectionView?.decelerationRate = .fast - } -} - -extension PhotoBrowserFlowLayout { - - /** - * 这个方法的返回值,就决定了collectionView停止滚动时的偏移量 - */ - - public override func targetContentOffset(forProposedContentOffset proposedContentOffset: CGPoint, withScrollingVelocity velocity: CGPoint) -> CGPoint { - var proposedContentOffset = proposedContentOffset - let pageSpace = self.stepSpace() - let offsetMax: CGFloat = self.collectionView?.contentSize.width ?? UIScreen.main.bounds.size.width - (pageSpace + self.sectionInset.right + self.minimumLineSpacing) - let offsetMin: CGFloat = 0 - /*修改之前记录的位置,如果小于最小contentsize或者大于最大contentsize则重置值*/ - if self.lastOffset.x < offsetMin { - lastOffset.x = offsetMin - }else if self.lastOffset.x > offsetMax { - lastOffset.x = offsetMax - } - - let offsetForCurrentPointX: CGFloat = abs(proposedContentOffset.x - self.lastOffset.x) //目标位移点距离当前点的距离绝对值 - let velocityX: CGFloat = velocity.x - let direction:Bool = (proposedContentOffset.x - self.lastOffset.x) > 0 //判断当前滑动方向,手指向左滑动:YES;手指向右滑动:NO - - if offsetForCurrentPointX > (pageSpace / 8) && self.lastOffset.x >= offsetMin && lastOffset.x <= offsetMax { - var pageFactor: CGFloat = 0 //分页因子,用于计算滑过的cell个数 - if velocityX != 0 - { - // 滑动 - pageFactor = abs(velocityX) //速率越快,cell滑动的数量越多 - }else{ - /** - * 拖动 - * 没有速率,则计算:位移差/默认步距=分页因子 - */ - pageFactor = abs(offsetForCurrentPointX / pageSpace) - } - /*设置pageFactor上限为2, 防止滑动速率过大,导致翻页过多*/ - pageFactor = pageFactor<1 ? 1 : 1 - let pageOffsetX = pageSpace * pageFactor - proposedContentOffset = CGPoint(x: self.lastOffset.x + (direction ? pageOffsetX : -pageOffsetX), y: proposedContentOffset.y) - }else{ - proposedContentOffset = CGPoint(x: self.lastOffset.x,y: self.lastOffset.y) - } - //记录当前最新位置 - self.lastOffset.x = proposedContentOffset.x - return proposedContentOffset - } - - /** - *计算每滑动一页的距离:步距 - */ - func stepSpace() -> CGFloat { - return self.itemSize.width + self.minimumLineSpacing - } -} diff --git a/NECommonUIKit/NEKitCommonUI/Classes/PopListViewController.swift b/NECommonUIKit/NEKitCommonUI/Classes/PopListViewController.swift deleted file mode 100644 index 7869927f..00000000 --- a/NECommonUIKit/NEKitCommonUI/Classes/PopListViewController.swift +++ /dev/null @@ -1,121 +0,0 @@ - -// Copyright (c) 2022 NetEase, Inc. All rights reserved. -// Use of this source code is governed by a MIT license that can be found in the LICENSE file. - - -import Foundation -import UIKit -import NEKitCommon - -public class PopListItem { - public typealias PopListClick = () -> Void - public var image: UIImage? - public var showName: String? - public var completion: PopListClick? - - public init(){} -} - - -public class PopListViewController: UIViewController { - - public var itemDatas = [PopListItem]() - - public var buttonHeight: CGFloat = 32.0 - - public var popViewWidth: CGFloat = 122.0 - - public var popViewRadius: CGFloat = 8.0 - - public override func viewDidLoad() { - super.viewDidLoad() - setupUI() - } - - public override func viewDidDisappear(_ animated: Bool) { - super.viewDidDisappear(animated) - removeSelf() - } - - func setupUI(){ - view.backgroundColor = .clear - - let popViewHeight: CGFloat = CGFloat(itemDatas.count) * 32 + 16 - - let shadowView = UIView() - shadowView.translatesAutoresizingMaskIntoConstraints = false - shadowView.backgroundColor = .clear - view.addSubview(shadowView) - shadowView.clipsToBounds = false - shadowView.layer.shadowOffset = CGSize(width: 0, height: 4) - shadowView.layer.shadowColor = NEConstant.hexRGB(0x85888C).cgColor - shadowView.layer.shadowOpacity = 0.25 - shadowView.layer.shadowRadius = 7 - NSLayoutConstraint.activate([ - shadowView.topAnchor.constraint(equalTo: view.topAnchor, constant: 2), - shadowView.rightAnchor.constraint(equalTo: view.rightAnchor, constant: -20), - shadowView.widthAnchor.constraint(equalToConstant: popViewWidth), - shadowView.heightAnchor.constraint(equalToConstant: popViewHeight) - ]) - - let popView = UIView() - shadowView.addSubview(popView) - popView.backgroundColor = NEConstant.hexRGB(0xFFFFFF) - popView.clipsToBounds = true - popView.layer.cornerRadius = popViewRadius - popView.translatesAutoresizingMaskIntoConstraints = false - - NSLayoutConstraint.activate([ - popView.topAnchor.constraint(equalTo: shadowView.topAnchor), - popView.rightAnchor.constraint(equalTo: shadowView.rightAnchor), - popView.leftAnchor.constraint(equalTo: shadowView.leftAnchor), - popView.bottomAnchor.constraint(equalTo: shadowView.bottomAnchor) - ]) - - let offset: CGFloat = 8 - for index in 0.., with event: UIEvent?) { - print("pop list view touchesBegan") - removeSelf() - } - -} diff --git a/NECommonUIKit/NEKitCommonUI/Classes/RedAngleLabel.swift b/NECommonUIKit/NEKitCommonUI/Classes/RedAngleLabel.swift deleted file mode 100644 index 4db0cb21..00000000 --- a/NECommonUIKit/NEKitCommonUI/Classes/RedAngleLabel.swift +++ /dev/null @@ -1,26 +0,0 @@ - -// Copyright (c) 2022 NetEase, Inc. All rights reserved. -// Use of this source code is governed by a MIT license that can be found in the LICENSE file. - - -import UIKit - -public class RedAngleLabel: UILabel { - - public var textInsets: UIEdgeInsets = .zero - public override func drawText(in rect: CGRect) { - super.drawText(in: rect.inset(by: textInsets)) - } - public override func textRect(forBounds bounds: CGRect, limitedToNumberOfLines numberOfLines: Int) -> CGRect { - let insets = textInsets - var rect = super.textRect(forBounds: bounds.inset(by: insets), - limitedToNumberOfLines: numberOfLines) - - rect.origin.x -= insets.left - rect.origin.y -= insets.top - rect.size.width += (insets.left + insets.right) - rect.size.height += (insets.top + insets.bottom) - return rect - } - -} diff --git a/NECommonUIKit/NEKitCommonUI/Classes/SearchTextField.swift b/NECommonUIKit/NEKitCommonUI/Classes/SearchTextField.swift deleted file mode 100644 index 6e13c2e9..00000000 --- a/NECommonUIKit/NEKitCommonUI/Classes/SearchTextField.swift +++ /dev/null @@ -1,35 +0,0 @@ - -// Copyright (c) 2022 NetEase, Inc. All rights reserved. -// Use of this source code is governed by a MIT license that can be found in the LICENSE file. - - -import UIKit - -public class SearchTextField:UITextField { - - public override func leftViewRect(forBounds bounds: CGRect) -> CGRect { - var rect = super.leftViewRect(forBounds: bounds) - rect.origin.x += 10 - return rect - } - - public override func placeholderRect(forBounds bounds: CGRect) -> CGRect { - var rect = super.placeholderRect(forBounds: bounds) - rect.origin.x += 1 - return rect - } - - public override func editingRect(forBounds bounds: CGRect) -> CGRect { - - var rect = super.editingRect(forBounds: bounds) - rect.origin.x += 5 - return rect - - } - - public override func textRect(forBounds bounds: CGRect) -> CGRect { - var rect = super.textRect(forBounds: bounds) - rect.origin.x += 5 - return rect - } -} diff --git a/NECommonUIKit/NEKitCommonUI/Classes/TabbarExtensionView.swift b/NECommonUIKit/NEKitCommonUI/Classes/TabbarExtensionView.swift deleted file mode 100644 index f2fe111d..00000000 --- a/NECommonUIKit/NEKitCommonUI/Classes/TabbarExtensionView.swift +++ /dev/null @@ -1,46 +0,0 @@ - -// Copyright (c) 2022 NetEase, Inc. All rights reserved. -// Use of this source code is governed by a MIT license that can be found in the LICENSE file. - - -import Foundation - -fileprivate let NEFlag: Int = 666 - -public extension UITabBar { - // MARK:- 显示小红点 - func showBadgOn(index itemIndex: Int, tabbarItemNums: CGFloat = 4.0) { - // 移除之前的小红点 - self.removeBadgeOn(index: itemIndex) - - // 创建小红点 - let bageView = UIView() - bageView.tag = itemIndex + NEFlag - bageView.layer.cornerRadius = 3 - bageView.backgroundColor = UIColor.red - let tabFrame = self.frame - - // 确定小红点的位置 - let percentX: CGFloat = (CGFloat(itemIndex) + 0.59) / tabbarItemNums - let x: CGFloat = CGFloat(ceilf(Float(percentX * tabFrame.size.width))) - let y: CGFloat = CGFloat(ceilf(Float(0.015 * tabFrame.size.height))) - bageView.frame = CGRect(x: x, y: y, width: 6, height: 6) - self.addSubview(bageView) - } - - // MARK:- 隐藏小红点 - func hideBadg(on itemIndex: Int) { - // 移除小红点 - self.removeBadgeOn(index: itemIndex) - } - - // MARK:- 移除小红点 - fileprivate func removeBadgeOn(index itemIndex: Int) { - // 按照tag值进行移除 - _ = subviews.map { - if $0.tag == itemIndex + NEFlag { - $0.removeFromSuperview() - } - } - } -} diff --git a/NECommonUIKit/NEKitCommonUI/Classes/UIAlertController.swift b/NECommonUIKit/NEKitCommonUI/Classes/UIAlertController.swift deleted file mode 100644 index 7762dd0e..00000000 --- a/NECommonUIKit/NEKitCommonUI/Classes/UIAlertController.swift +++ /dev/null @@ -1,16 +0,0 @@ - -// Copyright (c) 2022 NetEase, Inc. All rights reserved. -// Use of this source code is governed by a MIT license that can be found in the LICENSE file. - - -import Foundation - -public extension UIAlertController { - func fixIpadAction(){ - if UIDevice.current.userInterfaceIdiom == UIUserInterfaceIdiom.pad { - self.popoverPresentationController?.sourceView = view - self.popoverPresentationController?.sourceRect = CGRect(x: self.view.bounds.midX, y: self.view.bounds.midY, width: 0, height: 0) - self.popoverPresentationController?.permittedArrowDirections = [] - } - } -} diff --git a/NECommonUIKit/NEKitCommonUI/Classes/UIImageView.swift b/NECommonUIKit/NEKitCommonUI/Classes/UIImageView.swift deleted file mode 100644 index b13741bc..00000000 --- a/NECommonUIKit/NEKitCommonUI/Classes/UIImageView.swift +++ /dev/null @@ -1,124 +0,0 @@ - -// Copyright (c) 2022 NetEase, Inc. All rights reserved. -// Use of this source code is governed by a MIT license that can be found in the LICENSE file. - - -import Foundation - -class CornerView: UIView { - - var corner = UIRectCorner.bottomLeft - var radius: CGFloat = 8 - var color = UIColor.white - init(corner: UIRectCorner, radius: CGFloat = 8, color: UIColor = .white){ - self.corner = corner - self.radius = radius - super.init(frame: CGRect(x: 0, y: 0, width: radius, height: radius)) - } - - - required init?(coder: NSCoder) { -// fatalError("init(coder:) has not been implemented") - super.init(coder: coder) - } - - override func draw(_ rect: CGRect) { - - guard let context = UIGraphicsGetCurrentContext() else { return } - color.set() - context.setLineWidth(1.0) - switch corner { - case .bottomLeft: - context.move(to: CGPoint(x: radius, y: radius) ) - context.addLine(to: CGPoint(x: 0, y: radius)) - context.addLine(to: .zero) - context.addArc(center: CGPoint(x: radius, y: 0), radius: radius, startAngle: Double.pi, endAngle: 0.5 * Double.pi, clockwise: true) - break - case .bottomRight: - - context.move(to: CGPoint(x: radius, y: 0)) - context.addLine(to: CGPoint(x: radius, y: radius)) - context.addLine(to: CGPoint(x: 0, y: radius)) - context.addArc(center: .zero, radius: radius, startAngle: 0.5 * .pi, endAngle: 0, clockwise: true) - - break - case .topRight: - - context.move(to: .zero ) - context.addLine(to: CGPoint(x: radius, y: 0)) - context.addLine(to: CGPoint(x: radius, y: radius)) - context.addArc(center: CGPoint(x: 0, y: radius), radius: radius, startAngle: 0 , endAngle: -0.5 * .pi, clockwise: true) - - break - case .topLeft: - context.move(to: CGPoint(x: 0, y: radius)) - context.addLine(to: .zero) - context.addLine(to: CGPoint(x: radius, y: 0)) - context.addArc(center: CGPoint(x: radius, y: radius), radius: radius, startAngle: 1.5 * Double.pi, endAngle: Double.pi, clockwise: true) - break - default: - break - } - - context.fillPath() - context.strokePath() - } -} - -public extension UIImageView { - - func addCustomCorner(conrners: UIRectCorner, radius: CGFloat, backcolor: UIColor) { - if conrners.contains(UIRectCorner.topLeft) { - let view = CornerView(corner: .topLeft, radius: radius) - view.backgroundColor = .clear - view.translatesAutoresizingMaskIntoConstraints = false - addSubview(view) - NSLayoutConstraint.activate([ - view.leftAnchor.constraint(equalTo: leftAnchor), - view.topAnchor.constraint(equalTo: topAnchor), - view.widthAnchor.constraint(equalToConstant: radius), - view.heightAnchor.constraint(equalToConstant: radius) - ]) - } - - if conrners.contains(UIRectCorner.topRight) { - let view = CornerView(corner: .topRight, radius: radius) - view.backgroundColor = .clear - view.translatesAutoresizingMaskIntoConstraints = false - addSubview(view) - NSLayoutConstraint.activate([ - view.rightAnchor.constraint(equalTo: rightAnchor), - view.topAnchor.constraint(equalTo: topAnchor), - view.widthAnchor.constraint(equalToConstant: radius), - view.heightAnchor.constraint(equalToConstant: radius) - ]) - } - - if conrners.contains(UIRectCorner.bottomRight) { - let view = CornerView(corner: .bottomRight, radius: radius) - view.backgroundColor = .clear - view.translatesAutoresizingMaskIntoConstraints = false - addSubview(view) - NSLayoutConstraint.activate([ - view.rightAnchor.constraint(equalTo: rightAnchor), - view.bottomAnchor.constraint(equalTo: bottomAnchor), - view.widthAnchor.constraint(equalToConstant: radius), - view.heightAnchor.constraint(equalToConstant: radius) - ]) - } - - if conrners.contains(UIRectCorner.bottomLeft) { - let view = CornerView(corner: .bottomLeft, radius: radius) - view.backgroundColor = .clear - view.translatesAutoresizingMaskIntoConstraints = false - addSubview(view) - NSLayoutConstraint.activate([ - view.leftAnchor.constraint(equalTo: leftAnchor), - view.bottomAnchor.constraint(equalTo: bottomAnchor), - view.widthAnchor.constraint(equalToConstant: radius), - view.heightAnchor.constraint(equalToConstant: radius) - ]) - } - } - -} diff --git a/NECommonUIKit/NEKitCommonUI/Classes/VideoBrowser/VideoPlayerViewController.swift b/NECommonUIKit/NEKitCommonUI/Classes/VideoBrowser/VideoPlayerViewController.swift deleted file mode 100644 index afc07c96..00000000 --- a/NECommonUIKit/NEKitCommonUI/Classes/VideoBrowser/VideoPlayerViewController.swift +++ /dev/null @@ -1,241 +0,0 @@ - -// Copyright (c) 2022 NetEase, Inc. All rights reserved. -// Use of this source code is governed by a MIT license that can be found in the LICENSE file. - - -import UIKit -import AVFoundation -import NEKitCommon -public class VideoPlayerViewController: UIViewController { - - public var videoUrl: URL? - public var totalTime: Int? - - public lazy var playBtn: ExpandButton = { - let btn = ExpandButton() - btn.isHidden = true - btn.setImage(coreLoader.loadImage("video_play_big"), for: .normal) - btn.translatesAutoresizingMaskIntoConstraints = false - return btn - }() - - @Atomic var isRefreshProgress: Bool = true - - @Atomic var isPlayingEnd: Bool = false - - public lazy var toolsBar: BrowserToolsBar = { - let bar = BrowserToolsBar() - bar.delegate = self - bar.translatesAutoresizingMaskIntoConstraints = false - return bar - }() - - public lazy var successView: ToastImageView = { - let success = ToastImageView() - success.frame = CGRect(x: 0, y: 0, width: 118, height: 120) - success.contentLabel.text = "已保存到系统相册" - return success - }() - - public lazy var videoToolBar: VideoToolBar = { - let bar = VideoToolBar() - bar.translatesAutoresizingMaskIntoConstraints = false - bar.backgroundColor = .clear - bar.delegate = self - return bar - }() - - private var dismissGesture: UITapGestureRecognizer = { - let tap = UITapGestureRecognizer() - tap.numberOfTapsRequired = 1 - tap.numberOfTouchesRequired = 1 - return tap - }() - - var avPlayer: AVPlayer? - - public override func viewDidLoad() { - super.viewDidLoad() - - // Do any additional setup after loading the view. - setupUI() - } - - func setupUI(){ - - if let url = videoUrl { - let palyerItem = AVPlayerItem(url: url) - avPlayer = AVPlayer(playerItem: palyerItem) - let playerLayer = AVPlayerLayer.init(player: avPlayer) - playerLayer.videoGravity = .resizeAspect - playerLayer.frame = self.view.bounds - self.view.layer .addSublayer(playerLayer) - //播放 - avPlayer?.play() - - weak var weakSelf = self - let interval = CMTime(seconds: 0.2, preferredTimescale: CMTimeScale(NSEC_PER_SEC)) - avPlayer?.addPeriodicTimeObserver(forInterval: interval, queue: .main, using: { (time) in - // Update slider value to audio item progress. - if weakSelf?.isRefreshProgress == false { - return - } - if let duration = weakSelf?.avPlayer?.currentItem?.duration.seconds, - let seekTime = weakSelf?.avPlayer?.currentTime().seconds { - let proress = seekTime/duration - DispatchQueue.main.async { - weakSelf?.videoToolBar.progressSlider.value = Float(proress) - weakSelf?.videoToolBar.currentTime.text = Date.getFormatPlayTime(seekTime) - if proress >= 1.0 { - weakSelf?.endPlay() - } - } - - } - }) - } - - view.backgroundColor = .black - view.addSubview(toolsBar) - toolsBar.leftAnchor.constraint(equalTo: view.leftAnchor).isActive = true - toolsBar.rightAnchor.constraint(equalTo: view.rightAnchor).isActive = true - toolsBar.heightAnchor.constraint(equalToConstant: 44.0).isActive = true - if #available(iOS 11.0, *) { - toolsBar.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor, constant: -27).isActive = true - } else { - toolsBar.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: -27).isActive = true - } - - view.addSubview(videoToolBar) - NSLayoutConstraint.activate([ - videoToolBar.leftAnchor.constraint(equalTo: view.leftAnchor), - videoToolBar.rightAnchor.constraint(equalTo: view.rightAnchor), - videoToolBar.heightAnchor.constraint(equalToConstant: 44.0), - videoToolBar.bottomAnchor.constraint(equalTo: toolsBar.topAnchor) - ]) - - if let total = totalTime { - let time = Date.getFormatPlayTime(TimeInterval(total/1000)) - videoToolBar.totalTime.text = time - videoToolBar.total = total - } - - view.addSubview(playBtn) - NSLayoutConstraint.activate([ - playBtn.leftAnchor.constraint(equalTo: view.leftAnchor), - playBtn.topAnchor.constraint(equalTo: view.topAnchor), - playBtn.rightAnchor.constraint(equalTo: view.rightAnchor), - playBtn.bottomAnchor.constraint(equalTo: videoToolBar.topAnchor) - ]) - playBtn.addTarget(self, action: #selector(toPlay), for: .touchUpInside) - - view.addGestureRecognizer(dismissGesture) - dismissGesture.addTarget(self, action: #selector(dismissVideoToolBar)) - - NotificationCenter.default.addObserver(self, selector: #selector(playerDidFinishPlaying), name: .AVPlayerItemDidPlayToEndTime, object: nil) - - - } - - deinit { - NotificationCenter.default.removeObserver(self) - } - - @objc func toPlay(){ - if isPlayingEnd == true { - avPlayer?.seek(to: CMTime.zero) - isPlayingEnd = false - } - playBtn.isHidden = true - avPlayer?.play() - videoToolBar.playBtn.isSelected = false - } - - @objc func dismissVideoToolBar(){ - videoToolBar.isHidden = !videoToolBar.isHidden - } - -} - -extension VideoPlayerViewController: BrowserToolsBarDelegate, UINavigationControllerDelegate, VideoToolBarDelegate { - - func didClickPause() { - - avPlayer?.pause() - playBtn.isHidden = false - } - - func didClickPlay() { - if isPlayingEnd == true { - avPlayer?.seek(to: CMTime.zero) - isPlayingEnd = false - } - avPlayer?.play() - isRefreshProgress = true - playBtn.isHidden = true - } - - func didSeek(_ progress: Float) { - if let duration = totalTime { - let seekTime = Float(duration) * progress/1000.0 - print("seek value : ", seekTime) - avPlayer?.seek(to: CMTime(seconds: Double(seekTime), preferredTimescale: 1)) - } - } - - func didStopRefreshProgress() { - isRefreshProgress = false - } - - func didStartRefreshProgress() { - isRefreshProgress = true - } - - - public func didCloseClick() { - dismiss(animated: true, completion: nil) - } - - public func didPhotoClick() { - goPhotoAlbum(self, false, true) - } - - public func didSaveClick() { - - view.makeToastActivity(.center) - weak var weakSelf = self - DispatchQueue.main.async { - weakSelf?.didToSave() - } - } - - func didToSave(){ - if videoUrl?.isFileURL == true , let path = videoUrl?.path { - print("save path : ", path) - UISaveVideoAtPathToSavedPhotosAlbum(path, self, #selector(save(path:didFinishSavingWithError:contextInfo:)), nil) - }else { - view.hideToastActivity() - showToast("视频文件未保存到本地") - } - } - - public func endPlay(){ - videoToolBar.resetState() - playBtn.isHidden = false - } - - @objc func save(path:String, didFinishSavingWithError:NSError?,contextInfo:AnyObject) { - view.hideToastActivity() - if let error = didFinishSavingWithError { - showToast(error.localizedDescription) - } else { - view.showToast(successView, point: view.center) - } - } - - @objc func playerDidFinishPlaying(note: NSNotification) { - isPlayingEnd = true - } - - -} diff --git a/NECommonUIKit/NEKitCommonUI/Classes/VideoBrowser/VideoToolBar.swift b/NECommonUIKit/NEKitCommonUI/Classes/VideoBrowser/VideoToolBar.swift deleted file mode 100644 index 8f793666..00000000 --- a/NECommonUIKit/NEKitCommonUI/Classes/VideoBrowser/VideoToolBar.swift +++ /dev/null @@ -1,146 +0,0 @@ - -// Copyright (c) 2022 NetEase, Inc. All rights reserved. -// Use of this source code is governed by a MIT license that can be found in the LICENSE file. - - -import UIKit -import NEKitCommon - -protocol VideoToolBarDelegate: AnyObject { - func didClickPause() - func didClickPlay() - func didSeek(_ progress: Float) - func didStopRefreshProgress() - func didStartRefreshProgress() -} - -public class VideoToolBar: UIView { - - /* - // Only override draw() if you perform custom drawing. - // An empty implementation adversely affects performance during animation. - override func draw(_ rect: CGRect) { - // Drawing code - } - */ - var total: Int = 0 - - weak var delegate: VideoToolBarDelegate? - - public lazy var playBtn: ExpandButton = { - let btn = ExpandButton() - btn.setImage(coreLoader.loadImage("video_stop_icon"), for: .normal) - btn.setImage(coreLoader.loadImage("video_play_icon"), for: .selected) - btn.translatesAutoresizingMaskIntoConstraints = false - return btn - }() - - public lazy var currentTime: UILabel = { - let label = UILabel() - label.translatesAutoresizingMaskIntoConstraints = false - label.textColor = .white - label.font = NEConstant.defaultTextFont(12.0) - label.text = "00:00" - return label - }() - - public lazy var totalTime: UILabel = { - let label = UILabel() - label.translatesAutoresizingMaskIntoConstraints = false - label.textColor = .white - label.font = NEConstant.defaultTextFont(12.0) - return label - }() - - public lazy var progressSlider: UISlider = { - let slider = UISlider() - slider.tintColor = .white - slider.thumbTintColor = .white - slider.maximumValue = 1 - slider.minimumValue = 0 - slider.value = 0 - slider.minimumTrackTintColor = .white - slider.isContinuous = true - slider.maximumTrackTintColor = NEConstant.hexRGB(0x000000).withAlphaComponent(0.3) - slider.setThumbImage(coreLoader.loadImage("thumb"), for: .normal) - slider.setThumbImage(coreLoader.loadImage("thumb"), for: .highlighted) - slider.translatesAutoresizingMaskIntoConstraints = false - return slider - }() - - override init(frame: CGRect) { - super.init(frame: frame) - setupUI() - } - - required init?(coder: NSCoder) { - super.init(coder: coder) - } - - func setupUI(){ - addSubview(playBtn) - NSLayoutConstraint.activate([ - playBtn.leftAnchor.constraint(equalTo: leftAnchor), - playBtn.centerYAnchor.constraint(equalTo: centerYAnchor), - playBtn.widthAnchor.constraint(equalToConstant: 60.0) - ]) - playBtn.addTarget(self, action: #selector(playClick(_:)), for: .touchUpInside) - - addSubview(currentTime) - NSLayoutConstraint.activate([ - currentTime.centerYAnchor.constraint(equalTo: centerYAnchor), - currentTime.leftAnchor.constraint(equalTo: leftAnchor, constant: 48.0) - ]) - - addSubview(progressSlider) - NSLayoutConstraint.activate([ - progressSlider.centerYAnchor.constraint(equalTo: centerYAnchor), - progressSlider.leftAnchor.constraint(equalTo: leftAnchor, constant: 90), - progressSlider.rightAnchor.constraint(equalTo: rightAnchor, constant: -55) - ]) - progressSlider.addTarget(self, action: #selector(sliderChange), for: .valueChanged) - progressSlider.addTarget(self, action: #selector(sliderTouchUp), for: .touchUpInside) - progressSlider.addTarget(self, action: #selector(sliderTouchUp), for: .touchUpOutside) - progressSlider.addTarget(self, action: #selector(sliderTouchDown), for: .touchDown) - - addSubview(totalTime) - NSLayoutConstraint.activate([ - totalTime.rightAnchor.constraint(equalTo: rightAnchor, constant: -15.0), - totalTime.centerYAnchor.constraint(equalTo: centerYAnchor) - ]) - - } - - @objc func sliderChange(){ - delegate?.didSeek(progressSlider.value) - if playBtn.isSelected == true { - let current = Float(total) * progressSlider.value - currentTime.text = Date.getFormatPlayTime((Double(current)/1000.0)) - } - } - - @objc func sliderTouchUp(){ - delegate?.didStartRefreshProgress() - delegate?.didSeek(progressSlider.value) - } - - @objc func sliderTouchDown(){ - delegate?.didStopRefreshProgress() - } - - @objc func playClick(_ btn: ExpandButton){ - btn.isSelected = !btn.isSelected - if btn.isSelected == true { - delegate?.didClickPause() - }else { - delegate?.didClickPlay() - } - } - - public func resetState(){ - playBtn.isSelected = true - progressSlider.value = 0 - currentTime.text = "00:00" - } - -} diff --git a/NECommonUIKit/NEKitCommonUI/Classes/View/BrowserToolsBar.swift b/NECommonUIKit/NEKitCommonUI/Classes/View/BrowserToolsBar.swift deleted file mode 100644 index 7871675c..00000000 --- a/NECommonUIKit/NEKitCommonUI/Classes/View/BrowserToolsBar.swift +++ /dev/null @@ -1,98 +0,0 @@ - -// Copyright (c) 2022 NetEase, Inc. All rights reserved. -// Use of this source code is governed by a MIT license that can be found in the LICENSE file. - - -import UIKit - -public protocol BrowserToolsBarDelegate: AnyObject { - func didCloseClick() - func didPhotoClick() - func didSaveClick() -} - -public class BrowserToolsBar: UIView { - - /* - // Only override draw() if you perform custom drawing. - // An empty implementation adversely affects performance during animation. - override func draw(_ rect: CGRect) { - // Drawing code - } - */ - - public weak var delegate: BrowserToolsBarDelegate? - - public lazy var saveBtn: ExpandButton = { - let btn = ExpandButton() - btn.translatesAutoresizingMaskIntoConstraints = false - btn.setImage(coreLoader.loadImage("save_btn"), for: .normal) - return btn - }() - - public lazy var closeBtn: ExpandButton = { - let btn = ExpandButton() - btn.translatesAutoresizingMaskIntoConstraints = false - btn.setImage(coreLoader.loadImage("close_btn"), for: .normal) - return btn - }() - - public lazy var photoBtn: ExpandButton = { - let btn = ExpandButton() - btn.translatesAutoresizingMaskIntoConstraints = false - btn.setImage(coreLoader.loadImage("photo_btn"), for: .normal) - return btn - }() - - override init(frame: CGRect) { - super.init(frame: frame) - setupUI() - } - - required init?(coder: NSCoder) { - super.init(coder: coder) - } - - func setupUI(){ - backgroundColor = .clear - addSubview(closeBtn) - NSLayoutConstraint.activate([ - closeBtn.leftAnchor.constraint(equalTo: leftAnchor, constant: 20), - closeBtn.centerYAnchor.constraint(equalTo: centerYAnchor), - closeBtn.heightAnchor.constraint(equalToConstant: 28), - closeBtn.widthAnchor.constraint(equalToConstant: 28) - ]) - closeBtn.addTarget(self, action: #selector(closeClick), for: .touchUpInside) - - addSubview(photoBtn) - NSLayoutConstraint.activate([ - photoBtn.rightAnchor.constraint(equalTo: rightAnchor, constant: -20), - photoBtn.centerYAnchor.constraint(equalTo: centerYAnchor), - photoBtn.heightAnchor.constraint(equalToConstant: 28), - photoBtn.widthAnchor.constraint(equalToConstant: 28) - ]) - photoBtn.addTarget(self, action: #selector(photoClick), for: .touchUpInside) - - addSubview(saveBtn) - NSLayoutConstraint.activate([ - saveBtn.rightAnchor.constraint(equalTo: photoBtn.leftAnchor, constant: -20), - saveBtn.centerYAnchor.constraint(equalTo: centerYAnchor), - saveBtn.heightAnchor.constraint(equalToConstant: 28), - saveBtn.widthAnchor.constraint(equalToConstant: 28) - ]) - saveBtn.addTarget(self, action: #selector(saveClick), for: .touchUpInside) - } - - @objc func saveClick(){ - delegate?.didSaveClick() - } - - @objc func photoClick(){ - delegate?.didPhotoClick() - } - - @objc func closeClick(){ - delegate?.didCloseClick() - } - -} diff --git a/NECommonUIKit/NEKitCommonUI/Classes/View/CornerCell.swift b/NECommonUIKit/NEKitCommonUI/Classes/View/CornerCell.swift deleted file mode 100644 index ecea3c04..00000000 --- a/NECommonUIKit/NEKitCommonUI/Classes/View/CornerCell.swift +++ /dev/null @@ -1,98 +0,0 @@ - -// Copyright (c) 2022 NetEase, Inc. All rights reserved. -// Use of this source code is governed by a MIT license that can be found in the LICENSE file. - - -import UIKit -import NEKitCommon - -public struct CornerType:OptionSet { - public init(rawValue: Int) { self.rawValue = rawValue } - public let rawValue: Int - public static let none = CornerType(rawValue: 1) - public static let topLeft = CornerType(rawValue: 2) - public static let topRight = CornerType(rawValue: 4) - public static let bottomLeft = CornerType(rawValue: 8) - public static let bottomRight = CornerType(rawValue: 16) -} - -open class CornerCell: UITableViewCell { - - var cornerLayer = CAShapeLayer() - public var fillColor: UIColor = .white - public var edgeInset: UIEdgeInsets = UIEdgeInsets(top: 0, left: 20, bottom: 0, right: 20) - private var type : CornerType = .none - public var cornerType: CornerType { - get { return type } - set { - if type != newValue { - type = newValue - sizeToFit() - } - } - } - - public override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) { - super.init(style: style, reuseIdentifier: reuseIdentifier) - self.backgroundColor = NEConstant.hexRGB(0xF1F1F6) - selectionStyle = .none - self.layer.insertSublayer(cornerLayer, below: self.contentView.layer) - print(#function) - contentView.addSubview(dividerLine) - NSLayoutConstraint.activate([ - dividerLine.leftAnchor.constraint(equalTo: contentView.leftAnchor, constant: 36), - dividerLine.rightAnchor.constraint(equalTo: contentView.rightAnchor, constant: -20), - dividerLine.heightAnchor.constraint(equalToConstant: 1), - dividerLine.bottomAnchor.constraint(equalTo: contentView.bottomAnchor) - ]) - } - - lazy var dividerLine: UIView = { - let line = UIView() - line.translatesAutoresizingMaskIntoConstraints = false - line.backgroundColor = NEConstant.hexRGB(0xF5F8FC) - line.isHidden = true - return line - }() - - public var showDefaultLine = false - - required public init?(coder: NSCoder) { - super.init(coder: coder) - } - - public override func draw(_ rect: CGRect) { - drawRoundedCorner(rect: rect) - print(#function) - } - - public func drawRoundedCorner(rect: CGRect) { - var path: UIBezierPath = UIBezierPath() - let roundRect = CGRect(x: rect.origin.x + edgeInset.left, y: rect.origin.y + edgeInset.top, width: rect.width - (edgeInset.left + edgeInset.right), height: rect.height - (edgeInset.top + edgeInset.bottom)) - if type == .none { - path = UIBezierPath(rect: roundRect) - if showDefaultLine { dividerLine.isHidden = false } - } - var corners = UIRectCorner() - if type.contains(CornerType.topLeft) { - corners = corners.union(.topLeft) - if showDefaultLine { dividerLine.isHidden = false } - } - if type.contains(CornerType.topRight) { - corners = corners.union(.topRight) - } - if type.contains(CornerType.bottomLeft) { - corners = corners.union(.bottomLeft) - if showDefaultLine { dividerLine.isHidden = true } - } - if type.contains(CornerType.bottomRight) { - corners = corners.union(.bottomRight) - - } - path = UIBezierPath(roundedRect:roundRect, byRoundingCorners: corners, cornerRadii: CGSize(width: 10, height: 10)) - - cornerLayer.path = path.cgPath - cornerLayer.fillColor = fillColor.cgColor - } - -} diff --git a/NECommonUIKit/NEKitCommonUI/Classes/View/TextBaseCell.swift b/NECommonUIKit/NEKitCommonUI/Classes/View/TextBaseCell.swift deleted file mode 100644 index e0ffb742..00000000 --- a/NECommonUIKit/NEKitCommonUI/Classes/View/TextBaseCell.swift +++ /dev/null @@ -1,67 +0,0 @@ - -// Copyright (c) 2022 NetEase, Inc. All rights reserved. -// Use of this source code is governed by a MIT license that can be found in the LICENSE file. - - -import UIKit - -open class TextBaseCell: UITableViewCell { - - public override func awakeFromNib() { - super.awakeFromNib() - // Initialization code - } - - public override func setSelected(_ selected: Bool, animated: Bool) { - super.setSelected(selected, animated: animated) - - // Configure the view for the selected state - } - - public override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) { - super.init(style: style, reuseIdentifier: reuseIdentifier) - setupSubviews() - } - func setupSubviews(){ - self.selectionStyle = .none - self.contentView.addSubview(headImge) - self.contentView.addSubview(titleLabel) - - NSLayoutConstraint.activate([ - headImge.leftAnchor.constraint(equalTo: self.contentView.leftAnchor,constant: 20), - headImge.centerYAnchor.constraint(equalTo: self.contentView.centerYAnchor), - headImge.widthAnchor.constraint(equalToConstant: 36), - headImge.heightAnchor.constraint(equalToConstant: 36) - ]) - - NSLayoutConstraint.activate([ - titleLabel.leftAnchor.constraint(equalTo: headImge.rightAnchor,constant: 12), - titleLabel.rightAnchor.constraint(equalTo: self.contentView.rightAnchor,constant: -20), - titleLabel.centerYAnchor.constraint(equalTo: headImge.centerYAnchor) - ]) - - } - - required public init?(coder: NSCoder) { - fatalError("init(coder:) has not been implemented") - } - - public lazy var headImge: NEUserHeaderView = { - let headView = NEUserHeaderView(frame: .zero) - headView.titleLabel.textColor = .white - headView.titleLabel.font = UIFont.systemFont(ofSize: 14) - headView.translatesAutoresizingMaskIntoConstraints = false - headView.layer.cornerRadius = 18 - headView.clipsToBounds = true - return headView - }() - - - public lazy var titleLabel:UILabel = { - let label = UILabel() - label.translatesAutoresizingMaskIntoConstraints = false - label.textColor = UIColor.ne_darkText - label.font = UIFont.systemFont(ofSize: 14) - return label - }() -} diff --git a/NECommonUIKit/NEKitCommonUI/Classes/View/ToastImageView.swift b/NECommonUIKit/NEKitCommonUI/Classes/View/ToastImageView.swift deleted file mode 100644 index 5a962ea2..00000000 --- a/NECommonUIKit/NEKitCommonUI/Classes/View/ToastImageView.swift +++ /dev/null @@ -1,66 +0,0 @@ - -// Copyright (c) 2022 NetEase, Inc. All rights reserved. -// Use of this source code is governed by a MIT license that can be found in the LICENSE file. - - -import UIKit -import NEKitCommon - -public class ToastImageView: UIView { - - /* - // Only override draw() if you perform custom drawing. - // An empty implementation adversely affects performance during animation. - override func draw(_ rect: CGRect) { - // Drawing code - } - */ - - public var imageView: UIImageView = { - let image = UIImageView() - image.translatesAutoresizingMaskIntoConstraints = false - image.image = coreLoader.loadImage("white_right_img") - return image - }() - - public var contentLabel: UILabel = { - let label = UILabel() - label.translatesAutoresizingMaskIntoConstraints = false - label.font = NEConstant.defaultTextFont(14.0) - label.numberOfLines = 2 - label.textColor = .white - label.textAlignment = .center - return label - }() - - override init(frame: CGRect) { - super.init(frame: frame) - setupUI() - } - - required init?(coder: NSCoder) { - super.init(coder: coder) - } - - func setupUI(){ - addSubview(imageView) - NSLayoutConstraint.activate([ - imageView.centerXAnchor.constraint(equalTo: centerXAnchor), - imageView.topAnchor.constraint(equalTo: topAnchor, constant: 36) - ]) - - addSubview(contentLabel) - NSLayoutConstraint.activate([ - contentLabel.leftAnchor.constraint(equalTo: leftAnchor, constant: 10), - contentLabel.rightAnchor.constraint(equalTo: rightAnchor, constant: -10), - contentLabel.topAnchor.constraint(equalTo: imageView.bottomAnchor, constant: 20) - ]) - - backgroundColor = NEConstant.hexRGB(0x4C4C4C) - clipsToBounds = true - layer.cornerRadius = 8.0 - - - } - -} diff --git a/NECommonUIKit/NEKitCommonUI/Classes/View/VideoStateView.swift b/NECommonUIKit/NEKitCommonUI/Classes/View/VideoStateView.swift deleted file mode 100644 index 8d24cc8f..00000000 --- a/NECommonUIKit/NEKitCommonUI/Classes/View/VideoStateView.swift +++ /dev/null @@ -1,168 +0,0 @@ - -// Copyright (c) 2022 NetEase, Inc. All rights reserved. -// Use of this source code is governed by a MIT license that can be found in the LICENSE file. - - -import UIKit -import NEKitCommon - -public enum VideoState { - case VideoPlay - case VideoDownload -} - -public class VideoStateView: UIView { - - /* - // Only override draw() if you perform custom drawing. - // An empty implementation adversely affects performance during animation. - override func draw(_ rect: CGRect) { - // Drawing code - } - */ - - lazy var circleLayer: CAShapeLayer = { - let layer = CAShapeLayer() - layer.isHidden = true - return layer - }() - - lazy var progressLayer: CAShapeLayer = { - let layer = CAShapeLayer() - layer.isHidden = true - return layer - }() - - public var state = VideoState.VideoPlay { - didSet { - switch state { - case .VideoPlay: - videoPlayImage.isHidden = false - verticalLineLeft.isHidden = true - verticalLineRight.isHidden = true - circleLayer.isHidden = true - progressLayer.isHidden = true - alphaBackView.isHidden = true - case .VideoDownload: - videoPlayImage.isHidden = true - verticalLineLeft.isHidden = false - verticalLineRight.isHidden = false - circleLayer.isHidden = false - progressLayer.isHidden = false - alphaBackView.isHidden = false - } - } - } - - lazy var videoPlayImage: UIImageView = { - let image = UIImageView() - image.translatesAutoresizingMaskIntoConstraints = false - image.image = coreLoader.loadImage("video_play") - image.isHidden = false - return image - }() - - lazy var alphaBackView: UIView = { - let view = UIView() - view.backgroundColor = NEConstant.hexRGB(0x000000).withAlphaComponent(0.2) - view.clipsToBounds = true - view.layer.cornerRadius = 21 - view.isHidden = true - return view - }() - - lazy var verticalLineLeft: UIView = { - let line = UIView() - line.translatesAutoresizingMaskIntoConstraints = false - line.backgroundColor = .white - line.clipsToBounds = true - line.layer.cornerRadius = 1.5 - line.isHidden = true - return line - }() - - lazy var verticalLineRight: UIView = { - let line = UIView() - line.translatesAutoresizingMaskIntoConstraints = false - line.backgroundColor = .white - line.clipsToBounds = true - line.layer.cornerRadius = 1.5 - line.isHidden = true - return line - }() - - override init(frame: CGRect) { - super.init(frame: frame) - setupUI() - } - - required init?(coder: NSCoder) { - super.init(coder: coder) - } - - func setupUI(){ - addSubview(videoPlayImage) - NSLayoutConstraint.activate([ - videoPlayImage.centerXAnchor.constraint(equalTo: centerXAnchor), - videoPlayImage.centerYAnchor.constraint(equalTo: centerYAnchor) - ]) - - addSubview(alphaBackView) - NSLayoutConstraint.activate([ - alphaBackView.centerXAnchor.constraint(equalTo: centerXAnchor), - alphaBackView.centerYAnchor.constraint(equalTo: centerYAnchor), - alphaBackView.widthAnchor.constraint(equalToConstant: 42), - alphaBackView.heightAnchor.constraint(equalToConstant: 42) - ]) - - addSubview(verticalLineLeft) - NSLayoutConstraint.activate([ - verticalLineLeft.centerYAnchor.constraint(equalTo: centerYAnchor), - verticalLineLeft.centerXAnchor.constraint(equalTo: centerXAnchor, constant: -4.5), - verticalLineLeft.heightAnchor.constraint(equalToConstant: 18.0), - verticalLineLeft.widthAnchor.constraint(equalToConstant: 3) - ]) - - addSubview(verticalLineRight) - NSLayoutConstraint.activate([ - verticalLineRight.centerYAnchor.constraint(equalTo: centerYAnchor), - verticalLineRight.centerXAnchor.constraint(equalTo: centerXAnchor, constant: 4.5), - verticalLineRight.heightAnchor.constraint(equalToConstant: 18.0), - verticalLineRight.widthAnchor.constraint(equalToConstant: 3) - ]) - - let borderPath = UIBezierPath(arcCenter: CGPoint(x: 30, y: 30), radius: 21, startAngle:0, endAngle: 2 * Double.pi, clockwise: true) - circleLayer.path = borderPath.cgPath - circleLayer.strokeColor = UIColor.white.withAlphaComponent(0.5).cgColor - circleLayer.fillColor = UIColor.clear.cgColor - circleLayer.lineWidth = 4 - circleLayer.frame = self.bounds - layer.addSublayer(circleLayer) - - layer.addSublayer(progressLayer) - - } - - public func setProgress(_ progress: Float){ - print("video state view set progress : ", progress) - if progress < 1.0 && state == .VideoPlay { - state = .VideoDownload - } - let center = CGPoint(x: frame.size.width / 2.0, y: frame.size.height / 2.0) - let start = -0.5 * Float.pi - let end = progress * Float.pi - print("video state center :", center) - - let progressPath = UIBezierPath(arcCenter: center, radius: 21, startAngle: CGFloat(start), endAngle: CGFloat(end), clockwise: true) - progressLayer.path = progressPath.cgPath - progressLayer.strokeColor = UIColor.white.cgColor - progressLayer.fillColor = UIColor.clear.cgColor - progressLayer.lineWidth = 4 - if progress >= 1.0 && state == .VideoDownload { - state = .VideoPlay - } - } - - - -} diff --git a/NECommonUIKit/NEKitCommonUI/Classes/ViewControllerExtension.swift b/NECommonUIKit/NEKitCommonUI/Classes/ViewControllerExtension.swift deleted file mode 100644 index d8cb830d..00000000 --- a/NECommonUIKit/NEKitCommonUI/Classes/ViewControllerExtension.swift +++ /dev/null @@ -1,270 +0,0 @@ - -// Copyright (c) 2022 NetEase, Inc. All rights reserved. -// Use of this source code is governed by a MIT license that can be found in the LICENSE file. - - -import UIKit -import AVFoundation -import Toast_Swift -import NEKitCommon - -public typealias AlertCallBack = () -> Void - -extension UIViewController: UIImagePickerControllerDelegate { - - public var rightNavBtn: ExpandButton { - get { - if let btn = objc_getAssociatedObject(self, UnsafeRawPointer.init(bitPattern: "rightNavBtn".hashValue)!) as? ExpandButton { - return btn - }else { - let btn = ExpandButton(frame: CGRect(x: 0, y: 0, width: 60, height: 44)) - self.rightNavBtn = btn - btn.setTitleColor(.ne_blueText, for: .normal) - btn.titleLabel?.font = NEConstant.defaultTextFont(16) - return btn - } - } - - set { - objc_setAssociatedObject(self, UnsafeRawPointer.init(bitPattern: "rightNavBtn".hashValue)!, newValue, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN_NONATOMIC) - } - } - - - public var leftNavBtn: ExpandButton { - get { - if let btn = objc_getAssociatedObject(self, UnsafeRawPointer.init(bitPattern: "leftNavBtn".hashValue)!) as? ExpandButton { - return btn - }else { - let btn = ExpandButton(frame: CGRect(x: 0, y: 0, width: 60, height: 44)) - self.leftNavBtn = btn - btn.setTitleColor(.ne_darkText, for: .normal) - btn.titleLabel?.font = NEConstant.defaultTextFont(16) - return btn - } - } - set { - objc_setAssociatedObject(self, UnsafeRawPointer.init(bitPattern: "leftNavBtn".hashValue)!, newValue, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN_NONATOMIC) - } - } - - public func addLeftAction(_ image: UIImage?, _ selector: Selector, _ target: Any?){ - let leftItem = UIBarButtonItem(image: image, style: .plain, target: target, action: selector) - leftItem.tintColor = .ne_greyText - navigationItem.leftBarButtonItem = leftItem - } - - public func addLeftAction(_ title: String, _ selector: Selector, _ target: Any?){ - leftNavBtn.addTarget(target, action: selector, for: .touchUpInside) - leftNavBtn.setTitle(title, for: .normal) - let leftItem = UIBarButtonItem(customView: leftNavBtn) - leftItem.tintColor = .ne_blueText - navigationItem.leftBarButtonItem = leftItem - } - - - public func addRightAction(_ image: UIImage?, _ selector: Selector, _ target: Any?){ - let rightItem = UIBarButtonItem(image: image, style: .plain, target: target, action: selector) - rightItem.tintColor = .ne_greyText - navigationItem.rightBarButtonItem = rightItem - } - - public func addRightAction(_ title: String, _ selector: Selector, _ target: Any?){ - rightNavBtn.addTarget(target, action: selector, for: .touchUpInside) - rightNavBtn.setTitle(title, for: .normal) - let rightItem = UIBarButtonItem(customView: rightNavBtn) - rightItem.tintColor = .ne_blueText - navigationItem.rightBarButtonItem = rightItem - } - - public func showAlert(title: String = commonLocalizable("qchat_tip"), message: String?, sureText: String = commonLocalizable("qchat_sure"), cancelText: String = commonLocalizable("qchat_cancel"), _ sureBack: @escaping AlertCallBack, cancelBack: AlertCallBack? = nil ) { - let alertController = UIAlertController(title: title, message: message, preferredStyle: .alert) - - let cancelAction = UIAlertAction(title: cancelText, style: .default) { action in - if let block = cancelBack { - block() - } - } - alertController.addAction(cancelAction) - let sureAction = UIAlertAction(title: sureText, style: .default) { action in - sureBack() - } - alertController.addAction(sureAction) - print("show alert view") - present(alertController, animated: true, completion: nil) - } - - public func showSingleAlert(title: String = commonLocalizable("qchat_tip"), message: String?, sureText: String = commonLocalizable("qchat_sure"), _ sureBack: @escaping AlertCallBack) { - let alertController = UIAlertController(title: title, message: message, preferredStyle: .alert) - let sureAction = UIAlertAction(title: sureText, style: .default) { action in - sureBack() - } - alertController.addAction(sureAction) - present(alertController, animated: true, completion: nil) - } - - public func showToast(_ message: String){ - UIApplication.shared.keyWindow?.endEditing(true) - view.makeToast(message, duration: 2, position: .center) - } - - public func showToastInWindow(_ message: String){ - UIApplication.shared.keyWindow?.endEditing(true) - UIApplication.shared.keyWindow?.makeToast(message) - } - - public func showActionSheet(_ actions: [UIAlertAction]){ - let alertController = UIAlertController(title: nil, message: nil, preferredStyle: .actionSheet) - actions.forEach { action in - action.setValue(UIColor.ne_darkText, forKey: "_titleTextColor") - alertController.addAction(action) - } - alertController.fixIpadAction() - self.present(alertController, animated: true, completion: nil) - } - - public func showBottomVideoAction(_ delegate: UIImagePickerControllerDelegate & UINavigationControllerDelegate, _ editing: Bool = true){ - - if !NEChatDetectNetworkTool.shareInstance.isNetworkRecahability() { - showToast("当前网络错误") - return - } - weak var weakSelf = self - - let alertController = UIAlertController(title: nil, message: nil, preferredStyle: .actionSheet) - - let cancelAction = UIAlertAction(title:commonLocalizable("取消"), style: .cancel, handler: nil) - cancelAction.setValue(UIColor.ne_darkText, forKey: "_titleTextColor") - - let takingPicturesAction = UIAlertAction(title:commonLocalizable("摄像"), style: .default){ action in - weakSelf?.goCamera(delegate, editing, true) - } - takingPicturesAction.setValue(UIColor.ne_darkText, forKey: "_titleTextColor") - - let localPhotoAction = UIAlertAction(title:commonLocalizable("拍照"), style: .default){ action in - weakSelf?.goCamera(delegate, editing, false) - } - localPhotoAction.setValue(UIColor.ne_darkText, forKey: "_titleTextColor") - - alertController.addAction(cancelAction) - alertController.addAction(localPhotoAction) - alertController.addAction(takingPicturesAction) - fixAlertOnIpad(alertController) - self.present(alertController, animated:true, completion:nil) - } - - private func fixAlertOnIpad(_ alertViewController: UIAlertController) { - alertViewController.fixIpadAction() -// if UIDevice.current.userInterfaceIdiom == UIUserInterfaceIdiom.pad { -// alertViewController.popoverPresentationController?.sourceView = view -// alertViewController.popoverPresentationController?.sourceRect = CGRect(x: self.view.bounds.midX, y: self.view.bounds.midY, width: 0, height: 0) -// alertViewController.popoverPresentationController?.permittedArrowDirections = [] -// } - } - - public func showBottomAlert(_ delegate: UIImagePickerControllerDelegate & UINavigationControllerDelegate, _ editing: Bool = true){ - - if !NEChatDetectNetworkTool.shareInstance.isNetworkRecahability() { - showToast("当前网络错误") - return - } - - let alertController = UIAlertController(title: nil, message: nil, preferredStyle: .actionSheet) - - let cancelAction = UIAlertAction(title:commonLocalizable("取消"), style: .cancel, handler: nil) - cancelAction.setValue(UIColor.ne_darkText, forKey: "_titleTextColor") - - let takingPicturesAction = UIAlertAction(title:commonLocalizable("拍照"), style: .default){ action in - self.goCamera(delegate, editing) - } - takingPicturesAction.setValue(UIColor.ne_darkText, forKey: "_titleTextColor") - - let localPhotoAction = UIAlertAction(title:commonLocalizable("从相册选择"), style: .default){ action in - self.goPhotoAlbum(delegate, editing) - } - localPhotoAction.setValue(UIColor.ne_darkText, forKey: "_titleTextColor") - - alertController.addAction(cancelAction) - alertController.addAction(takingPicturesAction) - alertController.addAction(localPhotoAction) - fixAlertOnIpad(alertController) - self.present(alertController, animated:true, completion:nil) - } - - public func goCamera(_ delegate: UIImagePickerControllerDelegate & UINavigationControllerDelegate, _ editing: Bool, _ isVideo: Bool = false){ - - let authStatus = AVCaptureDevice.authorizationStatus(for: AVMediaType.video) - if (authStatus == .authorized) {//已授权,可以打开相机 - let cameraPicker = UIImagePickerController() - cameraPicker.delegate = delegate - cameraPicker.allowsEditing = editing - cameraPicker.sourceType = .camera - if isVideo == true { - cameraPicker.mediaTypes = ["public.movie"] - } - //在需要的地方present出来 - self.present(cameraPicker, animated: true, completion: nil) - - } else if (authStatus == .denied) { - - showAlert(message: "请去-> [设置 - 隐私 - 相机] 打开访问开关") {} - - } else if (authStatus == .restricted) {//相机权限受限 - - showAlert(message: "相机权限受限") {} - - } else if (authStatus == .notDetermined) {//首次 使用 - AVCaptureDevice.requestAccess(for: .video, completionHandler: { (statusFirst) in - if statusFirst { //用户首次允许 - let cameraPicker = UIImagePickerController() - cameraPicker.delegate = delegate - cameraPicker.allowsEditing = true - cameraPicker.sourceType = .camera - //在需要的地方present出来 - DispatchQueue.main.async { - self.present(cameraPicker, animated: true, completion: nil) - } - } else {//用户首次拒接 - - } - }) - } - } - - public func goPhotoAlbum(_ delegate: UIImagePickerControllerDelegate & UINavigationControllerDelegate, _ editing: Bool, _ isVideo: Bool = false){ - NEAuthManager.requestCameraAuthorization { granted in - if granted { - let photoPicker = UIImagePickerController() - photoPicker.delegate = delegate - photoPicker.allowsEditing = editing - photoPicker.sourceType = .photoLibrary - if isVideo == true { - photoPicker.mediaTypes = ["public.movie"] - } - //在需要的地方present出来 - self.present(photoPicker, animated: true, completion: nil) - }else { - self.showToast("未打开相册权限") - } - } - } - - public func goPhotoAlbumWithVideo(_ delegate: UIImagePickerControllerDelegate & UINavigationControllerDelegate){ - NEAuthManager.requestCameraAuthorization { granted in - if granted { - let photoPicker = UIImagePickerController() - photoPicker.delegate = delegate - photoPicker.sourceType = .photoLibrary - photoPicker.mediaTypes = ["public.movie","public.image"] - //在需要的地方present出来 - self.present(photoPicker, animated: true, completion: nil) - }else { -// self.view.makeToast("未打开相册权限") - self.showToast("未打开相册权限") - - } - } - } - -} -