From 57a64b8f21452f226f8386c2791d99b44c4b4dca Mon Sep 17 00:00:00 2001 From: hongxin <294005139@qq.com> Date: Sat, 21 Nov 2020 22:24:01 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BB=93=E6=9E=84=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .codecov.yml | 2 +- .travis.yml | 2 +- HXPHPicker/Bundle+HXPhotoPicker.swift | 25 + HXPHPicker/HXAlbumView.swift | 71 +++ HXPHPicker/HXAlbumViewCell.swift | 103 ++++ HXPHPicker/HXAlbumViewController.swift | 162 ++++++ HXPHPicker/HXPHAsset.swift | 164 ++++++ HXPHPicker/HXPHAssetCollection.swift | 77 +++ HXPHPicker/HXPHAssetManager.swift | 389 ++++++++++++++ HXPHPicker/HXPHConfiguration.swift | 353 ++++++++++++ HXPHPicker/HXPHManager.swift | 159 ++++++ .../en.lproj/Localizable.strings | Bin 0 -> 1456 bytes .../ja.lproj/Localizable.strings | 20 + .../ko.lproj/Localizable.strings | 22 + .../zh-Hans.lproj/Localizable.strings | Bin 0 -> 1134 bytes .../zh-Hant.lproj/Localizable.strings | 22 + HXPHPicker/HXPHPickerController.swift | 501 ++++++++++++++++++ HXPHPicker/HXPHPickerViewCell.swift | 286 ++++++++++ HXPHPicker/HXPHPickerViewController.swift | 404 ++++++++++++++ HXPHPicker/HXPHPreviewViewCell.swift | 303 +++++++++++ HXPHPicker/HXPHPreviewViewController.swift | 286 ++++++++++ HXPHPicker/HXPHTools.swift | 130 +++++ HXPHPicker/HXPHTypes.swift | 54 ++ HXPHPicker/String+HXPHPicker.swift | 40 ++ HXPHPicker/UIColor+HXPHPicker.swift | 31 ++ HXPHPicker/UIDevice+HXPHPicker.swift | 126 +++++ HXPHPicker/UIFont+HXPHPicker.swift | 28 + HXPHPicker/UIImage+HXPHPicker.swift | 64 +++ HXPHPicker/UIView+HXPHPicker.swift | 383 +++++++++++++ HXPHPicker/UIViewController+HXPHPicker.swift | 20 + .../HXPhotoPicker_DemoUITests.m | 48 -- HXPhotoPicker-DemoUITests/Info.plist | 22 - HXPhotoPicker/Category/NSArray+HXExtension.h | 2 +- HXPhotoPicker/Category/NSArray+HXExtension.m | 2 +- .../Category/NSBundle+HXPhotoPicker.h | 2 +- .../Category/NSBundle+HXPhotoPicker.m | 2 +- HXPhotoPicker/Category/NSDate+HXExtension.h | 2 +- HXPhotoPicker/Category/NSDate+HXExtension.m | 2 +- HXPhotoPicker/Category/NSString+HXExtension.h | 2 +- HXPhotoPicker/Category/NSString+HXExtension.m | 2 +- HXPhotoPicker/Category/NSTimer+HXExtension.h | 2 +- HXPhotoPicker/Category/NSTimer+HXExtension.m | 2 +- HXPhotoPicker/Category/UIButton+HXExtension.h | 2 +- HXPhotoPicker/Category/UIButton+HXExtension.m | 2 +- HXPhotoPicker/Category/UIColor+HXExtension.h | 2 +- HXPhotoPicker/Category/UIColor+HXExtension.m | 2 +- HXPhotoPicker/Category/UIFont+HXExtension.h | 2 +- HXPhotoPicker/Category/UIFont+HXExtension.m | 2 +- HXPhotoPicker/Category/UIImage+HXExtension.h | 2 +- HXPhotoPicker/Category/UIImage+HXExtension.m | 2 +- .../Category/UIImageView+HXExtension.h | 2 +- .../Category/UIImageView+HXExtension.m | 2 +- HXPhotoPicker/Category/UILabel+HXExtension.h | 2 +- HXPhotoPicker/Category/UILabel+HXExtension.m | 2 +- HXPhotoPicker/Category/UIView+HXExtension.h | 2 +- HXPhotoPicker/Category/UIView+HXExtension.m | 2 +- .../Category/UIViewController+HXExtension.h | 2 +- .../Category/UIViewController+HXExtension.m | 2 +- .../Controller/HXAlbumListViewController.h | 2 +- .../Controller/HXAlbumListViewController.m | 2 +- .../Controller/HXCustomCameraController.h | 2 +- .../Controller/HXCustomCameraController.m | 2 +- .../Controller/HXCustomCameraViewController.h | 2 +- .../Controller/HXCustomCameraViewController.m | 2 +- .../Controller/HXCustomNavigationController.h | 2 +- .../Controller/HXCustomNavigationController.m | 2 +- .../Controller/HXPhoto3DTouchViewController.h | 2 +- .../Controller/HXPhoto3DTouchViewController.m | 2 +- .../Controller/HXPhotoEditViewController.h | 2 +- .../Controller/HXPhotoEditViewController.m | 2 +- .../Controller/HXPhotoPreviewViewController.h | 2 +- .../Controller/HXPhotoPreviewViewController.m | 4 +- .../Controller/HXPhotoViewController.h | 2 +- .../Controller/HXPhotoViewController.m | 2 +- .../Controller/HXVideoEditViewController.h | 2 +- .../Controller/HXVideoEditViewController.m | 2 +- HXPhotoPicker/HXAssetManager.h | 2 +- HXPhotoPicker/HXAssetManager.m | 2 +- HXPhotoPicker/HXPhotoCommon.h | 2 +- HXPhotoPicker/HXPhotoCommon.m | 2 +- HXPhotoPicker/HXPhotoConfiguration.h | 2 +- HXPhotoPicker/HXPhotoConfiguration.m | 2 +- HXPhotoPicker/HXPhotoDefine.h | 7 +- .../View/HXPhotoEditGraffitiColorSizeView.h | 2 +- .../View/HXPhotoEditGraffitiColorSizeView.m | 2 +- .../HXPhotoEdit/View/HXPhotoEditTextView.m | 1 + HXPhotoPicker/HXPhotoManager.h | 2 +- HXPhotoPicker/HXPhotoManager.m | 2 +- HXPhotoPicker/HXPhotoPicker.h | 2 +- HXPhotoPicker/HXPhotoTools.h | 4 +- HXPhotoPicker/HXPhotoTools.m | 15 +- HXPhotoPicker/HXPhotoTypes.h | 2 +- HXPhotoPicker/Model/HXAlbumModel.h | 2 +- HXPhotoPicker/Model/HXAlbumModel.m | 2 +- HXPhotoPicker/Model/HXCustomAssetModel.h | 2 +- HXPhotoPicker/Model/HXCustomAssetModel.m | 2 +- HXPhotoPicker/Model/HXPhotoModel.h | 2 +- HXPhotoPicker/Model/HXPhotoModel.m | 2 +- .../Model/HXPhotoViewCellCustomProtocol.h | 2 +- HXPhotoPicker/Model/HXPhotoViewProtocol.h | 2 +- .../HXPhotoEditTransition.h | 2 +- .../HXPhotoEditTransition.m | 2 +- .../HXPhotoInteractiveTransition.h | 2 +- .../HXPhotoInteractiveTransition.m | 9 +- .../HXPhotoPersentInteractiveTransition.h | 2 +- .../HXPhotoPersentInteractiveTransition.m | 2 +- .../HXPhotoViewPresentTransition.h | 2 +- .../HXPhotoViewPresentTransition.m | 2 +- .../HXPhotoViewTransition.h | 2 +- .../HXPhotoViewTransition.m | 2 +- HXPhotoPicker/View/HXAlbumlistView.h | 2 +- HXPhotoPicker/View/HXAlbumlistView.m | 2 +- HXPhotoPicker/View/HXCameraBottomView.h | 2 +- HXPhotoPicker/View/HXCameraBottomView.m | 2 +- HXPhotoPicker/View/HXCircleProgressView.h | 2 +- HXPhotoPicker/View/HXCircleProgressView.m | 2 +- HXPhotoPicker/View/HXCollectionView.h | 2 +- HXPhotoPicker/View/HXCollectionView.m | 2 +- .../View/HXCustomCollectionReusableView.h | 2 +- .../View/HXCustomCollectionReusableView.m | 2 +- HXPhotoPicker/View/HXCustomPreviewView.h | 2 +- HXPhotoPicker/View/HXCustomPreviewView.m | 2 +- .../View/HXFullScreenCameraPlayView.h | 2 +- .../View/HXFullScreenCameraPlayView.m | 2 +- HXPhotoPicker/View/HXPhotoBottomSelectView.h | 2 +- HXPhotoPicker/View/HXPhotoBottomSelectView.m | 2 +- .../View/HXPhotoCustomNavigationBar.h | 2 +- .../View/HXPhotoCustomNavigationBar.m | 2 +- HXPhotoPicker/View/HXPhotoPreviewBottomView.h | 2 +- HXPhotoPicker/View/HXPhotoPreviewBottomView.m | 2 +- .../View/HXPhotoPreviewImageViewCell.h | 2 +- .../View/HXPhotoPreviewImageViewCell.m | 2 +- .../View/HXPhotoPreviewLivePhotoCell.h | 2 +- .../View/HXPhotoPreviewLivePhotoCell.m | 2 +- .../View/HXPhotoPreviewVideoViewCell.h | 2 +- .../View/HXPhotoPreviewVideoViewCell.m | 2 +- HXPhotoPicker/View/HXPhotoPreviewViewCell.h | 2 +- HXPhotoPicker/View/HXPhotoPreviewViewCell.m | 4 +- HXPhotoPicker/View/HXPhotoSubViewCell.h | 2 +- HXPhotoPicker/View/HXPhotoSubViewCell.m | 2 +- HXPhotoPicker/View/HXPhotoView.h | 2 +- HXPhotoPicker/View/HXPhotoView.m | 2 +- HXPhotoPicker/View/HXPhotoViewFlowLayout.h | 2 +- HXPhotoPicker/View/HXPhotoViewFlowLayout.m | 2 +- HXPhotoPicker/View/HXPreviewContentView.h | 2 +- HXPhotoPicker/View/HXPreviewContentView.m | 2 +- HXPhotoPicker/View/HXPreviewImageView.h | 2 +- HXPhotoPicker/View/HXPreviewImageView.m | 2 +- HXPhotoPicker/View/HXPreviewLivePhotoView.h | 2 +- HXPhotoPicker/View/HXPreviewLivePhotoView.m | 2 +- HXPhotoPicker/View/HXPreviewVideoView.h | 2 +- HXPhotoPicker/View/HXPreviewVideoView.m | 2 +- .../project.pbxproj | 321 +++++++---- .../contents.xcworkspacedata | 0 .../xcshareddata/IDEWorkspaceChecks.plist | 0 .../xcshareddata/WorkspaceSettings.xcsettings | 0 .../xcschemes/HXPHPickerExample.xcscheme | 37 +- .../xcschemes/HXPhotoPickerExample.xcscheme | 36 +- .../xcschemes/HXPhotoPickerFramework.xcscheme | 11 +- .../contents.xcworkspacedata | 2 +- .../xcshareddata/IDEWorkspaceChecks.plist | 0 .../xcshareddata/WorkspaceSettings.xcsettings | 0 .../AppDelegate.h | 2 +- .../AppDelegate.m | 2 +- .../Assets.xcassets/0.imageset/Contents.json | 0 .../ab6ee730c94871de3382e22c5ffdacf1.jpg | Bin .../22ea5c0b716b2548069b91464012eeac.jpg | Bin .../Assets.xcassets/1.imageset/Contents.json | 0 .../0954d7ffbe081e75cdcf5bdcbc500f50.jpg | Bin .../Assets.xcassets/2.imageset/Contents.json | 0 .../5576ce269d16bd4422b66c5e75cfbe43 (1).jpg | Bin .../Assets.xcassets/3.imageset/Contents.json | 0 .../APPCityPlayer_bannerGame@2x.png | Bin .../APPCityPlayer_bannerGame@3x.png | Bin .../Contents.json | 0 .../AppIcon.appiconset/Contents.json | 0 .../HXPhotoPicker_Icon@2x.png | Bin .../AppIcon.appiconset/Icon-1024.png | Bin .../AppIcon.appiconset/Icon-60@2x.png | Bin .../AppIcon.appiconset/Icon-60@3x.png | Bin .../AppIcon.appiconset/Icon-Notify@2x.png | Bin .../AppIcon.appiconset/Icon-Notify@3x.png | Bin .../AppIcon.appiconset/Icon-Small-40@2x.png | Bin .../AppIcon.appiconset/Icon-Small-40@3x.png | Bin .../AppIcon.appiconset/Icon-Small@2x.png | Bin .../AppIcon.appiconset/Icon-Small@3x.png | Bin .../Assets.xcassets/Contents.json | 0 .../camera_overturn.imageset/Contents.json | 0 .../camera_overturn@2x.png | Bin .../camera_overturn@3x.png | Bin .../Contents.json | 0 .../camera_overturn_highlighted@2x.png | Bin .../camera_overturn_highlighted@3x.png | Bin .../feed_more_arrow.imageset/Contents.json | 0 .../feed_more_arrow@2x.png | Bin .../feed_more_arrow@3x.png | Bin .../Contents.json | 0 .../headlines_icon_arrow@2x.png | Bin .../headlines_icon_arrow@3x.png | Bin .../hotweibo_back_icon.imageset/Contents.json | 0 .../hotweibo_back_icon@2x.png | Bin .../hotweibo_back_icon@3x.png | Bin .../Contents.json | 0 .../hx_photo_edit_trash_close@2x.png | Bin .../hx_photo_edit_trash_close@3x.png | Bin .../Contents.json | 0 .../hx_photo_edit_trash_open@2x.png | Bin .../hx_photo_edit_trash_open@3x.png | Bin .../Contents.json | 0 .../news_2_merchant_back@2x.png | Bin .../wx_bg_image.imageset/Contents.json | 0 .../wx_bg_image.imageset/wx_bg_image@2x.png | Bin .../wx_head_icon.imageset/Contents.json | 0 .../wx_head_icon.imageset/wx_head_icon@2x.png | Bin .../Classes/Demo10ViewController.h | 2 +- .../Classes/Demo10ViewController.m | 2 +- .../Classes/Demo11ViewController.h | 2 +- .../Classes/Demo11ViewController.m | 2 +- .../Classes/Demo11ViewController.xib | 0 .../Classes/Demo12ViewController.h | 2 +- .../Classes/Demo12ViewController.m | 2 +- .../Classes/Demo14ViewController.h | 2 +- .../Classes/Demo14ViewController.m | 2 +- .../Classes/Demo15ViewController.h | 2 +- .../Classes/Demo15ViewController.m | 2 +- .../Classes/Demo1ViewController.h | 2 +- .../Classes/Demo1ViewController.m | 2 +- .../Classes/Demo1ViewController.xib | 0 .../Classes/Demo2ViewController.h | 2 +- .../Classes/Demo2ViewController.m | 2 +- .../Classes/Demo3ViewController.h | 2 +- .../Classes/Demo3ViewController.m | 2 +- .../Classes/Demo4ViewController.h | 2 +- .../Classes/Demo4ViewController.m | 2 +- .../Classes/Demo4ViewController.xib | 0 .../Classes/Demo5ViewController.h | 2 +- .../Classes/Demo5ViewController.m | 2 +- .../Classes/Demo6SubViewController.h | 2 +- .../Classes/Demo6SubViewController.m | 5 +- .../Classes/Demo6ViewController.h | 2 +- .../Classes/Demo6ViewController.m | 5 +- .../Classes/Demo7ViewController.h | 2 +- .../Classes/Demo7ViewController.m | 2 +- .../Classes/Demo8ViewController.h | 2 +- .../Classes/Demo8ViewController.m | 2 +- .../Classes/Demo9Model.h | 2 +- .../Classes/Demo9Model.m | 2 +- .../Classes/Demo9ViewCell.h | 2 +- .../Classes/Demo9ViewCell.m | 2 +- .../Classes/Demo9ViewController.h | 2 +- .../Classes/Demo9ViewController.m | 2 +- .../Classes/SettingViewController.h | 2 +- .../Classes/SettingViewController.m | 2 +- .../Classes/SettingViewController.xib | 0 .../Classes/UITextView+Placeholder.h | 0 .../Classes/UITextView+Placeholder.m | 0 .../Classes/ViewController.h | 2 +- .../Classes/ViewController.m | 2 +- .../Classes/WxMomentHeaderView.h | 2 +- .../Classes/WxMomentHeaderView.m | 2 +- .../Classes/WxMomentHeaderView.xib | 0 .../Classes/WxMomentPublishViewController.h | 2 +- .../Classes/WxMomentPublishViewController.m | 2 +- .../Classes/WxMomentPublishViewController.xib | 0 .../Classes/WxMomentViewCell.h | 2 +- .../Classes/WxMomentViewCell.m | 2 +- .../Classes/WxMomentViewCell.xib | 0 .../Classes/WxMomentViewController.h | 2 +- .../Classes/WxMomentViewController.m | 2 +- .../Classes/WxMomentViewController.xib | 0 .../Classes/YYFPSLabel.h | 0 .../Classes/YYFPSLabel.m | 0 .../Classes/YYWeakProxy.h | 0 .../Classes/YYWeakProxy.m | 0 .../0AA996F1-6566-4CA3-845F-5698DD9726A0.jpg | Bin ...2f070828381f30ed5bacf8ab014c086e06f024.jpg | Bin .../Classes/assets/HXCameraBottomView.xib | 0 .../HXPhotoEditChartletContentViewCell.xib | 0 .../assets/HXPhotoEditChartletListView.xib | 0 .../assets/HXPhotoEditChartletPreviewView.xib | 0 .../assets/HXPhotoEditClippingToolBar.xib | 0 .../HXPhotoEditGraffitiColorSizeView.xib | 0 .../assets/HXPhotoEditGraffitiColorView.xib | 0 .../HXPhotoEditGraffitiColorViewCell.xib | 0 .../Classes/assets/HXPhotoEditMosaicView.xib | 0 .../assets/HXPhotoEditStickerTrashView.xib | 0 .../Classes/assets/HXPhotoEditTextView.xib | 0 .../Classes/assets/HX_PhotoEditBottomView.xib | 0 .../Classes/assets/IMG_0168.GIF | Bin .../Classes/assets/LocalSampleVideo.mp4 | Bin .../Classes/assets/c81.mp4 | Bin .../Classes/assets/d87.jpeg | Bin .../Info.plist | 0 {HXPhotoPicker-Demo => Objective-C}/main.m | 2 +- Podfile | 2 +- Podfile.lock | 2 +- Pods/Manifest.lock | 2 +- Pods/Pods.xcodeproj/project.pbxproj | 292 +++++----- .../Pods-HXPhotoPicker-Demo-dummy.m | 5 - ...toPickerExample-acknowledgements.markdown} | 0 ...PhotoPickerExample-acknowledgements.plist} | 0 .../Pods-HXPhotoPickerExample-dummy.m | 5 + .../Pods-HXPhotoPickerExample.debug.xcconfig} | 0 ...ods-HXPhotoPickerExample.release.xcconfig} | 0 Swift/AppDelegate.swift | 29 + .../AccentColor.colorset/Contents.json | 11 + .../AppIcon.appiconset/Contents.json | 123 +++++ .../HXPhotoPicker_Icon@2x.png | Bin 0 -> 2691 bytes .../AppIcon.appiconset/Icon-1024.png | Bin 0 -> 208923 bytes .../AppIcon.appiconset/Icon-60@2x.png | Bin 0 -> 11976 bytes .../AppIcon.appiconset/Icon-60@3x.png | Bin 0 -> 19398 bytes .../AppIcon.appiconset/Icon-Notify@2x.png | Bin 0 -> 5718 bytes .../AppIcon.appiconset/Icon-Notify@3x.png | Bin 0 -> 7449 bytes .../AppIcon.appiconset/Icon-Small-40@2x.png | Bin 0 -> 9004 bytes .../AppIcon.appiconset/Icon-Small-40@3x.png | Bin 0 -> 11976 bytes .../AppIcon.appiconset/Icon-Small@2x.png | Bin 0 -> 7218 bytes .../AppIcon.appiconset/Icon-Small@3x.png | Bin 0 -> 9733 bytes Swift/Assets.xcassets/Contents.json | 6 + .../wx_head_icon.imageset/Contents.json | 21 + .../wx_head_icon.imageset/wx_head_icon@2x.png | Bin 0 -> 166052 bytes Swift/Base.lproj/LaunchScreen.storyboard | 25 + Swift/Base.lproj/Main.storyboard | 24 + Swift/Info.plist | 69 +++ Swift/ViewController.swift | 61 +++ 324 files changed, 5210 insertions(+), 545 deletions(-) create mode 100644 HXPHPicker/Bundle+HXPhotoPicker.swift create mode 100644 HXPHPicker/HXAlbumView.swift create mode 100644 HXPHPicker/HXAlbumViewCell.swift create mode 100644 HXPHPicker/HXAlbumViewController.swift create mode 100644 HXPHPicker/HXPHAsset.swift create mode 100644 HXPHPicker/HXPHAssetCollection.swift create mode 100644 HXPHPicker/HXPHAssetManager.swift create mode 100644 HXPHPicker/HXPHConfiguration.swift create mode 100644 HXPHPicker/HXPHManager.swift create mode 100644 HXPHPicker/HXPHPicker.bundle/en.lproj/Localizable.strings create mode 100644 HXPHPicker/HXPHPicker.bundle/ja.lproj/Localizable.strings create mode 100644 HXPHPicker/HXPHPicker.bundle/ko.lproj/Localizable.strings create mode 100644 HXPHPicker/HXPHPicker.bundle/zh-Hans.lproj/Localizable.strings create mode 100644 HXPHPicker/HXPHPicker.bundle/zh-Hant.lproj/Localizable.strings create mode 100644 HXPHPicker/HXPHPickerController.swift create mode 100644 HXPHPicker/HXPHPickerViewCell.swift create mode 100644 HXPHPicker/HXPHPickerViewController.swift create mode 100644 HXPHPicker/HXPHPreviewViewCell.swift create mode 100644 HXPHPicker/HXPHPreviewViewController.swift create mode 100644 HXPHPicker/HXPHTools.swift create mode 100644 HXPHPicker/HXPHTypes.swift create mode 100644 HXPHPicker/String+HXPHPicker.swift create mode 100644 HXPHPicker/UIColor+HXPHPicker.swift create mode 100644 HXPHPicker/UIDevice+HXPHPicker.swift create mode 100644 HXPHPicker/UIFont+HXPHPicker.swift create mode 100644 HXPHPicker/UIImage+HXPHPicker.swift create mode 100644 HXPHPicker/UIView+HXPHPicker.swift create mode 100644 HXPHPicker/UIViewController+HXPHPicker.swift delete mode 100644 HXPhotoPicker-DemoUITests/HXPhotoPicker_DemoUITests.m delete mode 100644 HXPhotoPicker-DemoUITests/Info.plist rename {HXPhotoPicker-Demo.xcodeproj => HXPhotoPickerExample.xcodeproj}/project.pbxproj (89%) rename {HXPhotoPicker-Demo.xcodeproj => HXPhotoPickerExample.xcodeproj}/project.xcworkspace/contents.xcworkspacedata (100%) rename {HXPhotoPicker-Demo.xcodeproj => HXPhotoPickerExample.xcodeproj}/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist (100%) rename {HXPhotoPicker-Demo.xcodeproj => HXPhotoPickerExample.xcodeproj}/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings (100%) rename HXPhotoPicker-Demo.xcodeproj/xcshareddata/xcschemes/HXPhotoPicker.xcscheme => HXPhotoPickerExample.xcodeproj/xcshareddata/xcschemes/HXPHPickerExample.xcscheme (62%) rename HXPhotoPicker-Demo.xcodeproj/xcshareddata/xcschemes/HXPhotoPicker-DemoUITests.xcscheme => HXPhotoPickerExample.xcodeproj/xcshareddata/xcschemes/HXPhotoPickerExample.xcscheme (60%) rename {HXPhotoPicker-Demo.xcodeproj => HXPhotoPickerExample.xcodeproj}/xcshareddata/xcschemes/HXPhotoPickerFramework.xcscheme (80%) rename {HXPhotoPicker-Demo.xcworkspace => HXPhotoPickerExample.xcworkspace}/contents.xcworkspacedata (76%) rename {HXPhotoPicker-Demo.xcworkspace => HXPhotoPickerExample.xcworkspace}/xcshareddata/IDEWorkspaceChecks.plist (100%) rename {HXPhotoPicker-Demo.xcworkspace => HXPhotoPickerExample.xcworkspace}/xcshareddata/WorkspaceSettings.xcsettings (100%) rename {HXPhotoPicker-Demo => Objective-C}/AppDelegate.h (91%) rename {HXPhotoPicker-Demo => Objective-C}/AppDelegate.m (99%) rename {HXPhotoPicker-Demo => Objective-C}/Assets.xcassets/0.imageset/Contents.json (100%) rename {HXPhotoPicker-Demo => Objective-C}/Assets.xcassets/0.imageset/ab6ee730c94871de3382e22c5ffdacf1.jpg (100%) rename {HXPhotoPicker-Demo => Objective-C}/Assets.xcassets/1.imageset/22ea5c0b716b2548069b91464012eeac.jpg (100%) rename {HXPhotoPicker-Demo => Objective-C}/Assets.xcassets/1.imageset/Contents.json (100%) rename {HXPhotoPicker-Demo => Objective-C}/Assets.xcassets/2.imageset/0954d7ffbe081e75cdcf5bdcbc500f50.jpg (100%) rename {HXPhotoPicker-Demo => Objective-C}/Assets.xcassets/2.imageset/Contents.json (100%) rename {HXPhotoPicker-Demo => Objective-C}/Assets.xcassets/3.imageset/5576ce269d16bd4422b66c5e75cfbe43 (1).jpg (100%) rename {HXPhotoPicker-Demo => Objective-C}/Assets.xcassets/3.imageset/Contents.json (100%) rename {HXPhotoPicker-Demo => Objective-C}/Assets.xcassets/APPCityPlayer_bannerGame.imageset/APPCityPlayer_bannerGame@2x.png (100%) rename {HXPhotoPicker-Demo => Objective-C}/Assets.xcassets/APPCityPlayer_bannerGame.imageset/APPCityPlayer_bannerGame@3x.png (100%) rename {HXPhotoPicker-Demo => Objective-C}/Assets.xcassets/APPCityPlayer_bannerGame.imageset/Contents.json (100%) rename {HXPhotoPicker-Demo => Objective-C}/Assets.xcassets/AppIcon.appiconset/Contents.json (100%) rename {HXPhotoPicker-Demo => Objective-C}/Assets.xcassets/AppIcon.appiconset/HXPhotoPicker_Icon@2x.png (100%) rename {HXPhotoPicker-Demo => Objective-C}/Assets.xcassets/AppIcon.appiconset/Icon-1024.png (100%) rename {HXPhotoPicker-Demo => Objective-C}/Assets.xcassets/AppIcon.appiconset/Icon-60@2x.png (100%) rename {HXPhotoPicker-Demo => Objective-C}/Assets.xcassets/AppIcon.appiconset/Icon-60@3x.png (100%) rename {HXPhotoPicker-Demo => Objective-C}/Assets.xcassets/AppIcon.appiconset/Icon-Notify@2x.png (100%) rename {HXPhotoPicker-Demo => Objective-C}/Assets.xcassets/AppIcon.appiconset/Icon-Notify@3x.png (100%) rename {HXPhotoPicker-Demo => Objective-C}/Assets.xcassets/AppIcon.appiconset/Icon-Small-40@2x.png (100%) rename {HXPhotoPicker-Demo => Objective-C}/Assets.xcassets/AppIcon.appiconset/Icon-Small-40@3x.png (100%) rename {HXPhotoPicker-Demo => Objective-C}/Assets.xcassets/AppIcon.appiconset/Icon-Small@2x.png (100%) rename {HXPhotoPicker-Demo => Objective-C}/Assets.xcassets/AppIcon.appiconset/Icon-Small@3x.png (100%) rename {HXPhotoPicker-Demo => Objective-C}/Assets.xcassets/Contents.json (100%) rename {HXPhotoPicker-Demo => Objective-C}/Assets.xcassets/camera_overturn.imageset/Contents.json (100%) rename {HXPhotoPicker-Demo => Objective-C}/Assets.xcassets/camera_overturn.imageset/camera_overturn@2x.png (100%) rename {HXPhotoPicker-Demo => Objective-C}/Assets.xcassets/camera_overturn.imageset/camera_overturn@3x.png (100%) rename {HXPhotoPicker-Demo => Objective-C}/Assets.xcassets/camera_overturn_highlighted.imageset/Contents.json (100%) rename {HXPhotoPicker-Demo => Objective-C}/Assets.xcassets/camera_overturn_highlighted.imageset/camera_overturn_highlighted@2x.png (100%) rename {HXPhotoPicker-Demo => Objective-C}/Assets.xcassets/camera_overturn_highlighted.imageset/camera_overturn_highlighted@3x.png (100%) rename {HXPhotoPicker-Demo => Objective-C}/Assets.xcassets/feed_more_arrow.imageset/Contents.json (100%) rename {HXPhotoPicker-Demo => Objective-C}/Assets.xcassets/feed_more_arrow.imageset/feed_more_arrow@2x.png (100%) rename {HXPhotoPicker-Demo => Objective-C}/Assets.xcassets/feed_more_arrow.imageset/feed_more_arrow@3x.png (100%) rename {HXPhotoPicker-Demo => Objective-C}/Assets.xcassets/headlines_icon_arrow.imageset/Contents.json (100%) rename {HXPhotoPicker-Demo => Objective-C}/Assets.xcassets/headlines_icon_arrow.imageset/headlines_icon_arrow@2x.png (100%) rename {HXPhotoPicker-Demo => Objective-C}/Assets.xcassets/headlines_icon_arrow.imageset/headlines_icon_arrow@3x.png (100%) rename {HXPhotoPicker-Demo => Objective-C}/Assets.xcassets/hotweibo_back_icon.imageset/Contents.json (100%) rename {HXPhotoPicker-Demo => Objective-C}/Assets.xcassets/hotweibo_back_icon.imageset/hotweibo_back_icon@2x.png (100%) rename {HXPhotoPicker-Demo => Objective-C}/Assets.xcassets/hotweibo_back_icon.imageset/hotweibo_back_icon@3x.png (100%) rename {HXPhotoPicker-Demo => Objective-C}/Assets.xcassets/hx_photo_edit_trash_close.imageset/Contents.json (100%) rename {HXPhotoPicker-Demo => Objective-C}/Assets.xcassets/hx_photo_edit_trash_close.imageset/hx_photo_edit_trash_close@2x.png (100%) rename {HXPhotoPicker-Demo => Objective-C}/Assets.xcassets/hx_photo_edit_trash_close.imageset/hx_photo_edit_trash_close@3x.png (100%) rename {HXPhotoPicker-Demo => Objective-C}/Assets.xcassets/hx_photo_edit_trash_open.imageset/Contents.json (100%) rename {HXPhotoPicker-Demo => Objective-C}/Assets.xcassets/hx_photo_edit_trash_open.imageset/hx_photo_edit_trash_open@2x.png (100%) rename {HXPhotoPicker-Demo => Objective-C}/Assets.xcassets/hx_photo_edit_trash_open.imageset/hx_photo_edit_trash_open@3x.png (100%) rename {HXPhotoPicker-Demo => Objective-C}/Assets.xcassets/news_2_merchant_back.imageset/Contents.json (100%) rename {HXPhotoPicker-Demo => Objective-C}/Assets.xcassets/news_2_merchant_back.imageset/news_2_merchant_back@2x.png (100%) rename {HXPhotoPicker-Demo => Objective-C}/Assets.xcassets/wx_bg_image.imageset/Contents.json (100%) rename {HXPhotoPicker-Demo => Objective-C}/Assets.xcassets/wx_bg_image.imageset/wx_bg_image@2x.png (100%) rename {HXPhotoPicker-Demo => Objective-C}/Assets.xcassets/wx_head_icon.imageset/Contents.json (100%) rename {HXPhotoPicker-Demo => Objective-C}/Assets.xcassets/wx_head_icon.imageset/wx_head_icon@2x.png (100%) rename {HXPhotoPicker-Demo => Objective-C}/Classes/Demo10ViewController.h (89%) rename {HXPhotoPicker-Demo => Objective-C}/Classes/Demo10ViewController.m (99%) rename {HXPhotoPicker-Demo => Objective-C}/Classes/Demo11ViewController.h (89%) rename {HXPhotoPicker-Demo => Objective-C}/Classes/Demo11ViewController.m (99%) rename {HXPhotoPicker-Demo => Objective-C}/Classes/Demo11ViewController.xib (100%) rename {HXPhotoPicker-Demo => Objective-C}/Classes/Demo12ViewController.h (89%) rename {HXPhotoPicker-Demo => Objective-C}/Classes/Demo12ViewController.m (99%) rename {HXPhotoPicker-Demo => Objective-C}/Classes/Demo14ViewController.h (91%) rename {HXPhotoPicker-Demo => Objective-C}/Classes/Demo14ViewController.m (99%) rename {HXPhotoPicker-Demo => Objective-C}/Classes/Demo15ViewController.h (91%) rename {HXPhotoPicker-Demo => Objective-C}/Classes/Demo15ViewController.m (99%) rename {HXPhotoPicker-Demo => Objective-C}/Classes/Demo1ViewController.h (89%) rename {HXPhotoPicker-Demo => Objective-C}/Classes/Demo1ViewController.m (99%) rename {HXPhotoPicker-Demo => Objective-C}/Classes/Demo1ViewController.xib (100%) rename {HXPhotoPicker-Demo => Objective-C}/Classes/Demo2ViewController.h (89%) rename {HXPhotoPicker-Demo => Objective-C}/Classes/Demo2ViewController.m (99%) rename {HXPhotoPicker-Demo => Objective-C}/Classes/Demo3ViewController.h (89%) rename {HXPhotoPicker-Demo => Objective-C}/Classes/Demo3ViewController.m (99%) rename {HXPhotoPicker-Demo => Objective-C}/Classes/Demo4ViewController.h (89%) rename {HXPhotoPicker-Demo => Objective-C}/Classes/Demo4ViewController.m (99%) rename {HXPhotoPicker-Demo => Objective-C}/Classes/Demo4ViewController.xib (100%) rename {HXPhotoPicker-Demo => Objective-C}/Classes/Demo5ViewController.h (89%) rename {HXPhotoPicker-Demo => Objective-C}/Classes/Demo5ViewController.m (99%) rename {HXPhotoPicker-Demo => Objective-C}/Classes/Demo6SubViewController.h (92%) rename {HXPhotoPicker-Demo => Objective-C}/Classes/Demo6SubViewController.m (93%) rename {HXPhotoPicker-Demo => Objective-C}/Classes/Demo6ViewController.h (89%) rename {HXPhotoPicker-Demo => Objective-C}/Classes/Demo6ViewController.m (96%) rename {HXPhotoPicker-Demo => Objective-C}/Classes/Demo7ViewController.h (89%) rename {HXPhotoPicker-Demo => Objective-C}/Classes/Demo7ViewController.m (99%) rename {HXPhotoPicker-Demo => Objective-C}/Classes/Demo8ViewController.h (89%) rename {HXPhotoPicker-Demo => Objective-C}/Classes/Demo8ViewController.m (99%) rename {HXPhotoPicker-Demo => Objective-C}/Classes/Demo9Model.h (98%) rename {HXPhotoPicker-Demo => Objective-C}/Classes/Demo9Model.m (98%) rename {HXPhotoPicker-Demo => Objective-C}/Classes/Demo9ViewCell.h (94%) rename {HXPhotoPicker-Demo => Objective-C}/Classes/Demo9ViewCell.m (99%) rename {HXPhotoPicker-Demo => Objective-C}/Classes/Demo9ViewController.h (89%) rename {HXPhotoPicker-Demo => Objective-C}/Classes/Demo9ViewController.m (99%) rename {HXPhotoPicker-Demo => Objective-C}/Classes/SettingViewController.h (94%) rename {HXPhotoPicker-Demo => Objective-C}/Classes/SettingViewController.m (99%) rename {HXPhotoPicker-Demo => Objective-C}/Classes/SettingViewController.xib (100%) rename {HXPhotoPicker-Demo => Objective-C}/Classes/UITextView+Placeholder.h (100%) rename {HXPhotoPicker-Demo => Objective-C}/Classes/UITextView+Placeholder.m (100%) rename {HXPhotoPicker-Demo => Objective-C}/Classes/ViewController.h (88%) rename {HXPhotoPicker-Demo => Objective-C}/Classes/ViewController.m (99%) rename {HXPhotoPicker-Demo => Objective-C}/Classes/WxMomentHeaderView.h (93%) rename {HXPhotoPicker-Demo => Objective-C}/Classes/WxMomentHeaderView.m (99%) rename {HXPhotoPicker-Demo => Objective-C}/Classes/WxMomentHeaderView.xib (100%) rename {HXPhotoPicker-Demo => Objective-C}/Classes/WxMomentPublishViewController.h (93%) rename {HXPhotoPicker-Demo => Objective-C}/Classes/WxMomentPublishViewController.m (99%) rename {HXPhotoPicker-Demo => Objective-C}/Classes/WxMomentPublishViewController.xib (100%) rename {HXPhotoPicker-Demo => Objective-C}/Classes/WxMomentViewCell.h (90%) rename {HXPhotoPicker-Demo => Objective-C}/Classes/WxMomentViewCell.m (94%) rename {HXPhotoPicker-Demo => Objective-C}/Classes/WxMomentViewCell.xib (100%) rename {HXPhotoPicker-Demo => Objective-C}/Classes/WxMomentViewController.h (91%) rename {HXPhotoPicker-Demo => Objective-C}/Classes/WxMomentViewController.m (99%) rename {HXPhotoPicker-Demo => Objective-C}/Classes/WxMomentViewController.xib (100%) rename {HXPhotoPicker-Demo => Objective-C}/Classes/YYFPSLabel.h (100%) rename {HXPhotoPicker-Demo => Objective-C}/Classes/YYFPSLabel.m (100%) rename {HXPhotoPicker-Demo => Objective-C}/Classes/YYWeakProxy.h (100%) rename {HXPhotoPicker-Demo => Objective-C}/Classes/YYWeakProxy.m (100%) rename {HXPhotoPicker-Demo => Objective-C}/Classes/assets/0AA996F1-6566-4CA3-845F-5698DD9726A0.jpg (100%) rename {HXPhotoPicker-Demo => Objective-C}/Classes/assets/9f2f070828381f30ed5bacf8ab014c086e06f024.jpg (100%) rename {HXPhotoPicker-Demo => Objective-C}/Classes/assets/HXCameraBottomView.xib (100%) rename {HXPhotoPicker-Demo => Objective-C}/Classes/assets/HXPhotoEditChartletContentViewCell.xib (100%) rename {HXPhotoPicker-Demo => Objective-C}/Classes/assets/HXPhotoEditChartletListView.xib (100%) rename {HXPhotoPicker-Demo => Objective-C}/Classes/assets/HXPhotoEditChartletPreviewView.xib (100%) rename {HXPhotoPicker-Demo => Objective-C}/Classes/assets/HXPhotoEditClippingToolBar.xib (100%) rename {HXPhotoPicker-Demo => Objective-C}/Classes/assets/HXPhotoEditGraffitiColorSizeView.xib (100%) rename {HXPhotoPicker-Demo => Objective-C}/Classes/assets/HXPhotoEditGraffitiColorView.xib (100%) rename {HXPhotoPicker-Demo => Objective-C}/Classes/assets/HXPhotoEditGraffitiColorViewCell.xib (100%) rename {HXPhotoPicker-Demo => Objective-C}/Classes/assets/HXPhotoEditMosaicView.xib (100%) rename {HXPhotoPicker-Demo => Objective-C}/Classes/assets/HXPhotoEditStickerTrashView.xib (100%) rename {HXPhotoPicker-Demo => Objective-C}/Classes/assets/HXPhotoEditTextView.xib (100%) rename {HXPhotoPicker-Demo => Objective-C}/Classes/assets/HX_PhotoEditBottomView.xib (100%) rename {HXPhotoPicker-Demo => Objective-C}/Classes/assets/IMG_0168.GIF (100%) rename {HXPhotoPicker-Demo => Objective-C}/Classes/assets/LocalSampleVideo.mp4 (100%) rename {HXPhotoPicker-Demo => Objective-C}/Classes/assets/c81.mp4 (100%) rename {HXPhotoPicker-Demo => Objective-C}/Classes/assets/d87.jpeg (100%) rename {HXPhotoPicker-Demo => Objective-C}/Info.plist (100%) rename {HXPhotoPicker-Demo => Objective-C}/main.m (92%) delete mode 100644 Pods/Target Support Files/Pods-HXPhotoPicker-Demo/Pods-HXPhotoPicker-Demo-dummy.m rename Pods/Target Support Files/{Pods-HXPhotoPicker-Demo/Pods-HXPhotoPicker-Demo-acknowledgements.markdown => Pods-HXPhotoPickerExample/Pods-HXPhotoPickerExample-acknowledgements.markdown} (100%) rename Pods/Target Support Files/{Pods-HXPhotoPicker-Demo/Pods-HXPhotoPicker-Demo-acknowledgements.plist => Pods-HXPhotoPickerExample/Pods-HXPhotoPickerExample-acknowledgements.plist} (100%) create mode 100644 Pods/Target Support Files/Pods-HXPhotoPickerExample/Pods-HXPhotoPickerExample-dummy.m rename Pods/Target Support Files/{Pods-HXPhotoPicker-Demo/Pods-HXPhotoPicker-Demo.debug.xcconfig => Pods-HXPhotoPickerExample/Pods-HXPhotoPickerExample.debug.xcconfig} (100%) rename Pods/Target Support Files/{Pods-HXPhotoPicker-Demo/Pods-HXPhotoPicker-Demo.release.xcconfig => Pods-HXPhotoPickerExample/Pods-HXPhotoPickerExample.release.xcconfig} (100%) create mode 100644 Swift/AppDelegate.swift create mode 100644 Swift/Assets.xcassets/AccentColor.colorset/Contents.json create mode 100644 Swift/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 Swift/Assets.xcassets/AppIcon.appiconset/HXPhotoPicker_Icon@2x.png create mode 100644 Swift/Assets.xcassets/AppIcon.appiconset/Icon-1024.png create mode 100644 Swift/Assets.xcassets/AppIcon.appiconset/Icon-60@2x.png create mode 100644 Swift/Assets.xcassets/AppIcon.appiconset/Icon-60@3x.png create mode 100644 Swift/Assets.xcassets/AppIcon.appiconset/Icon-Notify@2x.png create mode 100644 Swift/Assets.xcassets/AppIcon.appiconset/Icon-Notify@3x.png create mode 100644 Swift/Assets.xcassets/AppIcon.appiconset/Icon-Small-40@2x.png create mode 100644 Swift/Assets.xcassets/AppIcon.appiconset/Icon-Small-40@3x.png create mode 100644 Swift/Assets.xcassets/AppIcon.appiconset/Icon-Small@2x.png create mode 100644 Swift/Assets.xcassets/AppIcon.appiconset/Icon-Small@3x.png create mode 100644 Swift/Assets.xcassets/Contents.json create mode 100644 Swift/Assets.xcassets/wx_head_icon.imageset/Contents.json create mode 100644 Swift/Assets.xcassets/wx_head_icon.imageset/wx_head_icon@2x.png create mode 100644 Swift/Base.lproj/LaunchScreen.storyboard create mode 100644 Swift/Base.lproj/Main.storyboard create mode 100644 Swift/Info.plist create mode 100644 Swift/ViewController.swift diff --git a/.codecov.yml b/.codecov.yml index 6e8a3922..c56abd29 100644 --- a/.codecov.yml +++ b/.codecov.yml @@ -2,4 +2,4 @@ comment: layout: header, changes, diff coverage: ignore: - - HXPhotoPicker-Demo + - HXPhotoPickerExample diff --git a/.travis.yml b/.travis.yml index 890a8886..e58f76fe 100644 --- a/.travis.yml +++ b/.travis.yml @@ -6,7 +6,7 @@ before_install: script: - set -o pipefail - - xcodebuild clean -workspace HXPhotoPicker-Demo.xcworkspace -scheme "HXPhotoPicker" -sdk iphonesimulator build | xcpretty + - xcodebuild clean -workspace HXPhotoPickerExample.xcworkspace -scheme "HXPhotoPickerExample" -sdk iphonesimulator build | xcpretty after_success: - sleep 4 diff --git a/HXPHPicker/Bundle+HXPhotoPicker.swift b/HXPHPicker/Bundle+HXPhotoPicker.swift new file mode 100644 index 00000000..fca3e9af --- /dev/null +++ b/HXPHPicker/Bundle+HXPhotoPicker.swift @@ -0,0 +1,25 @@ +// +// Bundle+HXPhotoPicker.swift +// HXPHPickerExample +// +// Created by 洪欣 on 2020/11/15. +// Copyright © 2020 洪欣. All rights reserved. +// + +import UIKit + +extension Bundle { + + class func hx_localizedString(for key: String) -> String { + return hx_localizedString(for: key, value: nil) + } + + class func hx_localizedString(for key: String, value: String?) -> String { + let bundle = HXPHManager.shared.languageBundle + var newValue = bundle?.localizedString(forKey: key, value: value, table: nil) + if newValue == nil { + newValue = key + } + return newValue! + } +} diff --git a/HXPHPicker/HXAlbumView.swift b/HXPHPicker/HXAlbumView.swift new file mode 100644 index 00000000..0340a3c2 --- /dev/null +++ b/HXPHPicker/HXAlbumView.swift @@ -0,0 +1,71 @@ +// +// HXAlbumView.swift +// HXPHPickerExample +// +// Created by 洪欣 on 2020/11/17. +// Copyright © 2020 洪欣. All rights reserved. +// + +import UIKit + +protocol HXAlbumViewDelegate: NSObjectProtocol { + +} + +class HXAlbumView: UIView, UITableViewDataSource, UITableViewDelegate { + + weak var delegate: HXAlbumViewDelegate? + + lazy var tableView : UITableView = { + let tableView = UITableView.init(frame: CGRect.init(), style: UITableView.Style.plain) + tableView.backgroundColor = config!.backgroundColor + tableView.dataSource = self; + tableView.delegate = self; + tableView.separatorStyle = UITableViewCell.SeparatorStyle.none + tableView.register(HXAlbumViewCell.self, forCellReuseIdentifier: "cellId") + return tableView + }() + var config: HXPHAlbumListConfiguration? + var assetCollectionsArray: [HXPHAssetCollection] = [] + + init(config: HXPHAlbumListConfiguration) { + super.init(frame: CGRect.zero) + self.config = config + backgroundColor = config.backgroundColor + addSubview(tableView) + } + func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + return assetCollectionsArray.count + } + func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + let cell = tableView.dequeueReusableCell(withIdentifier: "cellId") as! HXAlbumViewCell + let assetCollection = assetCollectionsArray[indexPath.row] + cell.assetCollection = assetCollection + cell.config = config + return cell + } + func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { + return config!.cellHeight + } + func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { + tableView.deselectRow(at: indexPath, animated: true) + let assetCollection = assetCollectionsArray[indexPath.row] + + } + + func tableView(_ tableView: UITableView, didEndDisplaying cell: UITableViewCell, forRowAt indexPath: IndexPath) { + let myCell: HXAlbumViewCell = cell as! HXAlbumViewCell + myCell.cancelRequest() + } + + override func layoutSubviews() { + super.layoutSubviews() + tableView.frame = bounds + } + + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + +} diff --git a/HXPHPicker/HXAlbumViewCell.swift b/HXPHPicker/HXAlbumViewCell.swift new file mode 100644 index 00000000..a8a1ca66 --- /dev/null +++ b/HXPHPicker/HXAlbumViewCell.swift @@ -0,0 +1,103 @@ +// +// HXAlbumViewCell.swift +// 照片选择器-Swift +// +// Created by 洪欣 on 2019/6/28. +// Copyright © 2019年 洪欣. All rights reserved. +// + +import UIKit +import Photos + +class HXAlbumViewCell: UITableViewCell { + lazy var albumCoverView: UIImageView = { + let albumCoverView = UIImageView.init() + albumCoverView.contentMode = UIView.ContentMode.scaleAspectFill + albumCoverView.clipsToBounds = true + return albumCoverView + }() + lazy var albumNameLb: UILabel = { + let albumNameLb = UILabel.init() + return albumNameLb + }() + lazy var photoCountLb: UILabel = { + let photoCountLb = UILabel.init() + return photoCountLb + }() + lazy var bottomLineView: UIView = { + let bottomLineView = UIView.init() + bottomLineView.backgroundColor = UIColor.lightGray.withAlphaComponent(0.15) + return bottomLineView + }() + lazy var selectedBgView : UIView = { + let selectedBgView = UIView.init() + return selectedBgView + }() + var config : HXPHAlbumListConfiguration? { + didSet { + albumNameLb.textColor = config?.albumNameColor + albumNameLb.font = config?.albumNameFont + photoCountLb.textColor = config?.photoCountColor + photoCountLb.font = config?.photoCountFont + bottomLineView.backgroundColor = config?.separatorLineColor + backgroundColor = config?.cellBackgroudColor + if config?.cellSelectedColor != nil { + selectedBgView.backgroundColor = config?.cellSelectedColor + selectedBackgroundView = selectedBgView + } + } + } + var assetCollection: HXPHAssetCollection? { + didSet { + albumNameLb.text = assetCollection?.albumName + photoCountLb.text = String(assetCollection!.count) + requestID = assetCollection?.requestCoverImage(completion: { (image, assetCollection, info) in + if assetCollection == self.assetCollection && image != nil { + self.albumCoverView.image = image + if !HXPHAssetManager.assetDownloadIsDegraded(for: info) { + self.requestID = nil + } + } + }) + } + } + var requestID: PHImageRequestID? + + override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) { + super.init(style: style, reuseIdentifier: reuseIdentifier) + initView() + } + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + func initView() { + contentView.addSubview(albumCoverView) + contentView.addSubview(albumNameLb) + contentView.addSubview(photoCountLb) + contentView.addSubview(bottomLineView) + } + + override func layoutSubviews() { + super.layoutSubviews() + let coverMargin : CGFloat = 5 + let coverWidth = hx_height - (coverMargin * 2) + albumCoverView.frame = CGRect(x: coverMargin, y: coverMargin, width: coverWidth, height: coverWidth) + + albumNameLb.hx_x = albumCoverView.frame.maxX + 10 + albumNameLb.hx_size = CGSize(width: hx_width - albumNameLb.hx_x - 20, height: 16) + albumNameLb.hx_centerY = hx_height / CGFloat(2) - albumNameLb.hx_height / CGFloat(2) + + photoCountLb.hx_x = albumCoverView.frame.maxX + 10 + photoCountLb.hx_y = albumNameLb.frame.maxY + 5 + photoCountLb.hx_size = CGSize(width: hx_width - photoCountLb.hx_x - 20, height: 14) + + bottomLineView.frame = CGRect(x: coverMargin, y: hx_height - 0.5, width: hx_width - coverMargin * 2, height: 0.5) + } + + func cancelRequest() { + if requestID != nil { + PHImageManager.default().cancelImageRequest(requestID!) + requestID = nil + } + } +} diff --git a/HXPHPicker/HXAlbumViewController.swift b/HXPHPicker/HXAlbumViewController.swift new file mode 100644 index 00000000..45ee47eb --- /dev/null +++ b/HXPHPicker/HXAlbumViewController.swift @@ -0,0 +1,162 @@ +// +// HXAlbumViewController.swift +// 照片选择器-Swift +// +// Created by 洪欣 on 2019/6/28. +// Copyright © 2019年 洪欣. All rights reserved. +// + +import UIKit +import Photos + +class HXAlbumViewController: UIViewController, UITableViewDataSource, UITableViewDelegate { + + lazy var tableView : UITableView = { + let tableView = UITableView.init(frame: CGRect.init(), style: UITableView.Style.plain) + tableView.backgroundColor = config!.backgroundColor + tableView.dataSource = self; + tableView.delegate = self; + tableView.separatorStyle = UITableViewCell.SeparatorStyle.none + tableView.register(HXAlbumViewCell.self, forCellReuseIdentifier: "cellId") + if #available(iOS 11.0, *) { + tableView.contentInsetAdjustmentBehavior = UIScrollView.ContentInsetAdjustmentBehavior.never + } else { + // Fallback on earlier versions + self.automaticallyAdjustsScrollViewInsets = false + } + return tableView + }() + var config: HXPHAlbumListConfiguration? + var assetCollectionsArray: [HXPHAssetCollection] = [] + var orientationDidChange : Bool = false + var beforeOrientationIndexPath: IndexPath? + var canFetchAssetCollections: Bool = false + init() { + super.init(nibName: nil, bundle: nil) + } + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + override func viewDidLoad() { + super.viewDidLoad() + extendedLayoutIncludesOpaqueBars = true; + edgesForExtendedLayout = UIRectEdge.all; + config = hx_pickerController()!.config.albumList + view.backgroundColor = config!.backgroundColor + let backItem = UIBarButtonItem.init(title: "取消".hx_localized(), style: UIBarButtonItem.Style.done, target: self, action: #selector(didCancelItemClick)) + navigationItem.rightBarButtonItem = backItem + view.addSubview(tableView) + fetchCameraAssetCollection() + NotificationCenter.default.addObserver(self, selector: #selector(deviceOrientationChanged(notify:)), name: UIApplication.didChangeStatusBarOrientationNotification, object: nil) + } + @objc func deviceOrientationChanged(notify: Notification) { + beforeOrientationIndexPath = tableView.indexPathsForVisibleRows?.first + orientationDidChange = true + } + func fetchCameraAssetCollection() { + if hx_pickerController()?.cameraAssetCollection != nil { + self.pushPhotoPickerContoller(assetCollection: hx_pickerController()?.cameraAssetCollection, animated: false) + self.canFetchAssetCollections = true + title = "相册".hx_localized() + }else { + hx_pickerController()?.fetchCameraAssetCollectionCompletion = { (assetCollection) in + var cameraAssetCollection = assetCollection + if cameraAssetCollection == nil { + cameraAssetCollection = HXPHAssetCollection.init(albumName: self.config?.emptyAlbumName, coverImage: UIImage.hx_named(named: self.config!.emptyCoverImageName)) + } + self.pushPhotoPickerContoller(assetCollection: cameraAssetCollection, animated: false) + self.canFetchAssetCollections = true + self.title = "相册".hx_localized() + } + } + } + + func fetchAssetCollections() { + HXPHProgressHUD.showLoadingHUD(addedTo: view, animated: true) + hx_pickerController()?.fetchAssetCollections() + hx_pickerController()?.fetchAssetCollectionsCompletion = { (assetCollectionsArray) in + self.reloadTableView(assetCollectionsArray: assetCollectionsArray) + HXPHProgressHUD.hideHUD(forView: self.view, animated: true) + } + } + func reloadTableView(assetCollectionsArray: [HXPHAssetCollection]) { + self.assetCollectionsArray = assetCollectionsArray + if self.assetCollectionsArray.isEmpty { + let assetCollection = HXPHAssetCollection.init(albumName: self.config?.emptyAlbumName, coverImage: UIImage.hx_named(named: self.config!.emptyCoverImageName)) + self.assetCollectionsArray.append(assetCollection) + } + self.tableView.reloadData() + } + private func pushPhotoPickerContoller(assetCollection: HXPHAssetCollection?, animated: Bool) { + let photoVC = HXPHPickerViewController.init() + photoVC.assetCollection = assetCollection + photoVC.showLoading = animated + navigationController?.pushViewController(photoVC, animated: animated) + } + + @objc func didCancelItemClick() { + hx_pickerController()?.cancelCallback() + dismiss(animated: true, completion: nil) + } + + func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + return assetCollectionsArray.count + } + func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + let cell = tableView.dequeueReusableCell(withIdentifier: "cellId") as! HXAlbumViewCell + let assetCollection = assetCollectionsArray[indexPath.row] + cell.assetCollection = assetCollection + cell.config = config + return cell + } + func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { + return config!.cellHeight + } + func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { + tableView.deselectRow(at: indexPath, animated: true) + let assetCollection = assetCollectionsArray[indexPath.row] + pushPhotoPickerContoller(assetCollection: assetCollection, animated: true) + } + + func tableView(_ tableView: UITableView, didEndDisplaying cell: UITableViewCell, forRowAt indexPath: IndexPath) { + let myCell: HXAlbumViewCell = cell as! HXAlbumViewCell + myCell.cancelRequest() + } + + func changeSubviewFrame() { + let margin: CGFloat = UIDevice.hx_leftMargin() + tableView.frame = CGRect(x: margin, y: 0, width: view.hx_width - 2 * margin, height: view.hx_height) + if navigationController?.modalPresentationStyle == UIModalPresentationStyle.fullScreen { + tableView.contentInset = UIEdgeInsets.init(top: UIDevice.hx_navigationBarHeight(), left: 0, bottom: UIDevice.hx_bottomMargin(), right: 0) + }else { + tableView.contentInset = UIEdgeInsets.init(top: navigationController!.navigationBar.hx_height, left: 0, bottom: UIDevice.hx_bottomMargin(), right: 0) + } + if orientationDidChange { + if !assetCollectionsArray.isEmpty { + tableView.scrollToRow(at: beforeOrientationIndexPath ?? IndexPath.init(row: 0, section: 0), at: UITableView.ScrollPosition.top, animated: false) + } + orientationDidChange = false + } + } + override func viewDidLayoutSubviews() { + super.viewDidLayoutSubviews() + changeSubviewFrame() + } + override func viewWillAppear(_ animated: Bool) { + super.viewWillAppear(animated) + navigationController?.popoverPresentationController?.delegate = self as? UIPopoverPresentationControllerDelegate; + } + override func viewDidAppear(_ animated: Bool) { + super.viewDidAppear(animated) + if assetCollectionsArray.isEmpty && canFetchAssetCollections { + fetchAssetCollections() + } + } + override var preferredStatusBarStyle: UIStatusBarStyle { + return UIStatusBarStyle.default + } + deinit { + NotificationCenter.default.removeObserver(self) + print("\(self) deinit") + } +} diff --git a/HXPHPicker/HXPHAsset.swift b/HXPHPicker/HXPHAsset.swift new file mode 100644 index 00000000..3f54271f --- /dev/null +++ b/HXPHPicker/HXPHAsset.swift @@ -0,0 +1,164 @@ +// +// HXPHAsset.swift +// HXPhotoPickerSwift +// +// Created by 洪欣 on 2020/11/12. +// Copyright © 2020 洪欣. All rights reserved. +// + +import UIKit +import Photos + +typealias HXPHAssetICloudHandlerHandler = (HXPHAsset, PHImageRequestID) -> Void +typealias HXPHAssetProgressHandler = (HXPHAsset, Double) -> Void +typealias HXPHAssetFailureHandler = (HXPHAsset, [AnyHashable : Any]?) -> Void + +class HXPHAsset: NSObject { + + /// 系统相册里的资源 + var asset: PHAsset? { + didSet { + setMediaType() + } + } + + /// 当前资源的图片大小 + var imageSize: CGSize { + get { + let size : CGSize + if asset != nil { + if asset!.pixelWidth == 0 || asset!.pixelHeight == 0 { + size = CGSize(width: 200, height: 200) + }else { + size = CGSize(width: asset!.pixelWidth, height: asset!.pixelHeight) + } + }else { + size = CGSize(width: 200, height: 200) + } + return size + } + } + + /// 媒体类型 + var mediaType: HXPHAssetMediaType = HXPHAssetMediaType.photo + + /// 媒体子类型 + var mediaSubType: HXPHAssetMediaSubType = HXPHAssetMediaSubType.image + + /// 视频时长 格式:00:00 + var videoTime: String? + + /// 视频时长 秒 + var videoDuration: TimeInterval = 0 + + /// 当前资源是否被选中 + var selected: Bool = false + + /// 选中时的下标 + var selectIndex: Int = 0 + + init(asset: PHAsset) { + super.init() + self.asset = asset + setMediaType() + } + private func setMediaType() { + if asset?.mediaType.rawValue == 1 { + mediaType = HXPHAssetMediaType.photo + mediaSubType = HXPHAssetMediaSubType.image + }else if asset?.mediaType.rawValue == 2 { + mediaType = HXPHAssetMediaType.video + mediaSubType = HXPHAssetMediaSubType.video + videoDuration = asset!.duration + videoTime = HXPHTools.transformVideoDurationToString(duration: asset!.duration) + } + } + + /// 请求缩略图 + /// - Parameter completion: 完成回调 + /// - Returns: 请求ID + func requestThumbnailImage(completion: ((UIImage?, HXPHAsset, [AnyHashable : Any]?) -> Void)?) -> PHImageRequestID? { + if asset == nil { + return nil + } + return HXPHAssetManager.requestThumbnailImage(for: asset!, targetWidth: 165) { (image, info) in + if completion != nil { + completion!(image, self, info) + } + } + } + + /// 请求imageData,如果资源在iCloud上会自动下载。如果需要更细节的处理请使用 PHAssetManager + /// - Parameters: + /// - iCloudHandler: 下载iCloud上的资源时回调iCloud的请求ID + /// - progressHandler: iCloud下载进度 + /// - Returns: 请求ID + func requestImageData(iCloudHandler: HXPHAssetICloudHandlerHandler?, progressHandler: HXPHAssetProgressHandler?, success: ((HXPHAsset, Data, UIImage.Orientation, [AnyHashable : Any]?) -> Void)?, failure: HXPHAssetFailureHandler?) -> PHImageRequestID { + if asset == nil { + if failure != nil { + failure!(self, nil) + } + return 0 + } + var version = PHImageRequestOptionsVersion.current + if mediaSubType == HXPHAssetMediaSubType.imageAnimated { + version = PHImageRequestOptionsVersion.original + } + return HXPHAssetManager.requestImageData(for: asset!, version: version, iCloudHandler: { (iCloudRequestID) in + if iCloudHandler != nil { + iCloudHandler!(self, iCloudRequestID) + } + }, progressHandler: { (progress, error, stop, info) in + if progressHandler != nil { + progressHandler!(self, progress) + } + }, resultHandler: { (data, dataUTI, imageOrientation, info, downloadSuccess) in + if downloadSuccess { + if success != nil { + success!(self, data!, imageOrientation, info) + } + }else { + if failure != nil { + failure!(self, info) + } + } + }) + } + + /// 请求LivePhoto,如果资源在iCloud上会自动下载。如果需要更细节的处理请使用 PHAssetManager + /// - Parameters: + /// - targetSize: 请求的大小 + /// - iCloudHandler: 下载iCloud上的资源时回调iCloud的请求ID + /// - progressHandler: iCloud下载进度 + /// - Returns: 请求ID + @available(iOS 9.1, *) + func requestLivePhoto(targetSize: CGSize, iCloudHandler: HXPHAssetICloudHandlerHandler?, progressHandler: HXPHAssetProgressHandler?, success: ((HXPHAsset, PHLivePhoto, [AnyHashable : Any]?) -> Void)?, failure: HXPHAssetFailureHandler?) -> PHImageRequestID { + if asset == nil { + if failure != nil { + failure?(self, nil) + } + return 0 + } + + return HXPHAssetManager.requestLivePhoto(for: asset!, targetSize: targetSize) { (iCloudRequestID) in + if iCloudHandler != nil { + iCloudHandler!(self, iCloudRequestID) + } + } progressHandler: { (progress, error, stop, info) in + if progressHandler != nil { + progressHandler!(self, progress) + } + } resultHandler: { (livePhoto, info, downloadSuccess) in + if downloadSuccess { + if success != nil { + success!(self, livePhoto!, info) + } + }else { + if failure != nil { + failure!(self, info) + } + } + } + + } +} diff --git a/HXPHPicker/HXPHAssetCollection.swift b/HXPHPicker/HXPHAssetCollection.swift new file mode 100644 index 00000000..8c232803 --- /dev/null +++ b/HXPHPicker/HXPHAssetCollection.swift @@ -0,0 +1,77 @@ +// +// HXPHAssetCollection.swift +// 照片选择器-Swift +// +// Created by 洪欣 on 2019/7/3. +// Copyright © 2019年 洪欣. All rights reserved. +// + +import UIKit +import Photos + +class HXPHAssetCollection: NSObject { + var albumName : String? + var count : Int = 0 + var result : PHFetchResult? + var collection : PHAssetCollection? + var options : PHFetchOptions? + var coverAsset: PHAsset? + private var coverImage: UIImage? + + init(collection: PHAssetCollection? , options: PHFetchOptions?) { + super.init() + self.collection = collection + self.options = options + fetchResult() + } + + init(albumName: String?, coverImage: UIImage?) { + super.init() + self.albumName = albumName + self.coverImage = coverImage + } + + func fetchResult() { + if collection == nil { + return + } + albumName = HXPHTools.transformAlbumName(for: collection!) + result = PHAsset.fetchAssets(in: collection!, options: options) + count = result?.count ?? 0 + coverAsset = result?.firstObject + } + + func changeResult(for result: PHFetchResult) { + self.result = result + count = result.count + coverAsset = result.firstObject + } + + /// 请求获取相册封面图片 + /// - Parameter completion: 会回调多次 + /// - Returns: 请求ID + func requestCoverImage(completion: ((UIImage?, HXPHAssetCollection, [AnyHashable : Any]?) -> Void)?) -> PHImageRequestID? { + if coverAsset == nil { + if completion != nil { + completion!(coverImage, self, nil) + } + return nil + } + return HXPHAssetManager.requestThumbnailImage(for: coverAsset!, targetWidth: 160) { (image, info) in + if completion != nil { + completion!(image, self, info) + } + } + } + + /// 枚举相册里的资源 + func enumerateAssets(usingBlock :@escaping (HXPHAsset)->()) { + if result == nil { + fetchResult() + } + result?.enumerateObjects({ (asset, index, stop) in + let photoAsset = HXPHAsset.init(asset: asset) + usingBlock(photoAsset) + }) + } +} diff --git a/HXPHPicker/HXPHAssetManager.swift b/HXPHPicker/HXPHAssetManager.swift new file mode 100644 index 00000000..a805b937 --- /dev/null +++ b/HXPHPicker/HXPHAssetManager.swift @@ -0,0 +1,389 @@ +// +// HXPHAssetManager.swift +// 照片选择器-Swift +// +// Created by 洪欣 on 2020/11/9. +// Copyright © 2020 洪欣. All rights reserved. +// + +import UIKit +import Photos + +class HXPHAssetManager: NSObject { + + /// 获取当前相册权限状态 + /// - Returns: 权限状态 + class func authorizationStatus() -> PHAuthorizationStatus { + let status : PHAuthorizationStatus; + if #available(iOS 14, *) { + status = PHPhotoLibrary.authorizationStatus(for: PHAccessLevel.readWrite) + } else { + // Fallback on earlier versions + status = PHPhotoLibrary.authorizationStatus(); + } + return status; + } + + class func authorizationStatusIsLimited() -> Bool{ + if #available(iOS 14, *) { + if authorizationStatus() == PHAuthorizationStatus.limited { + return true + } + } + return false + } + + /// 请求获取相册权限 + /// - Parameters: + /// - handler: 请求权限完成 + class func requestAuthorization(with handler : @escaping (PHAuthorizationStatus) -> ()) { + let status = authorizationStatus() + if status == PHAuthorizationStatus.notDetermined { + if #available(iOS 14, *) { + PHPhotoLibrary.requestAuthorization(for: PHAccessLevel.readWrite) { (authorizationStatus) in + DispatchQueue.main.async { + handler(authorizationStatus) + } + } + } else { + PHPhotoLibrary.requestAuthorization { (authorizationStatus) in + DispatchQueue.main.async { + handler(authorizationStatus) + } + } + } + }else { + handler(status) + } + } + + /// 获取系统相册 + /// - Parameter options: 选型 + /// - Returns: 相册列表 + class func fetchSmartAlbums(options : PHFetchOptions?) -> PHFetchResult { + return PHAssetCollection.fetchAssetCollections(with: PHAssetCollectionType.smartAlbum, subtype: PHAssetCollectionSubtype.any, options: options) + } + + /// 获取用户创建的相册 + /// - Parameter options: 选项 + /// - Returns: 相册列表 + class func fetchUserAlbums(options : PHFetchOptions?) -> PHFetchResult { + return PHAssetCollection.fetchAssetCollections(with: PHAssetCollectionType.album, subtype: PHAssetCollectionSubtype.any, options: options) + } + + + /// 获取所有相册 + /// - Parameters: + /// - filterInvalid: 过滤无效的相册 + /// - options: 可选项 + /// - usingBlock: 枚举每一个相册集合 + class func enumerateAllAlbums(filterInvalid: Bool, options : PHFetchOptions?, usingBlock :@escaping (PHAssetCollection)->()) { + let smartAlbums = fetchSmartAlbums(options: nil) + let userAlbums = fetchUserAlbums(options: nil) + let albums = [smartAlbums, userAlbums] + for result in albums { + result.enumerateObjects { (collection, index, stop) in + if !collection.isKind(of: PHAssetCollection.self) { + return; + } + if filterInvalid { + if collection.estimatedAssetCount <= 0 || + collection.assetCollectionSubtype.rawValue == 205 || + collection.assetCollectionSubtype.rawValue == 215 || + collection.assetCollectionSubtype.rawValue == 212 || + collection.assetCollectionSubtype.rawValue == 204 || + collection.assetCollectionSubtype.rawValue == 1000000201 { + return; + } + } + usingBlock(collection) + } + } + } + + /// 获取相机胶卷资源集合 + /// - Parameter options: 可选项 + /// - Returns: 相机胶卷集合 + class func fetchCameraRollAlbum(options: PHFetchOptions?) -> PHAssetCollection? { + let smartAlbums = fetchSmartAlbums(options: options) + var assetCollection : PHAssetCollection? + smartAlbums.enumerateObjects { (collection, index, stop) in + if !collection.isKind(of: PHAssetCollection.self) || + collection.estimatedAssetCount <= 0 { + return + } + if collectionIsCameraRollAlbum(collection: collection) { + assetCollection = collection + stop.initialize(to: true) + } + } + return assetCollection + } + + /// 判断是否是相机胶卷 + /// - Parameter collection: 相机胶卷集合 + class func collectionIsCameraRollAlbum(collection: PHAssetCollection?) -> Bool { + var versionStr = UIDevice.current.systemVersion.replacingOccurrences(of: ".", with: "") + if versionStr.count <= 1 { + versionStr.append("00") + }else if versionStr.count <= 2 { + versionStr.append("0") + } + let version = Int(versionStr) ?? 0 + if version >= 800 && version <= 802 { + return collection?.assetCollectionSubtype == PHAssetCollectionSubtype.smartAlbumRecentlyAdded + }else { + return collection?.assetCollectionSubtype == PHAssetCollectionSubtype.smartAlbumUserLibrary + } + } + + /// 判断是否是动图 + /// - Parameter asset: 需要判断的资源 + /// - Returns: 是否 + class func assetIsAnimated(asset: PHAsset) -> Bool { + var isAnimated : Bool = false + let fileName = asset.value(forKey: "filename") as? String + if fileName != nil { + isAnimated = fileName!.hasSuffix("GIF") + } + if #available(iOS 11, *) { + if asset.playbackStyle == PHAsset.PlaybackStyle.imageAnimated { + isAnimated = true + } + } + return isAnimated + } + + /// 判断否是LivePhoto + /// - Parameter asset: 需要判断的资源 + /// - Returns: 是否 + class func assetIsLivePhoto(asset: PHAsset) -> Bool { + var isLivePhoto : Bool = false + if #available(iOS 9.1, *) { + isLivePhoto = asset.mediaSubtypes == PHAssetMediaSubtype.photoLive + if #available(iOS 11, *) { + if asset.playbackStyle == PHAsset.PlaybackStyle.livePhoto { + isLivePhoto = true + } + } + } + return isLivePhoto + } + + private class func transformTargetWidthToSize(targetWidth: CGFloat, asset: PHAsset) -> CGSize { + let scale:CGFloat = 0.8 + let aspectRatio = CGFloat(asset.pixelWidth) / CGFloat(asset.pixelHeight) + var width = targetWidth + if asset.pixelWidth < Int(targetWidth) { + width *= 0.5 + } + var height = width / aspectRatio + let maxHeight = UIScreen.main.bounds.size.height + if height > maxHeight { + width = maxHeight / height * width * scale + height = maxHeight * scale + } + if height < targetWidth && width >= targetWidth { + width = targetWidth / height * width * scale + height = targetWidth * scale + } + return CGSize.init(width: width, height: height) + } + + /// 请求image + /// - Parameters: + /// - asset: 资源对象 + /// - targetSize: 指定大小 + /// - options: 可选项 + /// - resultHandler: 回调 + /// - Returns: 请求ID + class func requestImage(for asset: PHAsset, targetSize: CGSize, options: PHImageRequestOptions, resultHandler: @escaping (UIImage?, [AnyHashable : Any]?) -> Void) -> PHImageRequestID { + return PHImageManager.default().requestImage(for: asset, targetSize: targetSize, contentMode: PHImageContentMode.aspectFill, options: options, resultHandler: resultHandler) + } + + /// 请求获取缩略图 + /// - Parameters: + /// - asset: 资源对象 + /// - targetWidth: 获取的图片大小 + /// - completion: 完成 + /// - Returns: 请求ID + class func requestThumbnailImage(for asset: PHAsset, targetWidth: CGFloat, completion: ((UIImage?, [AnyHashable : Any]?) -> ())?) -> PHImageRequestID { + let options = PHImageRequestOptions.init() + options.resizeMode = PHImageRequestOptionsResizeMode.fast + return requestImage(for: asset, targetSize: transformTargetWidthToSize(targetWidth: targetWidth, asset: asset), options: options) { (image, info) in + if completion != nil { + completion!(image, info) + } + } + } + + class func requestImageData(for asset: PHAsset, options: PHImageRequestOptions, resultHandler: @escaping (Data?, String?, UIImage.Orientation, [AnyHashable : Any]?) -> Void) -> PHImageRequestID { + if #available(iOS 13, *) { + return PHImageManager.default().requestImageDataAndOrientation(for: asset, options: options) { (imageData, dataUTI, imageOrientation, info) in + var sureOrientation : UIImage.Orientation; + if (imageOrientation == CGImagePropertyOrientation.up) { + sureOrientation = UIImage.Orientation.up; + } else if (imageOrientation == CGImagePropertyOrientation.upMirrored) { + sureOrientation = UIImage.Orientation.upMirrored; + } else if (imageOrientation == CGImagePropertyOrientation.down) { + sureOrientation = UIImage.Orientation.down; + } else if (imageOrientation == CGImagePropertyOrientation.downMirrored) { + sureOrientation = UIImage.Orientation.downMirrored; + } else if (imageOrientation == CGImagePropertyOrientation.left) { + sureOrientation = UIImage.Orientation.left; + } else if (imageOrientation == CGImagePropertyOrientation.leftMirrored) { + sureOrientation = UIImage.Orientation.leftMirrored; + } else if (imageOrientation == CGImagePropertyOrientation.right) { + sureOrientation = UIImage.Orientation.right; + } else if (imageOrientation == CGImagePropertyOrientation.rightMirrored) { + sureOrientation = UIImage.Orientation.rightMirrored; + } else { + sureOrientation = UIImage.Orientation.up; + } + resultHandler(imageData, dataUTI, sureOrientation, info) + } + } else { + // Fallback on earlier versions + return PHImageManager.default().requestImageData(for: asset, options: options, resultHandler: resultHandler) + } + } + + class func requestImageData(for asset: PHAsset, version: PHImageRequestOptionsVersion, isNetworkAccessAllowed: Bool, progressHandler: @escaping PHAssetImageProgressHandler, resultHandler: @escaping (Data?, String?, UIImage.Orientation, [AnyHashable : Any]?) -> Void) -> PHImageRequestID { + let options = PHImageRequestOptions.init() + options.version = version + options.resizeMode = PHImageRequestOptionsResizeMode.fast + options.isNetworkAccessAllowed = isNetworkAccessAllowed + options.progressHandler = progressHandler + return requestImageData(for: asset, options: options, resultHandler: resultHandler) + } + + /// 请求imageData,如果资源在iCloud上会自动请求下载iCloud上的资源 + /// - Parameters: + /// - asset: 资源 + /// - version: 请求的版本 + /// - iCloudHandler: 如果资源在iCloud上,下载之前回先回调出请求ID + /// - progressHandler: 处理进度 + /// - resultHandler: 处理结果 + /// - Returns: 请求ID + class func requestImageData(for asset: PHAsset, version: PHImageRequestOptionsVersion, iCloudHandler: @escaping (PHImageRequestID) -> Void, progressHandler: @escaping PHAssetImageProgressHandler, resultHandler: @escaping (Data?, String?, UIImage.Orientation, [AnyHashable : Any]?, Bool) -> Void) -> PHImageRequestID { + return requestImageData(for: asset, version: version, isNetworkAccessAllowed: false, progressHandler: progressHandler) { (data, dataUTI, imageOrientation, info) in + if self.assetDownloadFinined(for: info) { + resultHandler(data, dataUTI, imageOrientation, info, true) + }else { + if self.assetIsInCloud(for: info) { + let iCloudRequestID = self.requestImageData(for: asset, version: version, isNetworkAccessAllowed: true, progressHandler: progressHandler, resultHandler: { (data, dataUTI, imageOrientation, info) in + resultHandler(data, dataUTI, imageOrientation, info, self.assetDownloadFinined(for: info)) + }) + iCloudHandler(iCloudRequestID) + }else { + resultHandler(data, dataUTI, imageOrientation, info, false) + } + } + } + } + + @available(iOS 9.1, *) + class func requestLivePhoto(for asset: PHAsset, targetSize: CGSize, options: PHLivePhotoRequestOptions, resultHandler: @escaping (PHLivePhoto?, [AnyHashable : Any]?) -> Void) -> PHImageRequestID { + return PHImageManager.default().requestLivePhoto(for: asset, targetSize: targetSize, contentMode: PHImageContentMode.aspectFill, options: options, resultHandler: resultHandler) + } + @available(iOS 9.1, *) + class func requestLivePhoto(for asset: PHAsset, targetSize: CGSize, isNetworkAccessAllowed: Bool, progressHandler: @escaping PHAssetImageProgressHandler, resultHandler: @escaping (PHLivePhoto?, [AnyHashable : Any]?) -> Void) -> PHImageRequestID { + let options = PHLivePhotoRequestOptions.init() + options.isNetworkAccessAllowed = isNetworkAccessAllowed + options.progressHandler = progressHandler + return requestLivePhoto(for: asset, targetSize: targetSize, options: options, resultHandler: resultHandler) + } + + /// 请求LivePhoto,如果资源在iCloud上会自动请求下载iCloud上的资源 + /// - Parameters: + /// - asset: 资源 + /// - targetSize: 请求的目标大小 + /// - iCloudHandler: 如果资源在iCloud上,下载之前回先回调出请求ID + /// - progressHandler: 处理进度 + /// - resultHandler: 处理结果 + /// - Returns: 请求ID + @available(iOS 9.1, *) + class func requestLivePhoto(for asset: PHAsset, targetSize: CGSize, iCloudHandler: @escaping (PHImageRequestID) -> Void, progressHandler: @escaping PHAssetImageProgressHandler, resultHandler: @escaping (PHLivePhoto?, [AnyHashable : Any]?, Bool) -> Void) -> PHImageRequestID { + return requestLivePhoto(for: asset, targetSize: targetSize, isNetworkAccessAllowed: false, progressHandler: progressHandler) { (livePhoto, info) in + if self.assetDownloadFinined(for: info) { + resultHandler(livePhoto, info, true) + }else { + if self.assetIsInCloud(for: info) { + let iCloudRequestID = self.requestLivePhoto(for: asset, targetSize: targetSize, isNetworkAccessAllowed: true, progressHandler: progressHandler) { (livePhoto, info) in + if self.assetDownloadFinined(for: info) { + resultHandler(livePhoto, info, true) + }else { + resultHandler(livePhoto, info, false) + } + } + iCloudHandler(iCloudRequestID) + }else { + resultHandler(livePhoto, info, false) + } + } + } + } + + + /// 根据下载获取的信息判断资源是否存在iCloud上 + /// - Parameter info: 下载获取的信息 + class func assetIsInCloud(for info: [AnyHashable : Any]?) -> Bool { + if info == nil { + return false + } + if info![AnyHashable(PHImageResultIsInCloudKey)] == nil { + return false + } + let isInCloud = info![AnyHashable(PHImageResultIsInCloudKey)] as! Int + return (isInCloud == 1) + } + + /// 判断资源是否取消了下载 + /// - Parameter info: 下载获取的信息 + class func assetDownloadCancel(for info: [AnyHashable : Any]?) -> Bool { + if info == nil { + return false + } + if info![AnyHashable(PHImageCancelledKey)] == nil { + return false + } + let isCancel = info![AnyHashable(PHImageCancelledKey)] as! Int + return (isCancel == 1) + } + + /// 判断资源是否下载错误 + /// - Parameter info: 下载获取的信息 + class func assetDownloadError(for info: [AnyHashable : Any]?) -> Bool { + if info == nil { + return false + } + if info![AnyHashable(PHImageErrorKey)] == nil { + return false + } + let error = info![AnyHashable(PHImageErrorKey)] + return (error != nil) + } + + /// 判断资源下载得到的是否为退化的 + /// - Parameter info: 下载获取的信息 + class func assetDownloadIsDegraded(for info: [AnyHashable : Any]?) -> Bool { + if info == nil { + return false + } + let isDegraded = info![AnyHashable(PHImageResultIsDegradedKey)] as! Int + return (isDegraded == 1) + } + + /// 判断资源是否下载完成 + /// - Parameter info: 下载获取的信息 + class func assetDownloadFinined(for info: [AnyHashable : Any]?) -> Bool { + if info == nil { + return false + } + let isCancel = assetDownloadCancel(for: info) + let isDegraded = assetDownloadIsDegraded(for: info) + let error = assetDownloadError(for: info) + + return (!isCancel && !error && !isDegraded) + } +} diff --git a/HXPHPicker/HXPHConfiguration.swift b/HXPHPicker/HXPHConfiguration.swift new file mode 100644 index 00000000..a32bdb37 --- /dev/null +++ b/HXPHPicker/HXPHConfiguration.swift @@ -0,0 +1,353 @@ +// +// HXPHConfiguration.swift +// 照片选择器-Swift +// +// Created by 洪欣 on 2020/11/9. +// Copyright © 2020 洪欣. All rights reserved. +// + +import UIKit + +class HXPHConfiguration: NSObject { + + /// 选择的类型 + var selectType : HXPHSelectType = HXPHSelectType.any + + /// 最多可以选择的照片数,如果为0则不限制 + var maximumSelectPhotoCount : Int = 0 + + /// 最多可以选择的视频数,如果为0则不限制 + var maximumSelectVideoCount : Int = 0 + + /// 最多可以选择的资源数,如果为0则不限制 + var maximumSelectCount: Int = 9 + + /// 视频最大选择时长,为0则不限制 + var videoMaximumSelectDuration: Int = 0 + + /// 视频最小选择时长,为0则不限制 + var videoMinimumSelectDuration: Int = 0 + + /// 照片和视频可以一起选择 + var photosAndVideosCanBeSelectedTogether: Bool = true + + /// 语言类型 + var languageType : HXPHLanguageType = HXPHLanguageType.system + + /// 相册展示类型 + var albumShowMode : HXAlbumShowMode = HXAlbumShowMode.normal + + /// 选择模式 + var selectMode : HXPHAssetSelectMode = HXPHAssetSelectMode.multiple + + /// 获取资源列表时是否按创建时间排序 + var creationDate : Bool = true + + /// 获取资源列表后是否按倒序展示 + var reverseOrder : Bool = false + + /// 展示动图 + var showAnimatedAsset : Bool = true + + /// 展示LivePhoto + var showLivePhotoAsset : Bool = true + + /// 状态栏样式 + var statusBarStyle : UIStatusBarStyle = UIStatusBarStyle.default + + /// 半透明效果 + var navigationBarIsTranslucent: Bool = true + + /// 相册列表配置 + lazy var albumList : HXPHAlbumListConfiguration = { + return HXPHAlbumListConfiguration.init() + }() + + /// 照片列表配置 + lazy var photoList: HXPHPhotoListConfiguration = { + return HXPHPhotoListConfiguration.init() + }() + + /// 预览界面配置 + lazy var previewView: HXPHPreviewViewConfiguration = { + return HXPHPreviewViewConfiguration.init() + }() + + /// 未授权提示界面相关配置 + lazy var notAuthorized : HXPHNotAuthorizedConfiguration = { + return HXPHNotAuthorizedConfiguration.init() + }() +} +// MARK: 相册列表配置类 +class HXPHAlbumListConfiguration: NSObject { + + /// 当相册里没有资源时的相册名称 + lazy var emptyAlbumName: String = { + return "所有照片" + }() + + /// 当相册里没有资源时的封面图片名 + lazy var emptyCoverImageName: String = { + return "" + }() + + /// 列表背景颜色 + lazy var backgroundColor : UIColor = { + return UIColor.white + }() + + /// cell高度 + var cellHeight : CGFloat = 100 + + /// cell背景颜色 + lazy var cellBackgroudColor: UIColor = { + return UIColor.white + }() + + /// cell选中时的颜色 + var cellSelectedColor : UIColor? + + /// 相册名称颜色 + lazy var albumNameColor : UIColor = { + return UIColor.black + }() + + /// 相册名称字体 + lazy var albumNameFont : UIFont = { + return UIFont.hx_mediumPingFang(size: 15) + }() + + /// 照片数量颜色 + lazy var photoCountColor : UIColor = { + return UIColor.init(hx_hexString: "#999999") + }() + + /// 照片数量字体 + lazy var photoCountFont : UIFont = { + return UIFont.hx_mediumPingFang(size: 12) + }() + + /// 分隔线颜色 + lazy var separatorLineColor: UIColor = { + return UIColor(hx_hexString: "#eeeeee") + }() +} +// MARK: 照片列表配置类 +class HXPHPhotoListConfiguration: NSObject { + + /// 背景颜色 + lazy var backgroundColor : UIColor = { + return UIColor.white + }() + + /// 每行显示数量 + var rowNumber : Int = 4 + + /// 横屏时每行显示数量 + var landscapeRowNumber : Int = 7 + + /// 每个照片之间的间隙 + var spacing : CGFloat = 1 + + /// cell相关配置 + lazy var cell: HXPHPhotoListCellConfiguration = { + return HXPHPhotoListCellConfiguration.init() + }() + + /// 底部视图相关配置 + lazy var bottomView: HXPHPickerBottomViewConfiguration = { + return HXPHPickerBottomViewConfiguration.init() + }() +} +// MARK: 照片列表Cell配置类 +class HXPHPhotoListCellConfiguration: NSObject { + + /// 背景颜色 + var backgroundColor: UIColor? + + /// 选择框顶部的间距 + var selectBoxTopMargin: CGFloat = 5 + + /// 选择框右边的间距 + var selectBoxRightMargin: CGFloat = 5 + + /// 选择框相关配置 + lazy var selectBox: HXPHSelectBoxConfiguration = { + return HXPHSelectBoxConfiguration.init() + }() +} +// MARK: 预览界面配置类 +class HXPHPreviewViewConfiguration: NSObject { + + /// 背景颜色 + lazy var backgroundColor : UIColor = { + return UIColor.white + }() + + /// 选择框配置 + lazy var selectBox: HXPHSelectBoxConfiguration = { + let config = HXPHSelectBoxConfiguration.init() + return config + }() + + /// 底部视图相关配置 + lazy var bottomView: HXPHPickerBottomViewConfiguration = { + let config = HXPHPickerBottomViewConfiguration.init() + config.previewButtonHidden = true + return config + }() +} +// MARK: 底部工具栏配置类 +class HXPHPickerBottomViewConfiguration: NSObject { + + /// UIToolbar + var backgroundColor: UIColor? + + /// UIToolbar + var barTintColor: UIColor? + + /// 半透明效果 + var isTranslucent: Bool = true + + /// barStyle + var barStyle: UIBarStyle = UIBarStyle.default + + /// 隐藏预览按钮 + var previewButtonHidden: Bool = false + + /// 预览按钮标题颜色 + lazy var previewButtonTitleColor: UIColor = { + return UIColor.init(red: 0, green: 0.47843137254901963, blue: 1, alpha: 1) + }() + + /// 预览按钮禁用下的标题颜色 + var previewButtonDisableTitleColor: UIColor? + + /// 隐藏原图按钮 + var originalButtonHidden : Bool = false + + /// 原图按钮标题颜色 + lazy var originalButtonTitleColor: UIColor = { + return UIColor.init(red: 0, green: 0.47843137254901963, blue: 1, alpha: 1) + }() + + /// 原图按钮选择框相关配置 + lazy var originalSelectBox: HXPHSelectBoxConfiguration = { + let config = HXPHSelectBoxConfiguration.init() + config.type = HXPHPickerCellSelectBoxType.tick + // 原图按钮选中时的背景颜色 + config.selectedBackgroudColor = UIColor.init(red: 0, green: 0.47843137254901963, blue: 1, alpha: 1) + // 原图按钮未选中时的边框宽度 + config.borderWidth = 1 + // 原图按钮未选中时的边框颜色 + config.borderColor = config.selectedBackgroudColor + // 原图按钮未选中时框框中间的颜色 + config.backgroudColor = UIColor.white.withAlphaComponent(0.3) + // 原图按钮选中时的勾勾颜色 + config.tickColor = UIColor.white + // 原图按钮选中时的勾勾宽度 + config.tickWidth = 1 + return config + }() + + /// 完成按钮标题颜色 + lazy var finishButtonTitleColor: UIColor = { + return UIColor.white + }() + + /// 完成按钮禁用下的标题颜色 + lazy var finishButtonDisableTitleColor: UIColor = { + return UIColor.white.withAlphaComponent(0.6) + }() + + /// 完成按钮选中时的背景颜色 + lazy var finishButtonBackgroudColor: UIColor = { + return UIColor.init(red: 0, green: 0.47843137254901963, blue: 1, alpha: 1) + }() + + /// 完成按钮禁用时的背景颜色 + lazy var finishButtonDisableBackgroudColor: UIColor = { + return UIColor.init(red: 0, green: 0.47843137254901963, blue: 1, alpha: 1).withAlphaComponent(0.4) + }() + + /// 未选择资源时是否禁用完成按钮 + var disableFinishButtonWhenNotSelected: Bool = false +} +// MARK: 选择框配置类 +class HXPHSelectBoxConfiguration: NSObject { + + /// 选择框的大小 + var size: CGSize = CGSize(width: 25, height: 25) + + /// 选择框的类型 + var type: HXPHPickerCellSelectBoxType = HXPHPickerCellSelectBoxType.number + + /// 标题的文字大小 + var titleFontSize: CGFloat = 16 + + /// 选中之后的 标题 颜色 + lazy var titleColor: UIColor = { + return UIColor.white + }() + + /// 选中状态下勾勾的宽度 + var tickWidth: CGFloat = 2 + + /// 选中之后的 勾勾 颜色 + lazy var tickColor: UIColor = { + return UIColor.white + }() + + /// 未选中时框框中间的颜色 + lazy var backgroudColor: UIColor = { + return UIColor.black.withAlphaComponent(0.4) + }() + + /// 选中之后的背景颜色 + lazy var selectedBackgroudColor: UIColor = { + return UIColor.init(red: 0, green: 0.47843137254901963, blue: 1, alpha: 1) + }() + + /// 未选中时的边框宽度 + var borderWidth: CGFloat = 1.5 + + /// 未选中时的边框颜色 + lazy var borderColor: UIColor = { + return UIColor.white + }() + +} + +// MARK: 未授权界面配置类 +class HXPHNotAuthorizedConfiguration: NSObject { + + /// 背景颜色 + lazy var backgroudColor: UIColor = { + return UIColor.white + }() + + /// 关闭按钮图片名 + lazy var closeButtonImageName: String = { + return "" + }() + + /// 标题颜色 + lazy var titleColor: UIColor = { + return UIColor.black + }() + + /// 子标题颜色 + lazy var subTitleColor: UIColor = { + return UIColor(hx_hexString: "#444444") + }() + + /// 跳转按钮背景颜色 + lazy var jumpButtonBackgroudColor: UIColor = { + return UIColor(hx_hexString: "666666") + }() + + /// 跳转按钮文字颜色 + lazy var jumpButtonTitleColor: UIColor = { + return UIColor(hx_hexString: "ffffff") + }() +} diff --git a/HXPHPicker/HXPHManager.swift b/HXPHPicker/HXPHManager.swift new file mode 100644 index 00000000..e8a3bd2d --- /dev/null +++ b/HXPHPicker/HXPHManager.swift @@ -0,0 +1,159 @@ +// +// HXPHManager.swift +// 照片选择器-Swift +// +// Created by 洪欣 on 2019/6/29. +// Copyright © 2019年 洪欣. All rights reserved. +// + +import UIKit +import Photos +import PhotosUI + +class HXPHManager: NSObject { + + static let shared = HXPHManager() + + var bundle: Bundle? + var languageBundle: Bundle? + var languageType: HXPHLanguageType? + + private lazy var cameraAlbumLocalIdentifier : String? = { + var identifier = UserDefaults.standard.string(forKey: "hxcameraAlbumLocalIdentifier") + return identifier + }() + + private lazy var cameraAlbumLocalIdentifierType : HXPHSelectType? = { + var identifierType = UserDefaults.standard.integer(forKey: "hxcameraAlbumLocalIdentifierType") + return HXPHSelectType(rawValue: identifierType) + }() + + /// 获取所有资源集合 + /// - Parameters: + /// - showEmptyCollection: 显示空集合 + /// - usingBlock: 枚举每一个集合 + func fetchAssetCollections(for options: PHFetchOptions, showEmptyCollection: Bool, usingBlock :@escaping ([HXPHAssetCollection])->()) { + DispatchQueue.global().async { + var assetCollectionsArray = [HXPHAssetCollection]() + HXPHAssetManager.enumerateAllAlbums(filterInvalid: true, options: nil) { (collection) in + let assetCollection = HXPHAssetCollection.init(collection: collection, options: options) + if showEmptyCollection == false && assetCollection.count == 0 { + return + } + if HXPHAssetManager.collectionIsCameraRollAlbum(collection: collection) { + assetCollectionsArray.insert(assetCollection, at: 0); + }else { + assetCollectionsArray.append(assetCollection) + } + } + DispatchQueue.main.async { + usingBlock(assetCollectionsArray); + } + } + } + + /// 获取相机胶卷资源集合 + func fetchCameraAssetCollection(for type: HXPHSelectType, options: PHFetchOptions, completion :@escaping (HXPHAssetCollection)->()) { + DispatchQueue.global().async { + var useLocalIdentifier = false + if self.cameraAlbumLocalIdentifier != nil { + if self.cameraAlbumLocalIdentifierType == HXPHSelectType.any || + type == self.cameraAlbumLocalIdentifierType { + useLocalIdentifier = true + } + } + let collection : PHAssetCollection? + if useLocalIdentifier == true { + let identifiers : [String] = [self.cameraAlbumLocalIdentifier!] + collection = PHAssetCollection.fetchAssetCollections(withLocalIdentifiers: identifiers, options: nil).firstObject + }else { + collection = HXPHAssetManager.fetchCameraRollAlbum(options: nil) + UserDefaults.standard.set(collection?.localIdentifier, forKey: "hxcameraAlbumLocalIdentifier") + UserDefaults.standard.set(type.rawValue, forKey: "hxcameraAlbumLocalIdentifierType") + } + let assetCollection = HXPHAssetCollection.init(collection: collection, options: options) + DispatchQueue.main.async { + completion(assetCollection) + } + } + } + + + private override init() { + super.init() + _ = createBundle() + } + func createBundle() -> Bundle? { + if self.bundle == nil { + let bundle = Bundle.init(for: HXPHPicker.self) + var path = bundle.path(forResource: "HXPHPicker", ofType: "bundle") + if path == nil { + var associateBundleURL = Bundle.main.url(forResource: "Frameworks", withExtension: nil) + if associateBundleURL != nil { + associateBundleURL = associateBundleURL?.appendingPathComponent("HXPHPicker") + associateBundleURL = associateBundleURL?.appendingPathExtension("framework") + let associateBunle = Bundle.init(url: associateBundleURL!) + path = associateBunle?.path(forResource: "HXPHPicker", ofType: "bundle") + } + } + self.bundle = (path != nil) ? Bundle.init(path: path!) : Bundle.main + } + return self.bundle + } + func createLanguageBundle(languageType: HXPHLanguageType) -> Bundle? { + if bundle == nil { + _ = createBundle() + } + if self.languageType != languageType { + languageBundle = nil + } + if languageBundle == nil { + var language = Locale.preferredLanguages.first + switch languageType { + case HXPHLanguageType.simplifiedChinese: + language = "zh-Hans" + break + case HXPHLanguageType.traditionalChinese: + language = "zh-Hant" + break + case HXPHLanguageType.japanese: + language = "ja" + break + case HXPHLanguageType.korean: + language = "ko" + break + case HXPHLanguageType.english: + language = "en" + break + default: + if language != nil { + if language!.hasPrefix("zh") { + if language!.range(of: "Hans") != nil { + language = "zh-Hans" + }else { + language = "zh-Hant" + } + }else if language!.hasPrefix("ja") { + language = "ja" + }else if language!.hasPrefix("ko") { + language = "ko" + }else { + language = "en" + } + }else { + language = "en" + } + } + let path = bundle?.path(forResource: language, ofType: "lproj") + if path != nil { + languageBundle = Bundle.init(path: path!) + } + self.languageType = languageType + } + return languageBundle + } + override class func copy() -> Any { return self } + override class func mutableCopy() -> Any { return self } +} + +class HXPHPicker: NSObject { } diff --git a/HXPHPicker/HXPHPicker.bundle/en.lproj/Localizable.strings b/HXPHPicker/HXPHPicker.bundle/en.lproj/Localizable.strings new file mode 100644 index 0000000000000000000000000000000000000000..8afb1aedaf9518180df4b953f2ae298386233b30 GIT binary patch literal 1456 zcmZuxxlY4C5FOEh%s*IZsDjcXBuu!9BywVeC=gK&$BE<|wy2d`0)gbRjs~@2AM7O*|>eQiVFS zMnmi>RKxOVfMrvUn$*R4SL|BwVvmrjG@>>lH)sXFUO8Wy_>9RJvVr?(O}|f{#`)4s z`RDTE>Sf%ywx%bDc8bqq_OUYTy_!iEZX+wRRb39^{Zd9{HKIP2kGLUnULbb|OjK4n zUu){YYXEN_>}z8$T3#<|q-@UuG^oo1Joe1Z6+&k&vz@qknJ8?kAB+nUx>+Ivdgc`U$8LwJx z#UA%mM{F zxlmCOYnpO%d(stMhY~QjCp?iV!s5A!gX+W6>_Clp{-hdC)2`z`IiGblMx1hvIthQn|SLk3~c>XHj!uO5D_-|nz Ef8Zw&KL7v# literal 0 HcmV?d00001 diff --git a/HXPHPicker/HXPHPicker.bundle/ja.lproj/Localizable.strings b/HXPHPicker/HXPHPicker.bundle/ja.lproj/Localizable.strings new file mode 100644 index 00000000..1d039b9e --- /dev/null +++ b/HXPHPicker/HXPHPicker.bundle/ja.lproj/Localizable.strings @@ -0,0 +1,20 @@ +"无法访问相册中照片" = "アルバムの写真にアクセスできませんでした。"; +"当前无照片访问权限,建议前往系统设置,\n允许访问「照片」中的「所有照片」。" = "現在は写真のアクセス権限がありません。,システム設定に行くことをおすすめします。,\n写真のすべての写真にアクセスすることを許可します。"; +"前往系统设置" = "システム設定へ"; +"取消" = "キャンセル"; +"相册" = "アルバム"; + +"HXAlbumCameraRoll" = "カメラロール"; +"HXAlbumPanoramas" = "パノラマ"; +"HXAlbumVideos" = "ビデオ"; +"HXAlbumFavorites" = "お気に入り"; +"HXAlbumTimelapses" = "タイムラプス"; +"HXAlbumRecents" = "最近のプロジェクト"; +"HXAlbumRecentlyAdded" = "最後に追加した項目"; +"HXAlbumBursts" = "バースト"; +"HXAlbumSlomoVideos" = "スローモーション"; +"HXAlbumSelfPortraits" = "セルフイー"; +"HXAlbumScreenshots" = "スクリーンショット"; +"HXAlbumDepthEffect" = "ポートレート"; +"HXAlbumLivePhotos" = "実況写真"; +"HXAlbumAnimated" = "アニメーション"; diff --git a/HXPHPicker/HXPHPicker.bundle/ko.lproj/Localizable.strings b/HXPHPicker/HXPHPicker.bundle/ko.lproj/Localizable.strings new file mode 100644 index 00000000..4c0a8b4b --- /dev/null +++ b/HXPHPicker/HXPHPicker.bundle/ko.lproj/Localizable.strings @@ -0,0 +1,22 @@ +"无法访问相册中照片" = "앨범 사진 에 접근 할 수 없습니다."; +"当前无照片访问权限,建议前往系统设置,\n允许访问「照片」中的「所有照片」。" = "현재 사진 접근 권한 이 없습니다.시스템 설정 으로 가기 권장,\n사진 속 의 모든 사진 에 접근 할 수 있 도록 합 니 다."; +"前往系统设置" = "설치"; +"取消" = "취소 하 다"; +"相册" = "앨범"; + + +"HXAlbumCameraRoll" = "모든 사진"; +"HXAlbumPanoramas" = "파노라마 사진"; +"HXAlbumVideos" = "동영상"; +"HXAlbumFavorites" = "개인 소장"; +"HXAlbumTimelapses" = "시간 지연 촬영"; +"HXAlbumRecents" = "최근 프로젝트"; +"HXAlbumRecentlyAdded" = "최근에 추가"; +"HXAlbumBursts" = "스냅을 연속으로 찍다"; +"HXAlbumSlomoVideos" = "느린 동작"; +"HXAlbumSelfPortraits" = "셀 카"; +"HXAlbumScreenshots" = "화면 스냅"; +"HXAlbumDepthEffect" = "콜 롬"; +"HXAlbumLivePhotos" = "실황 사진"; +"HXAlbumAnimated" = "발생시키다 투"; + diff --git a/HXPHPicker/HXPHPicker.bundle/zh-Hans.lproj/Localizable.strings b/HXPHPicker/HXPHPicker.bundle/zh-Hans.lproj/Localizable.strings new file mode 100644 index 0000000000000000000000000000000000000000..cd653fed66b567d668986f02449a8a1bc27dcbc5 GIT binary patch literal 1134 zcmb`FyGz4R6vhv3O8pxrmkJ(-Dy|%2NiamXEnVJgJJ6 zrjXrsl=8F&&Z{&i-^fFHV_!@zK#A37BEt$eKif{U^@&U=DP~nfr*VqV^eU3^aJ*4% z*?&_eZJ^f~r`C+8J1oOz;X)N>7{g@BQ1q)lAJ?_Fq)`$xQB-K5Qj5gB)lxMzKHrUH z{mGKzba>5~C+oAf=GWc2){Rbs(49W5QVu!%())? + + /// 相机胶卷资源集合 + private(set) var cameraAssetCollection : HXPHAssetCollection? + var fetchCameraAssetCollectionCompletion : ((HXPHAssetCollection?)->())? + + // MARK: 私有 + private var selectType : HXPHSelectType? + private var canAddedAsset: Bool = true + private var selectedPhotoAssetArray: [HXPHAsset] = [] + private var selectedVideoAssetArray: [HXPHAsset] = [] + private lazy var options : PHFetchOptions = { + let options = PHFetchOptions.init() + return options + }() + private lazy var deniedView: HXPHDeniedAuthorizationView = { + let deniedView = HXPHDeniedAuthorizationView.init(config: config.notAuthorized) + deniedView.frame = view.bounds + return deniedView + }() + + init(config : HXPHConfiguration) { + _ = HXPHManager.shared.createLanguageBundle(languageType: config.languageType) + var photoVC : UIViewController? = nil + if config.albumShowMode == HXAlbumShowMode.normal { + photoVC = HXAlbumViewController.init() + }else if config.albumShowMode == HXAlbumShowMode.popup { + photoVC = HXPHPickerViewController.init() + } + super.init(rootViewController: photoVC!) + self.config = config + self.navigationBar.isTranslucent = config.navigationBarIsTranslucent + self.selectType = config.selectType + self.setOptions() + self.requestAuthorization() + } + override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?) { + super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil) + } + required init?(coder aDecoder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + private func setOptions() { + if selectType == HXPHSelectType.photo { + options.predicate = NSPredicate.init(format: "mediaType == %ld", argumentArray: [PHAssetMediaType.image.rawValue]) + }else if selectType == HXPHSelectType.video { + options.predicate = NSPredicate.init(format: "mediaType == %ld", argumentArray: [PHAssetMediaType.video.rawValue]) + }else { + options.predicate = nil + } + } + override func viewDidLoad() { + super.viewDidLoad() + view.backgroundColor = UIColor.white + } + private func requestAuthorization() { + let status = HXPHAssetManager.authorizationStatus() + if status.rawValue >= 3 { + // 有权限 + fetchData(status: status) + }else if status.rawValue >= 1 { + // 无权限 + view.addSubview(deniedView) + }else { + // 用户还没做出选择,请求权限 + HXPHAssetManager.requestAuthorization { (status) in + self.fetchData(status: status) + } + } + } + private func fetchData(status: PHAuthorizationStatus) { + if status.rawValue >= 3 { + PHPhotoLibrary.shared().register(self) + // 有权限 + HXPHProgressHUD.showLoadingHUD(addedTo: view, afterDelay: 0.15, animated: true) + fetchCameraAssetCollection() + }else if status.rawValue >= 1 { + // 无权限 + view.addSubview(deniedView) + } + } + // MARK: 暴露给子控制器的方法 + func finishCallback() { + pickerContollerDelegate?.pickerContollerDidFinish?(self, with: selectedAssetArray, isOriginal: isOriginal) + } + func cancelCallback() { + pickerContollerDelegate?.pickerContollerDidCancel?(self) + } + /// 获取相机胶卷资源集合 + func fetchCameraAssetCollection() { + options.sortDescriptors = [NSSortDescriptor.init(key: "creationDate", ascending: config.creationDate)] + HXPHManager.shared.fetchCameraAssetCollection(for: selectType ?? HXPHSelectType.any, options: options) { (assetCollection) in + if assetCollection.count == 0 { + self.cameraAssetCollection = HXPHAssetCollection.init(albumName: self.config.albumList.emptyAlbumName, coverImage: UIImage.hx_named(named: self.config.albumList.emptyCoverImageName)) + }else { + self.cameraAssetCollection = assetCollection + } + self.fetchCameraAssetCollectionCompletion?(self.cameraAssetCollection) + } + } + func fetchAssetCollections() { + options.sortDescriptors = [NSSortDescriptor.init(key: "creationDate", ascending: config.creationDate)] + HXPHManager.shared.fetchAssetCollections(for: options, showEmptyCollection: false) { (assetCollectionsArray) in + self.assetCollectionsArray = assetCollectionsArray + if !assetCollectionsArray.isEmpty, self.cameraAssetCollection != nil { + self.assetCollectionsArray[0] = self.cameraAssetCollection! + } + self.fetchAssetCollectionsCompletion?(self.assetCollectionsArray) + } + } + func addedPhotoAsset(photoAsset: HXPHAsset) -> Bool { + let canSelect = canSelectAsset(for: photoAsset) + if canSelect { + canAddedAsset = false + photoAsset.selected = true + photoAsset.selectIndex = selectedAssetArray.count + if photoAsset.mediaType == HXPHAssetMediaType.photo { + selectedPhotoAssetArray.append(photoAsset) + }else if photoAsset.mediaType == HXPHAssetMediaType.video { + selectedVideoAssetArray.append(photoAsset) + } + selectedAssetArray.append(photoAsset) + } + return canSelect + } + func removePhotoAsset(photoAsset: HXPHAsset) -> Bool { + if selectedAssetArray.isEmpty { + return false + } + photoAsset.selected = false + if photoAsset.mediaType == HXPHAssetMediaType.photo { + selectedPhotoAssetArray.remove(at: selectedPhotoAssetArray.firstIndex(of: photoAsset)!) + }else if photoAsset.mediaType == HXPHAssetMediaType.video { + selectedVideoAssetArray.remove(at: selectedVideoAssetArray.firstIndex(of: photoAsset)!) + } + selectedAssetArray.remove(at: selectedAssetArray.firstIndex(of: photoAsset)!) + for (index, asset) in selectedAssetArray.enumerated() { + asset.selectIndex = index + } + return true + } + func canSelectAsset(for photoAsset: HXPHAsset) -> Bool { + var canSelect = true + var text: String? + if photoAsset.mediaType == HXPHAssetMediaType.photo { + if !config.photosAndVideosCanBeSelectedTogether { + if selectedVideoAssetArray.count > 0 { + text = "照片和视频不能同时选择".hx_localized() + canSelect = false + } + } + if config.maximumSelectPhotoCount > 0 { + if selectedPhotoAssetArray.count >= config.maximumSelectPhotoCount { + text = String.init(format: "最多只能选择%d张照片".hx_localized(), arguments: [config.maximumSelectPhotoCount]) + canSelect = false + } + }else { + if selectedAssetArray.count >= config.maximumSelectCount && config.maximumSelectCount > 0 { + text = String.init(format: "已达到最大选择数".hx_localized(), arguments: [config.maximumSelectPhotoCount]) + canSelect = false + } + } + }else if photoAsset.mediaType == HXPHAssetMediaType.video { + if config.videoMaximumSelectDuration > 0 { + if round(photoAsset.videoDuration) > Double(config.videoMaximumSelectDuration) { + text = String.init(format: "视频最大时长为%d秒,无法选择".hx_localized(), arguments: [config.videoMaximumSelectDuration]) + canSelect = false + } + } + if config.videoMinimumSelectDuration > 0 { + if photoAsset.videoDuration < Double(config.videoMinimumSelectDuration) { + text = String.init(format: "视频最小时长为%d秒,无法选择".hx_localized(), arguments: [config.videoMinimumSelectDuration]) + canSelect = false + } + } + if !config.photosAndVideosCanBeSelectedTogether { + if selectedPhotoAssetArray.count > 0 { + text = "视频和照片不能同时选择".hx_localized() + canSelect = false + } + } + if config.maximumSelectVideoCount > 0 { + if selectedVideoAssetArray.count >= config.maximumSelectVideoCount { + text = String.init(format: "最多只能选择%d个视频".hx_localized(), arguments: [config.maximumSelectPhotoCount]) + canSelect = false + } + }else { + if selectedAssetArray.count >= config.maximumSelectCount && config.maximumSelectCount > 0 { + text = String.init(format: "已达到最大选择数".hx_localized(), arguments: [config.maximumSelectPhotoCount]) + canSelect = false + } + } + } + if !canSelect { + HXPHProgressHUD.showWarningHUD(addedTo: view, text: text!, afterDelay: 0, animated: true) + HXPHProgressHUD.hideHUD(forView: view, animated: true, afterDelay: 2) + } + return canSelect + } + + override func viewDidLayoutSubviews() { + super.viewDidLayoutSubviews() + let status = HXPHAssetManager.authorizationStatus() + if status.rawValue >= 1 && status.rawValue < 3 { + deniedView.frame = view.bounds + } + } + override var preferredStatusBarStyle: UIStatusBarStyle { + return config.statusBarStyle + } + override var prefersStatusBarHidden: Bool { + return topViewController?.prefersStatusBarHidden ?? false + } + override var preferredStatusBarUpdateAnimation: UIStatusBarAnimation { + return topViewController?.preferredStatusBarUpdateAnimation ?? UIStatusBarAnimation.fade + } + + // MARK: PHPhotoLibraryChangeObserver + + func photoLibraryDidChange(_ changeInstance: PHChange) { + if !HXPHAssetManager.authorizationStatusIsLimited() { + return + } + var needReload = false + if assetCollectionsArray.isEmpty { + if cameraAssetCollection != nil { + needReload = resultHasChanges(for: changeInstance, assetCollection: cameraAssetCollection!) + } + }else { + for assetCollection in assetCollectionsArray { + let hasChanges = resultHasChanges(for: changeInstance, assetCollection: assetCollection) + if !needReload { + needReload = hasChanges; + } + } + } + if needReload { + DispatchQueue.main.async { + self.reloadData(assetCollection: nil) + } + } + } + private func resultHasChanges(for changeInstance:PHChange, assetCollection: HXPHAssetCollection) -> Bool { + if assetCollection.result == nil { + return false + } + let changeResult : PHFetchResultChangeDetails? = changeInstance.changeDetails(for: assetCollection.result!) + if changeResult != nil { + if !changeResult!.hasIncrementalChanges { + let result = changeResult!.fetchResultAfterChanges + assetCollection.changeResult(for: result) + return true + } + } + return false + } + private func reloadAlbumData() { + let albumVC = albumViewController() + if albumVC != nil { + albumVC!.tableView.reloadData() + }else { + + } + } + private func albumViewController() -> HXAlbumViewController? { + for viewController in viewControllers { + if viewController is HXAlbumViewController { + return viewController as? HXAlbumViewController + } + } + return nil + } + private func pickerViewController() -> HXPHPickerViewController? { + for viewController in viewControllers { + if viewController is HXPHPickerViewController { + return viewController as? HXPHPickerViewController + } + } + return nil + } + override func present(_ viewControllerToPresent: UIViewController, animated flag: Bool, completion: (() -> Void)? = nil) { + + super.present(viewControllerToPresent, animated: flag, completion: completion) + } + deinit { + PHPhotoLibrary.shared().unregisterChangeObserver(self) + print("\(self) deinit") + } +} +/// 单独写个扩展,处理/获取数据 +extension HXPHPickerController { + + /// 获取相册里的资源 + /// - Parameters: + /// - assetCollection: 相册 + /// - completion: 完成回调 + func fetchPhotoAssets(assetCollection: HXPHAssetCollection?, completion: @escaping ([HXPHAsset], HXPHAsset?) -> Void) { + DispatchQueue.global().async { + var selectedAssets = [PHAsset]() + var selectedPhotoAssets = [HXPHAsset]() + for phAsset in self.selectedAssetArray { + if phAsset.asset != nil { + selectedAssets.append(phAsset.asset!) + selectedPhotoAssets.append(phAsset) + } + } + var photoAssets = [HXPHAsset]() + photoAssets.reserveCapacity(assetCollection?.count ?? 0) + var lastAsset: HXPHAsset? + assetCollection?.enumerateAssets(usingBlock: { (photoAsset) in + if photoAsset.mediaType == HXPHAssetMediaType.photo { + if self.selectType == HXPHSelectType.video { + return + } + if self.config.showAnimatedAsset == true { + if HXPHAssetManager.assetIsAnimated(asset: photoAsset.asset!) { + photoAsset.mediaSubType = HXPHAssetMediaSubType.imageAnimated + } + } + if self.config.showLivePhotoAsset == true { + if HXPHAssetManager.assetIsLivePhoto(asset: photoAsset.asset!) { + photoAsset.mediaSubType = HXPHAssetMediaSubType.livePhoto + } + } + }else if photoAsset.mediaType == HXPHAssetMediaType.video { + if self.selectType == HXPHSelectType.photo { + return + } + } + var asset = photoAsset + if selectedAssets.contains(asset.asset!) { + let index = selectedAssets.firstIndex(of: asset.asset!)! + let phAsset: HXPHAsset = selectedPhotoAssets[index] + asset = phAsset + lastAsset = phAsset + } + if self.config.reverseOrder == true { + photoAssets.insert(asset, at: 0) + }else { + photoAssets.append(asset) + } + }) + DispatchQueue.main.async { + completion(photoAssets, lastAsset) + } + } + } +} + +class HXPHDeniedAuthorizationView: UIView { + + var config: HXPHNotAuthorizedConfiguration? + + lazy var closeBtn: UIButton = { + let closeBtn = UIButton.init(type: UIButton.ButtonType.custom) + closeBtn.addTarget(self, action: #selector(didCloseClick), for: UIControl.Event.touchUpInside) + return closeBtn + }() + + lazy var titleLb: UILabel = { + let titleLb = UILabel.init() + titleLb.textAlignment = NSTextAlignment.center + titleLb.numberOfLines = 0 + return titleLb + }() + + lazy var subTitleLb: UILabel = { + let subTitleLb = UILabel.init() + subTitleLb.textAlignment = NSTextAlignment.center + subTitleLb.numberOfLines = 0 + return subTitleLb + }() + + lazy var jumpBtn: UIButton = { + let jumpBtn = UIButton.init(type: UIButton.ButtonType.custom) + jumpBtn.layer.cornerRadius = 5 + jumpBtn.addTarget(self, action: #selector(jumpSetting), for: UIControl.Event.touchUpInside) + return jumpBtn + }() + + init(config: HXPHNotAuthorizedConfiguration?) { + super.init(frame: CGRect.zero) + self.config = config + configView() + } + + func configView() { + addSubview(closeBtn) + addSubview(titleLb) + addSubview(subTitleLb) + addSubview(jumpBtn) + backgroundColor = config?.backgroudColor + closeBtn.setTitle("X", for: UIControl.State.normal) + closeBtn.setTitleColor(UIColor.white, for: UIControl.State.normal) + + titleLb.text = "无法访问相册中照片".hx_localized() + titleLb.textColor = config?.titleColor + titleLb.font = UIFont.hx_semiboldPingFang(size: 20) + + subTitleLb.text = "当前无照片访问权限,建议前往系统设置,\n允许访问「照片」中的「所有照片」。".hx_localized() + subTitleLb.textColor = config?.subTitleColor + subTitleLb.font = UIFont.hx_regularPingFang(size: 17) + + jumpBtn.backgroundColor = config?.jumpButtonBackgroudColor + jumpBtn.setTitle("前往系统设置".hx_localized(), for: UIControl.State.normal) + jumpBtn.setTitleColor(config?.jumpButtonTitleColor, for: UIControl.State.normal) + jumpBtn.titleLabel?.font = UIFont.hx_mediumPingFang(size: 16) + } + @objc func didCloseClick() { + self.hx_viewController()?.dismiss(animated: true, completion: nil) + } + @objc func jumpSetting() { + HXPHTools.openSettingsURL() + } + + override func layoutSubviews() { + super.layoutSubviews() + + closeBtn.frame = CGRect(x: 20, y: UIDevice.hx_statusBarHeight() + 5, width: 40, height: 40) + + let titleHeight = titleLb.text?.hx_stringHeight(ofFont: titleLb.font, maxWidth: hx_width) ?? 0 + titleLb.frame = CGRect(x: 0, y: 0, width: hx_width, height: titleHeight) + + let subTitleHeight = subTitleLb.text?.hx_stringHeight(ofFont: subTitleLb.font, maxWidth: hx_width - 40) ?? 0 + subTitleLb.frame = CGRect(x: 20, y: hx_height / 2 - subTitleHeight - 30 - UIDevice.hx_topMargin(), width: hx_width - 40, height: subTitleHeight) + titleLb.hx_y = subTitleLb.hx_y - 15 - titleHeight + + let jumpBtnBottomMargin : CGFloat = UIDevice.isProxy() ? 120 : 50 + jumpBtn.frame = CGRect(x: 0, y: hx_height - UIDevice.hx_bottomMargin() - 40 - jumpBtnBottomMargin, width: 150, height: 40) + jumpBtn.hx_centerX = hx_width * 0.5 + } + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } +} diff --git a/HXPHPicker/HXPHPickerViewCell.swift b/HXPHPicker/HXPHPickerViewCell.swift new file mode 100644 index 00000000..a1c9cd38 --- /dev/null +++ b/HXPHPicker/HXPHPickerViewCell.swift @@ -0,0 +1,286 @@ +// +// HXPHPickerViewCell.swift +// 照片选择器-Swift +// +// Created by 洪欣 on 2019/6/29. +// Copyright © 2019年 洪欣. All rights reserved. +// + +import UIKit +import Photos + +protocol HXPHPickerViewCellDelegate: NSObjectProtocol { + + func cellDidSelectControlClick(_ cell: HXPHPickerMultiSelectViewCell, isSelected: Bool) + +} + +class HXPHPickerViewCell: UICollectionViewCell { + + weak var delegate: HXPHPickerViewCellDelegate? + var config: HXPHPhotoListCellConfiguration? { + didSet { + backgroundColor = config?.backgroundColor + } + } + lazy var imageView: UIImageView = { + let imageView = UIImageView.init() + imageView.contentMode = UIView.ContentMode.scaleAspectFill + imageView.clipsToBounds = true + imageView.layer.addSublayer(assetTypeMaskLayer) + return imageView + }() + lazy var assetTypeMaskLayer: CAGradientLayer = { + let layer = CAGradientLayer.init() + let blackColor = UIColor.black + layer.colors = [blackColor.withAlphaComponent(0).cgColor, + blackColor.withAlphaComponent(0.15).cgColor, + blackColor.withAlphaComponent(0.35).cgColor, + blackColor.withAlphaComponent(0.6).cgColor] + layer.startPoint = CGPoint(x: 0, y: 0) + layer.endPoint = CGPoint(x: 0, y: 1) + layer.locations = [0.15, 0.35, 0.6, 0.9] + layer.borderWidth = 0.0 + layer.isHidden = true + return layer + }() + lazy var assetTypeLb: UILabel = { + let assetTypeLb = UILabel.init() + assetTypeLb.font = UIFont.hx_mediumPingFang(size: 14) + assetTypeLb.textColor = UIColor.white + assetTypeLb.textAlignment = NSTextAlignment.right + return assetTypeLb + }() + var requestID: PHImageRequestID? + var photoAsset: HXPHAsset? { + didSet { + switch photoAsset?.mediaSubType.rawValue { + case 1: + assetTypeLb.text = "GIF" + assetTypeMaskLayer.isHidden = false + break + case 2: + assetTypeLb.text = "Live" + assetTypeMaskLayer.isHidden = false + break + case 4, 5: + assetTypeLb.text = photoAsset?.videoTime + assetTypeMaskLayer.isHidden = false + break + default: + assetTypeLb.text = nil + assetTypeMaskLayer.isHidden = true + } + requestID = photoAsset?.requestThumbnailImage(completion: { (image, photoAsset, info) in + if photoAsset == self.photoAsset && image != nil { + self.imageView.image = image + if !HXPHAssetManager.assetDownloadIsDegraded(for: info) { + self.requestID = nil + } + } + }) + } + } + + var videoCanSelected = true + + override init(frame: CGRect) { + super.init(frame: frame) + initView() + } + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + func initView() { + contentView.addSubview(imageView) + contentView.addSubview(assetTypeLb) + } + + func cancelRequest() { + if requestID != nil { + PHImageManager.default().cancelImageRequest(requestID!) + requestID = nil + } + } + + override func layoutSubviews() { + super.layoutSubviews() + + imageView.frame = bounds + assetTypeMaskLayer.frame = CGRect(x: 0, y: imageView.hx_height - 25, width: hx_width, height: 25) + assetTypeLb.frame = CGRect(x: 0, y: hx_height - 19, width: hx_width - 5, height: 18) + } +} + +class HXPHPickerMultiSelectViewCell : HXPHPickerViewCell { + + lazy var selectControl: HXPHPickerCellSelectBoxControl = { + let selectControl = HXPHPickerCellSelectBoxControl.init() + selectControl.backgroundColor = UIColor.clear + selectControl.addTarget(self, action: #selector(didSelectControlClick(control:)), for: UIControl.Event.touchUpInside) + return selectControl + }() + + lazy var selectMaskLayer: CALayer = { + let selectMaskLayer = CALayer.init() + selectMaskLayer.backgroundColor = UIColor.white.withAlphaComponent(0.5).cgColor + selectMaskLayer.frame = bounds + selectMaskLayer.isHidden = true + return selectMaskLayer + }() + + override var photoAsset: HXPHAsset? { + didSet { + updateSelectedState(isSelected: photoAsset!.selected, animated: false) + } + } + + override var config: HXPHPhotoListCellConfiguration? { + didSet { + selectControl.config = config!.selectBox + } + } + + override init(frame: CGRect) { + super.init(frame: frame) + imageView.layer.addSublayer(selectMaskLayer) + contentView.addSubview(selectControl) + } + + @objc func didSelectControlClick(control: HXPHPickerCellSelectBoxControl) { + delegate?.cellDidSelectControlClick(self, isSelected: control.isSelected) + } + + func updateSelectedState(isSelected: Bool, animated: Bool) { + let boxWidth = config!.selectBox.size.width + let boxHeight = config!.selectBox.size.height + if isSelected { + selectMaskLayer.isHidden = false + if config!.selectBox.type == HXPHPickerCellSelectBoxType.number { + let text = String(format: "%d", arguments: [photoAsset!.selectIndex + 1]) + let font = UIFont.systemFont(ofSize: config!.selectBox.titleFontSize) + let textHeight = text.hx_stringHeight(ofFont: font, maxWidth: boxWidth) + var textWidth = text.hx_stringWidth(ofFont: font, maxHeight: textHeight) + selectControl.textSize = CGSize(width: textWidth, height: textHeight) + textWidth += boxHeight * 0.5 + if textWidth < boxWidth { + textWidth = boxWidth + } + selectControl.text = text + updateSelectControlFrame(width: textWidth, height: boxHeight) + }else { + updateSelectControlFrame(width: boxWidth, height: boxHeight) + } + }else { + selectMaskLayer.isHidden = true + updateSelectControlFrame(width: boxWidth, height: boxHeight) + } + selectControl.isSelected = isSelected + if animated { + selectControl.layer.removeAnimation(forKey: "SelectControlAnimation") + let keyAnimation = CAKeyframeAnimation.init(keyPath: "transform.scale") + keyAnimation.duration = 0.3 + keyAnimation.values = [1.2, 0.8, 1.1, 0.9, 1.0] + selectControl.layer.add(keyAnimation, forKey: "SelectControlAnimation") + } + } + + func updateSelectControlFrame(width: CGFloat, height: CGFloat) { + let topMargin = config?.selectBoxTopMargin ?? 5 + let rightMargin = config?.selectBoxRightMargin ?? 5 + selectControl.frame = CGRect(x: hx_width - rightMargin - width, y: topMargin, width: width, height: height) + } + + override func layoutSubviews() { + super.layoutSubviews() + selectMaskLayer.frame = imageView.bounds + if selectControl.hx_width != hx_width - 5 - selectControl.hx_width { + updateSelectControlFrame(width: selectControl.hx_width, height: selectControl.hx_height) + } + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } +} + +class HXPHPickerCellSelectBoxControl: UIControl { + var text: String = "0" + var textSize: CGSize = CGSize.zero + lazy var config: HXPHSelectBoxConfiguration = { + return HXPHSelectBoxConfiguration.init() + }() + + override func draw(_ rect: CGRect) { + super.draw(rect) + let ctx = UIGraphicsGetCurrentContext()! + var fillRect : CGRect + var fillColor : UIColor? + if isSelected { + fillRect = rect + fillColor = config.selectedBackgroudColor + }else { + let borderWidth = config.borderWidth + let height = hx_height - borderWidth + fillRect = CGRect(x: borderWidth, y: borderWidth, width: hx_width - borderWidth * 2, height: height - borderWidth) + let strokePath = UIBezierPath.init(roundedRect: CGRect(x: borderWidth * 0.5, y: borderWidth * 0.5, width: hx_width - borderWidth, height: height), cornerRadius: height / 2) + fillColor = config.backgroudColor + ctx.addPath(strokePath.cgPath) + ctx.setLineWidth(borderWidth) + ctx.setStrokeColor(config.borderColor.cgColor) + ctx.strokePath() + } + let fillPath = UIBezierPath.init(roundedRect: fillRect, cornerRadius: fillRect.size.height / 2) + ctx.addPath(fillPath.cgPath) + ctx.setFillColor(fillColor!.cgColor) + ctx.fillPath() + if isSelected { + if config.type == HXPHPickerCellSelectBoxType.number { + ctx.textMatrix = CGAffineTransform.identity + ctx.translateBy(x: 0, y: hx_height) + ctx.scaleBy(x: 1, y: -1) + let textPath = CGMutablePath() + let font = UIFont.systemFont(ofSize: config.titleFontSize) + var textHeight: CGFloat + var textWidth: CGFloat + if textSize.equalTo(CGSize.zero) { + textHeight = text.hx_stringHeight(ofFont: font, maxWidth: hx_width) + textWidth = text.hx_stringWidth(ofFont: font, maxHeight: textHeight) + }else { + textHeight = textSize.height + textWidth = textSize.width + } + textPath.addRect(CGRect(x: (hx_width - textWidth) * 0.5, y: (hx_height - textHeight) * 0.5, width: textWidth, height: textHeight)) + ctx.addPath(textPath) + let style = NSMutableParagraphStyle() + style.alignment = .center + let attrString = NSAttributedString(string: text, attributes: [NSAttributedString.Key.font : font , + NSAttributedString.Key.foregroundColor: config.titleColor , + NSAttributedString.Key.paragraphStyle: style]) + let framesetter = CTFramesetterCreateWithAttributedString(attrString) + let frame = CTFramesetterCreateFrame(framesetter, CFRange(location: 0, length: attrString.length), textPath, nil) + CTFrameDraw(frame, ctx) + }else if config.type == HXPHPickerCellSelectBoxType.tick { + let tickPath = UIBezierPath.init() + tickPath.move(to: CGPoint(x: scale(8), y: hx_height * 0.5 + scale(1))) + tickPath.addLine(to: CGPoint(x: hx_width * 0.5 - scale(2), y: hx_height - scale(8))) + tickPath.addLine(to: CGPoint(x: hx_width - scale(7), y: scale(9))) + ctx.addPath(tickPath.cgPath) + ctx.setLineWidth(config.tickWidth) + ctx.setStrokeColor(config.tickColor.cgColor) + ctx.strokePath() + } + } + } + + private func scale(_ numerator: CGFloat) -> CGFloat { + return numerator / 30 * hx_height + } + + override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? { + if CGRect(x: -15, y: -15, width: hx_width + 30, height: hx_height + 30).contains(point) { + return self + } + return super.hitTest(point, with: event) + } +} diff --git a/HXPHPicker/HXPHPickerViewController.swift b/HXPHPicker/HXPHPickerViewController.swift new file mode 100644 index 00000000..34f47749 --- /dev/null +++ b/HXPHPicker/HXPHPickerViewController.swift @@ -0,0 +1,404 @@ +// +// HXPHPickerViewController.swift +// 照片选择器-Swift +// +// Created by 洪欣 on 2019/6/29. +// Copyright © 2019年 洪欣. All rights reserved. +// + +import UIKit + +class HXPHPickerViewController: UIViewController, UICollectionViewDataSource, UICollectionViewDelegate, HXPHPickerViewCellDelegate, HXPHPickerBottomViewDelegate, HXPHPreviewViewControllerDelegate { + + var config: HXPHPhotoListConfiguration! + var assetCollection: HXPHAssetCollection! + var assets: [HXPHAsset] = [] + lazy var collectionViewLayout: UICollectionViewFlowLayout = { + let collectionViewLayout = UICollectionViewFlowLayout.init() + let space = config.spacing + collectionViewLayout.minimumLineSpacing = space + collectionViewLayout.minimumInteritemSpacing = space + return collectionViewLayout + }() + lazy var collectionView: UICollectionView = { + let collectionView = UICollectionView.init(frame: view.bounds, collectionViewLayout: collectionViewLayout) + collectionView.backgroundColor = config.backgroundColor + collectionView.dataSource = self + collectionView.delegate = self + collectionView.register(HXPHPickerViewCell.self, forCellWithReuseIdentifier: NSStringFromClass(HXPHPickerViewCell.classForCoder())) + collectionView.register(HXPHPickerMultiSelectViewCell.self, forCellWithReuseIdentifier: NSStringFromClass(HXPHPickerMultiSelectViewCell.classForCoder())) + + if #available(iOS 11.0, *) { + collectionView.contentInsetAdjustmentBehavior = UIScrollView.ContentInsetAdjustmentBehavior.never + } else { + // Fallback on earlier versions + self.automaticallyAdjustsScrollViewInsets = false + } + return collectionView + }() + var orientationDidChange : Bool = false + var beforeOrientationIndexPath: IndexPath? + var showLoading : Bool = false + var isMultipleSelect : Bool = false + var videoLoadSingleCell = false + + lazy var bottomView : HXPHPickerBottomView = { + let bottomView = HXPHPickerBottomView.init(config: config.bottomView) + bottomView.hx_delegate = self + bottomView.boxControl.isSelected = hx_pickerController()!.isOriginal + return bottomView + }() + + override func viewDidLoad() { + super.viewDidLoad() + configData() + initView() + fetchData() + NotificationCenter.default.addObserver(self, selector: #selector(deviceOrientationChanged(notify:)), name: UIApplication.didChangeStatusBarOrientationNotification, object: nil) + } + @objc func deviceOrientationChanged(notify: Notification) { + beforeOrientationIndexPath = collectionView.indexPathsForVisibleItems.first + orientationDidChange = true + } + func configData() { + isMultipleSelect = hx_pickerController()!.config.selectMode == HXPHAssetSelectMode.multiple + if !hx_pickerController()!.config.photosAndVideosCanBeSelectedTogether && hx_pickerController()!.config.maximumSelectVideoCount == 1 && + hx_pickerController()!.config.selectType == HXPHSelectType.any && + isMultipleSelect { + videoLoadSingleCell = true + } + config = hx_pickerController()!.config.photoList + view.backgroundColor = config.backgroundColor + updateTitle() + navigationItem.rightBarButtonItem = UIBarButtonItem.init(title: "取消".hx_localized(), style: UIBarButtonItem.Style.done, target: self, action: #selector(didCancelItemClick)) + } + @objc func didCancelItemClick() { + hx_pickerController()?.cancelCallback() + dismiss(animated: true, completion: nil) + } + + func initView() { + extendedLayoutIncludesOpaqueBars = true; + edgesForExtendedLayout = UIRectEdge.all; + view.addSubview(collectionView) + if isMultipleSelect { + view.addSubview(bottomView) + bottomView.updateFinishButtonTitle() + } + } + func updateTitle() { + title = assetCollection?.albumName + } + func fetchData() { + if hx_pickerController()!.config.albumShowMode == HXAlbumShowMode.popup { + HXPHAssetManager.requestAuthorization { (status) in + + } + }else { + if showLoading { + HXPHProgressHUD.showLoadingHUD(addedTo: view, afterDelay: 0.15, animated: true) + } + fetchPhotoAssets() + } + } + func fetchPhotoAssets() { + hx_pickerController()!.fetchPhotoAssets(assetCollection: assetCollection) { (photoAssets, photoAsset) in + self.assets = photoAssets + self.collectionView.reloadData() + self.scrollToAppropriatePlace(photoAsset: photoAsset) + if self.showLoading { + HXPHProgressHUD.hideHUD(forView: self.view, animated: true) + self.showLoading = false + }else { + HXPHProgressHUD.hideHUD(forView: self.navigationController?.view, animated: false) + } + } + } + func scrollToAppropriatePlace(photoAsset: HXPHAsset?) { + if assets.isEmpty { + return + } + if !hx_pickerController()!.config.reverseOrder { + var item = assets.count - 1 + if photoAsset != nil { + item = assets.firstIndex(of: photoAsset!) ?? item + } + collectionView.scrollToItem(at: IndexPath(item: item, section: 0), at: UICollectionView.ScrollPosition.bottom, animated: false) + } + } + func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { + return assets.count + } + + func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { + let cell: HXPHPickerViewCell + let photoAsset = assets[indexPath.item] + if hx_pickerController()?.config.selectMode == HXPHAssetSelectMode.single || (photoAsset.mediaType == HXPHAssetMediaType.video && videoLoadSingleCell) { + cell = collectionView.dequeueReusableCell(withReuseIdentifier: NSStringFromClass(HXPHPickerViewCell.classForCoder()), for: indexPath) as! HXPHPickerViewCell + }else { + cell = collectionView.dequeueReusableCell(withReuseIdentifier: NSStringFromClass(HXPHPickerMultiSelectViewCell.classForCoder()), for: indexPath) as! HXPHPickerMultiSelectViewCell + } + cell.delegate = self + cell.config = config.cell + cell.photoAsset = photoAsset + return cell + } + + func collectionView(_ collectionView: UICollectionView, didEndDisplaying cell: UICollectionViewCell, forItemAt indexPath: IndexPath) { + let myCell: HXPHPickerViewCell = cell as! HXPHPickerViewCell + + myCell.cancelRequest() + } + + func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { + collectionView.deselectItem(at: indexPath, animated: false) + pushPreviewViewController(previewAssets: assets, currentPreviewIndex: indexPath.item) + } + + func pushPreviewViewController(previewAssets: [HXPHAsset], currentPreviewIndex: Int) { + let vc = HXPHPreviewViewController.init() + vc.previewAssets = previewAssets + vc.currentPreviewIndex = currentPreviewIndex + vc.delegate = self + navigationController?.pushViewController(vc, animated: true) + } + + // MARK: HXPHPickerViewCellDelegate + + func cellDidSelectControlClick(_ cell: HXPHPickerMultiSelectViewCell, isSelected: Bool) { + if isSelected { + // 取消选中 + _ = hx_pickerController()?.removePhotoAsset(photoAsset: cell.photoAsset!) + cell.updateSelectedState(isSelected: false, animated: true) + if config.cell.selectBox.type == HXPHPickerCellSelectBoxType.number { + updateCellSelectedTitle() + } + }else { + // 选中 + if hx_pickerController()!.addedPhotoAsset(photoAsset: cell.photoAsset!) { + cell.updateSelectedState(isSelected: true, animated: true) + } + } + bottomView.updateFinishButtonTitle() + } + + func updateCellSelectedTitle() { + for visibleCell in collectionView.visibleCells { + if visibleCell is HXPHPickerMultiSelectViewCell { + let cell = visibleCell as! HXPHPickerMultiSelectViewCell + if cell.photoAsset!.selected { + if Int(cell.selectControl.text) != (cell.photoAsset!.selectIndex + 1) { + cell.updateSelectedState(isSelected: true, animated: false) + cell.selectControl.setNeedsDisplay() + } + } + } + } + } + + // MARK: HXPHPickerBottomViewDelegate + func bottomViewDidPreviewButtonClick(view: HXPHPickerBottomView) { + pushPreviewViewController(previewAssets: hx_pickerController()!.selectedAssetArray, currentPreviewIndex: 0) + } + func bottomViewDidFinishButtonClick(view: HXPHPickerBottomView) { + hx_pickerController()?.finishCallback() + dismiss(animated: true, completion: nil) + } + func bottomViewDidOriginalButtonClick(view: HXPHPickerBottomView, with isOriginal: Bool) { } + + // MARK: HXPHPreviewViewControllerDelegate + func previewViewControllerDidClickOriginal(_ previewViewController: HXPHPreviewViewController, with isOriginal: Bool) { + if isMultipleSelect { + bottomView.boxControl.isSelected = isOriginal + } + } + func previewViewControllerDidClickSelectBox(_ previewViewController: HXPHPreviewViewController, with isSelected: Bool) { + collectionView.reloadData() + bottomView.updateFinishButtonTitle() + } + + init() { + super.init(nibName: nil, bundle: nil) + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + override func viewDidLayoutSubviews() { + super.viewDidLayoutSubviews() + let margin: CGFloat = UIDevice.hx_leftMargin() + collectionView.frame = CGRect(x: margin, y: 0, width: view.hx_width - 2 * margin, height: view.hx_height) + var collectionTop: CGFloat + if navigationController?.modalPresentationStyle == UIModalPresentationStyle.fullScreen { + collectionTop = UIDevice.hx_navigationBarHeight() + }else { + collectionTop = navigationController!.navigationBar.hx_height + } + if isMultipleSelect { + bottomView.frame = CGRect(x: 0, y: view.hx_height - 50 - UIDevice.hx_bottomMargin(), width: view.hx_width, height: 50 + UIDevice.hx_bottomMargin()) + collectionView.contentInset = UIEdgeInsets(top: collectionTop, left: 0, bottom: bottomView.hx_height + 0.5, right: 0) + }else { + collectionView.contentInset = UIEdgeInsets(top: collectionTop, left: 0, bottom: UIDevice.hx_bottomMargin(), right: 0) + } + let space = config.spacing + let count : CGFloat + if UIDevice.hx_isPortrait() == true { + count = CGFloat(config.rowNumber) + }else { + count = CGFloat(config.landscapeRowNumber) + } + let itemWidth = (collectionView.hx_width - space * (count - CGFloat(1))) / count + collectionViewLayout.itemSize = CGSize.init(width: itemWidth, height: itemWidth) + collectionView.setCollectionViewLayout(collectionViewLayout, animated: true) + if orientationDidChange { + collectionView.scrollToItem(at: beforeOrientationIndexPath ?? IndexPath(item: 0, section: 0), at: UICollectionView.ScrollPosition.top, animated: false) + orientationDidChange = false + } + } + deinit { + NotificationCenter.default.removeObserver(self) + } +} + +protocol HXPHPickerBottomViewDelegate: NSObjectProtocol { + func bottomViewDidPreviewButtonClick(view: HXPHPickerBottomView) + func bottomViewDidFinishButtonClick(view: HXPHPickerBottomView) + func bottomViewDidOriginalButtonClick(view: HXPHPickerBottomView, with isOriginal: Bool) +} + +class HXPHPickerBottomView: UIToolbar { + weak var hx_delegate: HXPHPickerBottomViewDelegate? + + var config: HXPHPickerBottomViewConfiguration? + + lazy var previewBtn: UIButton = { + let previewBtn = UIButton.init(type: UIButton.ButtonType.custom) + previewBtn.setTitle("预览".hx_localized(), for: UIControl.State.normal) + previewBtn.setTitleColor(config?.previewButtonTitleColor, for: UIControl.State.normal) + if config?.previewButtonDisableTitleColor != nil { + previewBtn.setTitleColor(config?.previewButtonDisableTitleColor, for: UIControl.State.disabled) + }else { + previewBtn.setTitleColor(config?.previewButtonTitleColor.withAlphaComponent(0.6), for: UIControl.State.disabled) + } + previewBtn.titleLabel?.font = UIFont.systemFont(ofSize: 17) + previewBtn.isEnabled = false + previewBtn.addTarget(self, action: #selector(didPreviewButtonClick(button:)), for: UIControl.Event.touchUpInside) + previewBtn.isHidden = config!.previewButtonHidden + return previewBtn + }() + + @objc func didPreviewButtonClick(button: UIButton) { + hx_delegate?.bottomViewDidPreviewButtonClick(view: self) + } + + lazy var originalBtn: UIView = { + let originalBtn = UIView.init() + originalBtn.addSubview(originalTitleLb) + originalBtn.addSubview(boxControl) + let tap = UITapGestureRecognizer.init(target: self, action: #selector(didOriginalButtonClick)) + originalBtn.addGestureRecognizer(tap) + originalBtn.isHidden = config!.originalButtonHidden + return originalBtn + }() + + @objc func didOriginalButtonClick() { + if boxControl.isSelected { + // 取消 + + }else { + // 选中 + + } + boxControl.isSelected = !boxControl.isSelected + hx_viewController()?.hx_pickerController()?.isOriginal = boxControl.isSelected + hx_delegate?.bottomViewDidOriginalButtonClick(view: self, with: boxControl.isSelected) + boxControl.layer.removeAnimation(forKey: "SelectControlAnimation") + let keyAnimation = CAKeyframeAnimation.init(keyPath: "transform.scale") + keyAnimation.duration = 0.3 + keyAnimation.values = [1.2, 0.8, 1.1, 0.9, 1.0] + boxControl.layer.add(keyAnimation, forKey: "SelectControlAnimation") + } + + lazy var originalTitleLb: UILabel = { + let originalTitleLb = UILabel.init() + originalTitleLb.text = "原图".hx_localized() + originalTitleLb.textColor = config?.originalButtonTitleColor + originalTitleLb.font = UIFont.systemFont(ofSize: 17) + originalTitleLb.frame = CGRect(x: 0, y: 0, width: originalTitleLb.text!.hx_stringWidth(ofFont: originalTitleLb.font, maxHeight: 50), height: 50) + return originalTitleLb + }() + + lazy var boxControl: HXPHPickerCellSelectBoxControl = { + let boxControl = HXPHPickerCellSelectBoxControl.init(frame: CGRect(x: originalTitleLb.hx_width + 2, y: 0, width: 16, height: 16)) + boxControl.config = config!.originalSelectBox + boxControl.hx_centerY = originalTitleLb.hx_height * 0.5 + boxControl.backgroundColor = UIColor.clear + return boxControl + }() + + lazy var finishBtn: UIButton = { + let finishBtn = UIButton.init(type: UIButton.ButtonType.custom) + finishBtn.setTitle("完成".hx_localized(), for: UIControl.State.normal) + finishBtn.setTitleColor(config?.finishButtonTitleColor, for: UIControl.State.normal) + finishBtn.setTitleColor(config?.finishButtonDisableTitleColor, for: UIControl.State.disabled) + finishBtn.setBackgroundImage(UIImage.hx_image(for: config!.finishButtonBackgroudColor, havingSize: CGSize.zero), for: UIControl.State.normal) + finishBtn.setBackgroundImage(UIImage.hx_image(for: config!.finishButtonDisableBackgroudColor, havingSize: CGSize.zero), for: UIControl.State.disabled) + finishBtn.titleLabel?.font = UIFont.hx_mediumPingFang(size: 16) + finishBtn.layer.cornerRadius = 3 + finishBtn.layer.masksToBounds = true + finishBtn.isEnabled = false + finishBtn.addTarget(self, action: #selector(didFinishButtonClick(button:)), for: UIControl.Event.touchUpInside) + return finishBtn + }() + @objc func didFinishButtonClick(button: UIButton) { + hx_delegate?.bottomViewDidFinishButtonClick(view: self) + } + + init(config: HXPHPickerBottomViewConfiguration) { + super.init(frame: CGRect.zero) + self.config = config + addSubview(previewBtn) + addSubview(originalBtn) + addSubview(finishBtn) + backgroundColor = config.backgroundColor + barTintColor = config.barTintColor + barStyle = config.barStyle + isTranslucent = config.isTranslucent + } + + func updateFinishButtonTitle() { + let selectCount = hx_viewController()?.hx_pickerController()?.selectedAssetArray.count ?? 0 + if selectCount > 0 { + finishBtn.isEnabled = true + previewBtn.isEnabled = true + finishBtn.setTitle("完成".hx_localized() + " (" + String(format: "%d", arguments: [selectCount]) + ")", for: UIControl.State.normal) + }else { + finishBtn.isEnabled = !config!.disableFinishButtonWhenNotSelected + previewBtn.isEnabled = false + finishBtn.setTitle("完成".hx_localized(), for: UIControl.State.normal) + } + updateFinishButtonFrame() + } + + func updateFinishButtonFrame() { + originalBtn.hx_centerX = hx_width / 2 + var finishWidth : CGFloat = finishBtn.currentTitle!.hx_localized().hx_stringWidth(ofFont: finishBtn.titleLabel!.font, maxHeight: 50) + 20 + if finishWidth < 60 { + finishWidth = 60 + } + finishBtn.frame = CGRect(x: hx_width - UIDevice.hx_rightMargin() - finishWidth - 12, y: 0, width: finishWidth, height: 33) + finishBtn.hx_centerY = 25 + } + + override func layoutSubviews() { + super.layoutSubviews() + let previewWidth : CGFloat = previewBtn.currentTitle!.hx_localized().hx_stringWidth(ofFont: previewBtn.titleLabel!.font, maxHeight: 50) + previewBtn.frame = CGRect(x: 12 + UIDevice.hx_leftMargin(), y: 0, width: previewWidth, height: 50) + originalBtn.frame = CGRect(x: 0, y: 0, width: boxControl.frame.maxX, height: 50) + updateFinishButtonFrame() + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } +} diff --git a/HXPHPicker/HXPHPreviewViewCell.swift b/HXPHPicker/HXPHPreviewViewCell.swift new file mode 100644 index 00000000..205d06a0 --- /dev/null +++ b/HXPHPicker/HXPHPreviewViewCell.swift @@ -0,0 +1,303 @@ +// +// HXPHPreviewViewCell.swift +// HXPHPickerExample +// +// Created by 洪欣 on 2020/11/13. +// Copyright © 2020 洪欣. All rights reserved. +// + +import UIKit +import Photos +import PhotosUI + +protocol HXPHPreviewViewCellDelegate: NSObjectProtocol { + func singleTap() +} + +class HXPHPreviewViewCell: UICollectionViewCell, UIScrollViewDelegate { + + weak var delegate: HXPHPreviewViewCellDelegate? + + var scrollContentView: HXPHPreviewContentView? + lazy var scrollView : UIScrollView = { + let scrollView = UIScrollView.init() + scrollView.delegate = self; + scrollView.showsHorizontalScrollIndicator = false + scrollView.showsVerticalScrollIndicator = false + scrollView.bouncesZoom = true + scrollView.minimumZoomScale = 1 + scrollView.isMultipleTouchEnabled = true + scrollView.scrollsToTop = false + scrollView.delaysContentTouches = false + scrollView.canCancelContentTouches = true + scrollView.alwaysBounceVertical = false + scrollView.autoresizingMask = UIView.AutoresizingMask.init(arrayLiteral: UIView.AutoresizingMask.flexibleWidth, UIView.AutoresizingMask.flexibleHeight) + if #available(iOS 11.0, *) { + scrollView.contentInsetAdjustmentBehavior = UIScrollView.ContentInsetAdjustmentBehavior.never + } + let singleTap = UITapGestureRecognizer.init(target: self, action: #selector(singleTap(tap:))) + scrollView.addGestureRecognizer(singleTap) + let doubleTap = UITapGestureRecognizer.init(target: self, action: #selector(doubleTap(tap:))) + doubleTap.numberOfTapsRequired = 2 + doubleTap.numberOfTouchesRequired = 1 + singleTap.require(toFail: doubleTap) + scrollView.addGestureRecognizer(doubleTap) + scrollView.addSubview(scrollContentView!) + return scrollView + }() + + var photoAsset: HXPHAsset? { + didSet { + setupScrollViewContenSize() + scrollContentView!.photoAsset = photoAsset + } + } + + override init(frame: CGRect) { + super.init(frame: frame) + } + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + func initView() { + contentView.addSubview(scrollView) + } + func setupScrollViewContenSize() { + if UIDevice.hx_isPortrait() { + let aspectRatio = hx_width / photoAsset!.imageSize.width + let contentWidth = hx_width + let contentHeight = photoAsset!.imageSize.height * aspectRatio + if contentWidth < contentHeight { + scrollView.maximumZoomScale = hx_width * 2.5 / contentWidth + }else { + scrollView.maximumZoomScale = hx_height * 2.5 / contentHeight + } + scrollContentView!.frame = CGRect(x: 0, y: 0, width: contentWidth, height: contentHeight) + if contentHeight < hx_height { + scrollView.contentSize = hx_size + scrollContentView!.center = CGPoint(x: hx_width * 0.5, y: hx_height * 0.5) + }else { + scrollView.contentSize = CGSize(width: contentWidth, height: contentHeight) + } + }else { + let aspectRatio = hx_height / photoAsset!.imageSize.height + let contentWidth = photoAsset!.imageSize.width * aspectRatio + let contentHeight = hx_height + scrollView.maximumZoomScale = hx_width / contentWidth + 0.5 + + scrollContentView!.frame = CGRect(x: 0, y: 0, width: contentWidth, height: contentHeight) + scrollContentView!.center = CGPoint(x: hx_width * 0.5, y: hx_height * 0.5) + scrollView.contentSize = hx_size + } + } + func requestPreviewAsset() { + scrollContentView!.requestPreviewAsset() + } + func cancelRequest() { + scrollContentView!.cancelRequest() + } + @objc func singleTap(tap: UITapGestureRecognizer) { + delegate?.singleTap() + } + @objc func doubleTap(tap: UITapGestureRecognizer) { + if scrollView.zoomScale > 1 { + scrollView.setZoomScale(1, animated: true) + }else { + let touchPoint = tap.location(in: scrollContentView!) + let maximumZoomScale = scrollView.maximumZoomScale + let width = hx_width / maximumZoomScale + let height = hx_height / maximumZoomScale + scrollView.zoom(to: CGRect(x: touchPoint.x - width / 2, y: touchPoint.y - height / 2, width: width, height: height), animated: true) + } + } + func viewForZooming(in scrollView: UIScrollView) -> UIView? { + return scrollContentView! + } + func scrollViewDidZoom(_ scrollView: UIScrollView) { + let offsetX = (scrollView.frame.size.width > scrollView.contentSize.width) ? (scrollView.frame.size.width - scrollView.contentSize.width) * 0.5 : 0.0; + let offsetY = (scrollView.frame.size.height > scrollView.contentSize.height) ? (scrollView.frame.size.height - scrollView.contentSize.height) * 0.5 : 0.0; + scrollContentView!.center = CGPoint(x: scrollView.contentSize.width * 0.5 + offsetX, y: scrollView.contentSize.height * 0.5 + offsetY); + } + + override func layoutSubviews() { + super.layoutSubviews() + if scrollView.frame.equalTo(bounds) == false { + scrollView.frame = bounds + } + } +} +class HXPHPreviewPhotoViewCell: HXPHPreviewViewCell { + + override init(frame: CGRect) { + super.init(frame: frame) + scrollContentView = HXPHPreviewContentView.init(type: HXPHPreviewContentViewType.photo) + initView() + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + +} + +class HXPHPreviewLivePhotoViewCell: HXPHPreviewViewCell { + + override init(frame: CGRect) { + super.init(frame: frame) + scrollContentView = HXPHPreviewContentView.init(type: HXPHPreviewContentViewType.livePhoto) + initView() + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + +} + +enum HXPHPreviewContentViewType: Int { + case photo + case livePhoto + case video +} +class HXPHPreviewContentView: UIView, PHLivePhotoViewDelegate { + + lazy var imageView: UIImageView = { + let imageView = UIImageView.init() + return imageView + }() + @available(iOS 9.1, *) + lazy var livePhotoView: PHLivePhotoView = { + let livePhotoView = PHLivePhotoView.init() + livePhotoView.delegate = self + return livePhotoView + }() + var type: HXPHPreviewContentViewType = HXPHPreviewContentViewType.photo + var requestID: PHImageRequestID? + var requestCompletion: Bool = false + + var photoAsset: HXPHAsset? { + didSet { + if type == HXPHPreviewContentViewType.livePhoto { + if #available(iOS 9.1, *) { + livePhotoView.livePhoto = nil + } + } + requestID = photoAsset?.requestThumbnailImage(completion: { (image, asset, info) in + if asset == self.photoAsset && image != nil { + self.imageView.image = image + } + }) + } + } + + init(type: HXPHPreviewContentViewType) { + super.init(frame: CGRect.zero) + self.type = type + addSubview(imageView) + if type == HXPHPreviewContentViewType.livePhoto { + if #available(iOS 9.1, *) { + addSubview(livePhotoView) + } + }else if type == HXPHPreviewContentViewType.video { + + } + } + + func requestPreviewAsset() { + if requestCompletion { + return + } + cancelRequest() + if type == HXPHPreviewContentViewType.photo { + requestOriginalImage() + }else if type == HXPHPreviewContentViewType.livePhoto { + if #available(iOS 9.1, *) { + requestLivePhoto() + } + }else if type == HXPHPreviewContentViewType.video { + + } + } + + func requestOriginalImage() { + requestID = photoAsset?.requestImageData(iCloudHandler: { (asset, iCloudRequestID) in + if asset == self.photoAsset { + self.requestID = iCloudRequestID + } + }, progressHandler: { (asset, progress) in + if asset == self.photoAsset { + + } + }, success: { (asset, imageData, imageOrientation, info) in + DispatchQueue.global().async { + var image = UIImage.init(data: imageData) + image = image?.hx_scaleSuitableSize() + DispatchQueue.main.async { + if asset == self.photoAsset { + self.imageView.image = image + self.requestID = nil + self.requestCompletion = true + } + } + } + }, failure: { (asset, info) in + if asset == self.photoAsset { + + } + }) + } + @available(iOS 9.1, *) + func requestLivePhoto() { + let targetSize : CGSize = hx_size + requestID = photoAsset?.requestLivePhoto(targetSize: targetSize, iCloudHandler: { (asset, requestID) in + if asset == self.photoAsset { + self.requestID = requestID + } + }, progressHandler: { (asset, progress) in + if asset == self.photoAsset { + + } + }, success: { (asset, livePhoto, info) in + if asset == self.photoAsset { + self.livePhotoView.livePhoto = livePhoto + self.livePhotoView.startPlayback(with: PHLivePhotoViewPlaybackStyle.full) + self.requestID = nil + self.requestCompletion = true + } + }, failure: { (asset, info) in + if asset == self.photoAsset { + + } + }) + } + func cancelRequest() { + if requestID != nil { + PHImageManager.default().cancelImageRequest(requestID!) + requestID = nil + } + if type == HXPHPreviewContentViewType.livePhoto { + if #available(iOS 9.1, *) { + livePhotoView.stopPlayback() + } + }else if type == HXPHPreviewContentViewType.video { + + } + requestCompletion = false + } + + override func layoutSubviews() { + super.layoutSubviews() + imageView.frame = bounds + if type == HXPHPreviewContentViewType.livePhoto { + if #available(iOS 9.1, *) { + livePhotoView.frame = bounds + } + }else if type == HXPHPreviewContentViewType.video { + + } + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } +} diff --git a/HXPHPicker/HXPHPreviewViewController.swift b/HXPHPicker/HXPHPreviewViewController.swift new file mode 100644 index 00000000..fa3d3b1d --- /dev/null +++ b/HXPHPicker/HXPHPreviewViewController.swift @@ -0,0 +1,286 @@ +// +// HXPHPreviewViewController.swift +// HXPHPickerExample +// +// Created by 洪欣 on 2020/11/13. +// Copyright © 2020 洪欣. All rights reserved. +// + +import UIKit + +protocol HXPHPreviewViewControllerDelegate: NSObjectProtocol { + func previewViewControllerDidClickOriginal(_ previewViewController:HXPHPreviewViewController, with isOriginal: Bool) + func previewViewControllerDidClickSelectBox(_ previewViewController:HXPHPreviewViewController, with isSelected: Bool) +} + +class HXPHPreviewViewController: UIViewController, UICollectionViewDataSource, UICollectionViewDelegate, HXPHPreviewViewCellDelegate, HXPHPickerBottomViewDelegate { + + weak var delegate: HXPHPreviewViewControllerDelegate? + var config : HXPHPreviewViewConfiguration! + var currentPreviewIndex : Int = 0 + var orientationDidChange : Bool = false + var statusBarShouldBeHidden : Bool = false + var previewAssets : [HXPHAsset] = [] + + lazy var selectBoxControl: HXPHPickerCellSelectBoxControl = { + let boxControl = HXPHPickerCellSelectBoxControl.init(frame: CGRect(x: 0, y: 0, width: config.selectBox.size.width, height: config.selectBox.size.height)) + boxControl.backgroundColor = UIColor.clear + boxControl.config = config.selectBox + boxControl.addTarget(self, action: #selector(didSelectBoxControlClick), for: UIControl.Event.touchUpInside) + return boxControl + }() + @objc func didSelectBoxControlClick() { + let isSelected = !selectBoxControl.isSelected + let photoAsset = previewAssets[currentPreviewIndex] + var canUpdate = false + if isSelected { + // 选中 + if hx_pickerController()!.addedPhotoAsset(photoAsset: photoAsset) { + canUpdate = true + } + }else { + // 取消选中 + _ = hx_pickerController()?.removePhotoAsset(photoAsset: photoAsset) + canUpdate = true + } + if canUpdate { + updateSelectBox(isSelected, photoAsset: photoAsset) + selectBoxControl.isSelected = isSelected + bottomView.updateFinishButtonTitle() + delegate?.previewViewControllerDidClickSelectBox(self, with: isSelected) + selectBoxControl.layer.removeAnimation(forKey: "SelectControlAnimation") + let keyAnimation = CAKeyframeAnimation.init(keyPath: "transform.scale") + keyAnimation.duration = 0.3 + keyAnimation.values = [1.2, 0.8, 1.1, 0.9, 1.0] + selectBoxControl.layer.add(keyAnimation, forKey: "SelectControlAnimation") + } + } + + func updateSelectBox(_ isSelected: Bool, photoAsset: HXPHAsset) { + let boxWidth = config!.selectBox.size.width + let boxHeight = config!.selectBox.size.height + if isSelected { + if config.selectBox.type == HXPHPickerCellSelectBoxType.number { + let text = String(format: "%d", arguments: [photoAsset.selectIndex + 1]) + let font = UIFont.systemFont(ofSize: config!.selectBox.titleFontSize) + let textHeight = text.hx_stringHeight(ofFont: font, maxWidth: boxWidth) + var textWidth = text.hx_stringWidth(ofFont: font, maxHeight: textHeight) + selectBoxControl.textSize = CGSize(width: textWidth, height: textHeight) + textWidth += boxHeight * 0.5 + if textWidth < boxWidth { + textWidth = boxWidth + } + selectBoxControl.text = text + selectBoxControl.hx_size = CGSize(width: textWidth, height: boxHeight) + }else { + selectBoxControl.hx_size = CGSize(width: boxWidth, height: boxHeight) + } + }else { + selectBoxControl.hx_size = CGSize(width: boxWidth, height: boxHeight) + } + } + + lazy var collectionViewLayout : UICollectionViewFlowLayout = { + let layout = UICollectionViewFlowLayout.init() + layout.scrollDirection = UICollectionView.ScrollDirection.horizontal + layout.minimumLineSpacing = 0 + layout.minimumInteritemSpacing = 0 + layout.sectionInset = UIEdgeInsets(top: 0, left: 10, bottom: 0, right: 10) + return layout + }() + + lazy var collectionView : UICollectionView = { + let collectionView = UICollectionView.init(frame: view.bounds, collectionViewLayout: collectionViewLayout) + collectionView.backgroundColor = config.backgroundColor + collectionView.dataSource = self + collectionView.delegate = self + collectionView.isPagingEnabled = true + collectionView.showsVerticalScrollIndicator = false + collectionView.showsHorizontalScrollIndicator = false + if #available(iOS 11.0, *) { + collectionView.contentInsetAdjustmentBehavior = UIScrollView.ContentInsetAdjustmentBehavior.never + } else { + // Fallback on earlier versions + self.automaticallyAdjustsScrollViewInsets = false + } + collectionView.register(HXPHPreviewPhotoViewCell.self, forCellWithReuseIdentifier: NSStringFromClass(HXPHPreviewPhotoViewCell.self)) + collectionView.register(HXPHPreviewLivePhotoViewCell.self, forCellWithReuseIdentifier: NSStringFromClass(HXPHPreviewLivePhotoViewCell.self)) + return collectionView + }() + + lazy var bottomView : HXPHPickerBottomView = { + let bottomView = HXPHPickerBottomView.init(config: config.bottomView) + bottomView.hx_delegate = self + bottomView.boxControl.isSelected = hx_pickerController()!.isOriginal + return bottomView + }() + // MARK: HXPHPickerBottomViewDelegate + func bottomViewDidPreviewButtonClick(view: HXPHPickerBottomView) {} + func bottomViewDidFinishButtonClick(view: HXPHPickerBottomView) { + hx_pickerController()?.finishCallback() + dismiss(animated: true, completion: nil) + } + func bottomViewDidOriginalButtonClick(view: HXPHPickerBottomView, with isOriginal: Bool) { + delegate?.previewViewControllerDidClickOriginal(self, with: isOriginal) + } + init() { + super.init(nibName: nil, bundle: nil) + } + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + override func viewDidLayoutSubviews() { + super.viewDidLayoutSubviews() + let margin : CGFloat = 20 + let itemWidth = view.hx_width + margin; + collectionViewLayout.minimumLineSpacing = margin + collectionViewLayout.itemSize = view.hx_size + let contentWidth = (view.hx_width + itemWidth) * CGFloat(previewAssets.count) + collectionView.frame = CGRect(x: -(margin * 0.5), y: 0, width: itemWidth, height: view.hx_height) + collectionView.contentSize = CGSize(width: contentWidth, height: view.hx_height) + collectionView.setContentOffset(CGPoint(x: CGFloat(currentPreviewIndex) * itemWidth, y: 0), animated: false) + DispatchQueue.main.async { + if self.orientationDidChange { + let cell = self.getCell(for: self.currentPreviewIndex) + cell?.setupScrollViewContenSize() + self.orientationDidChange = false + } + } + bottomView.frame = CGRect(x: 0, y: view.hx_height - UIDevice.hx_bottomMargin() - 50, width: view.hx_width, height: 50 + UIDevice.hx_bottomMargin()) + } + + override func viewDidLoad() { + super.viewDidLoad() + extendedLayoutIncludesOpaqueBars = true; + edgesForExtendedLayout = UIRectEdge.all; + view.clipsToBounds = true + config = hx_pickerController()!.config.previewView + NotificationCenter.default.addObserver(self, selector: #selector(deviceOrientationChanged(notify:)), name: UIApplication.didChangeStatusBarOrientationNotification, object: nil) + view.backgroundColor = config.backgroundColor + initView() + } + + func initView() { + view.addSubview(collectionView) + view.addSubview(bottomView) + bottomView.updateFinishButtonTitle() + if hx_pickerController()!.config.selectMode == HXPHAssetSelectMode.multiple { + navigationItem.rightBarButtonItem = UIBarButtonItem.init(customView: selectBoxControl) + if currentPreviewIndex == 0 && !previewAssets.isEmpty { + let photoAsset = previewAssets.first! + updateSelectBox(photoAsset.selected, photoAsset: photoAsset) + selectBoxControl.isSelected = photoAsset.selected + } + } + } + + func getCell(for item: Int) -> HXPHPreviewViewCell? { + if previewAssets.isEmpty { + return nil + } + let cell = self.collectionView.cellForItem(at: IndexPath.init(item: item, section: 0)) as! HXPHPreviewViewCell + return cell + } + + @objc func deviceOrientationChanged(notify: Notification) { + orientationDidChange = true + let cell = getCell(for: currentPreviewIndex) + if cell?.photoAsset?.mediaSubType == HXPHAssetMediaSubType.livePhoto { + if #available(iOS 9.1, *) { + cell?.scrollContentView?.livePhotoView.stopPlayback() + } + } + } + + func singleTap() { + if navigationController == nil { + return + } + let isHidden = navigationController!.navigationBar.isHidden + statusBarShouldBeHidden = !isHidden + if self.modalPresentationStyle == UIModalPresentationStyle.fullScreen { + UIApplication.shared.setStatusBarHidden(statusBarShouldBeHidden, with: UIStatusBarAnimation.fade) + navigationController?.setNeedsStatusBarAppearanceUpdate() + } + navigationController!.setNavigationBarHidden(statusBarShouldBeHidden, animated: true) + if !statusBarShouldBeHidden { + self.bottomView.isHidden = false + } + UIView.animate(withDuration: 0.25) { + self.bottomView.alpha = self.statusBarShouldBeHidden ? 0 : 1 + } completion: { (finish) in + self.bottomView.isHidden = self.statusBarShouldBeHidden + } + + } + func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { + return previewAssets.count + } + + func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { + let photoAsset = previewAssets[indexPath.item] + let cell :HXPHPreviewViewCell + if photoAsset.mediaSubType == HXPHAssetMediaSubType.livePhoto { + cell = collectionView.dequeueReusableCell(withReuseIdentifier: NSStringFromClass(HXPHPreviewLivePhotoViewCell.self), for: indexPath) as! HXPHPreviewLivePhotoViewCell + }else { + cell = collectionView.dequeueReusableCell(withReuseIdentifier: NSStringFromClass(HXPHPreviewPhotoViewCell.self), for: indexPath) as! HXPHPreviewPhotoViewCell + } + cell.photoAsset = photoAsset + cell.delegate = self + return cell + } + + func collectionView(_ collectionView: UICollectionView, didEndDisplaying cell: UICollectionViewCell, forItemAt indexPath: IndexPath) { + let myCell = cell as! HXPHPreviewViewCell + myCell.cancelRequest() + } + + func scrollViewDidScroll(_ scrollView: UIScrollView) { + if scrollView != collectionView || orientationDidChange { + return + } + let offsetX = scrollView.contentOffset.x + (view.hx_width + 20) * 0.5 + let width = view.hx_width + 20 + var currentIndex = Int(offsetX / width) + if currentIndex > previewAssets.count - 1 { + currentIndex = previewAssets.count - 1 + } + if currentIndex < 0 { + currentIndex = 0 + } + if !previewAssets.isEmpty { + let photoAsset = previewAssets[currentIndex] + updateSelectBox(photoAsset.selected, photoAsset: photoAsset) + if selectBoxControl.isSelected == photoAsset.selected { + selectBoxControl.setNeedsDisplay() + }else { + selectBoxControl.isSelected = photoAsset.selected + } + } + self.currentPreviewIndex = currentIndex + } + + func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) { + if scrollView != collectionView || orientationDidChange { + return + } + let cell = getCell(for: currentPreviewIndex) + cell?.requestPreviewAsset() + } + override func viewDidAppear(_ animated: Bool) { + super.viewDidAppear(animated) + let cell = getCell(for: currentPreviewIndex) + cell?.requestPreviewAsset() + } + override var prefersStatusBarHidden: Bool { + return statusBarShouldBeHidden + } + + override var preferredStatusBarUpdateAnimation: UIStatusBarAnimation { + return UIStatusBarAnimation.fade + } + + deinit { + NotificationCenter.default.removeObserver(self) + } +} diff --git a/HXPHPicker/HXPHTools.swift b/HXPHPicker/HXPHTools.swift new file mode 100644 index 00000000..8eab1225 --- /dev/null +++ b/HXPHPicker/HXPHTools.swift @@ -0,0 +1,130 @@ +// +// HXPHTools.swift +// 照片选择器-Swift +// +// Created by 洪欣 on 2019/6/29. +// Copyright © 2019年 洪欣. All rights reserved. +// + +import UIKit +import Photos + +typealias statusHandler = (PHAuthorizationStatus) -> () + +class HXPHTools: NSObject { + + + /// 显示没有权限的弹窗 + /// - Parameters: + /// - viewController: 需要弹窗的viewController + /// - status: 权限类型 + class func showNotAuthorizedAlert(viewController : UIViewController? , status : PHAuthorizationStatus) { + if viewController == nil { + return + } + if status == PHAuthorizationStatus.denied || + status == PHAuthorizationStatus.restricted { + showAlert(viewController: viewController, title: "无法访问相册", message: "请在设置-隐私-相册中允许访问相册", leftActionTitle: "取消", leftHandler: {_ in }, rightActionTitle: "设置") { (alertAction) in + openSettingsURL() + } + } + } + + class func openSettingsURL() { + if #available(iOS 10, *) { + UIApplication.shared.open(URL(string: UIApplication.openSettingsURLString)!, options: [:], completionHandler: nil) + } else { + UIApplication.shared.openURL(URL(string: UIApplication.openSettingsURLString)!) + } + } + + class func showAlert(viewController: UIViewController? , title: String? , message: String? , leftActionTitle: String , leftHandler: @escaping (UIAlertAction)->(), rightActionTitle: String , rightHandler: @escaping (UIAlertAction)->()) { + let alertController = UIAlertController.init(title: title, message: message, preferredStyle: UIAlertController.Style.alert) + let leftAction = UIAlertAction.init(title: leftActionTitle, style: UIAlertAction.Style.cancel, handler: leftHandler) + let rightAction = UIAlertAction.init(title: rightActionTitle, style: UIAlertAction.Style.default, handler: rightHandler) + alertController.addAction(leftAction) + alertController.addAction(rightAction) + } + + class func transformVideoDurationToString(duration: TimeInterval) -> String { + let time = Int(round(Double(duration))) + if time < 10 { + return String.init(format: "00:0%d", arguments: [time]) + }else if time < 60 { + return String.init(format: "00:%d", arguments: [time]) + }else { + let min = Int(time / 60) + let sec = time - (min * 60) + if sec < 10 { + return String.init(format: "%d:0%d", arguments: [min,sec]) + }else { + return String.init(format: "%d:%d", arguments: [min,sec]) + } + } + } + + class func transformAlbumName(for collection: PHAssetCollection) -> String? { + if collection.assetCollectionType == PHAssetCollectionType.album { + return collection.localizedTitle + } + var albumName : String? + let type = HXPHManager.shared.languageType + if type == HXPHLanguageType.system { + albumName = collection.localizedTitle + }else { + if collection.localizedTitle == "最近项目" || + collection.localizedTitle == "最近添加" { + albumName = "HXAlbumRecents".hx_localized() + }else if collection.localizedTitle == "Camera Roll" || + collection.localizedTitle == "相机胶卷" { + albumName = "HXAlbumCameraRoll".hx_localized() + }else { + switch collection.assetCollectionSubtype { + case PHAssetCollectionSubtype.smartAlbumUserLibrary: + albumName = "HXAlbumCameraRoll".hx_localized() + break + case PHAssetCollectionSubtype.smartAlbumVideos: + albumName = "HXAlbumVideos".hx_localized() + break + case PHAssetCollectionSubtype.smartAlbumPanoramas: + albumName = "HXAlbumPanoramas".hx_localized() + break + case PHAssetCollectionSubtype.smartAlbumFavorites: + albumName = "HXAlbumFavorites".hx_localized() + break + case PHAssetCollectionSubtype.smartAlbumTimelapses: + albumName = "HXAlbumTimelapses".hx_localized() + break + case PHAssetCollectionSubtype.smartAlbumRecentlyAdded: + albumName = "HXAlbumRecentlyAdded".hx_localized() + break + case PHAssetCollectionSubtype.smartAlbumBursts: + albumName = "HXAlbumBursts".hx_localized() + break + case PHAssetCollectionSubtype.smartAlbumSlomoVideos: + albumName = "HXAlbumSlomoVideos".hx_localized() + break + case PHAssetCollectionSubtype.smartAlbumSelfPortraits: + albumName = "HXAlbumSelfPortraits".hx_localized() + break + case PHAssetCollectionSubtype.smartAlbumScreenshots: + albumName = "HXAlbumScreenshots".hx_localized() + break + case PHAssetCollectionSubtype.smartAlbumDepthEffect: + albumName = "HXAlbumDepthEffect".hx_localized() + break + case PHAssetCollectionSubtype.smartAlbumLivePhotos: + albumName = "HXAlbumLivePhotos".hx_localized() + break + case PHAssetCollectionSubtype.smartAlbumAnimated: + albumName = "HXAlbumAnimated".hx_localized() + break + default: + albumName = collection.localizedTitle + break + } + } + } + return albumName + } +} diff --git a/HXPHPicker/HXPHTypes.swift b/HXPHPicker/HXPHTypes.swift new file mode 100644 index 00000000..bb10fbb8 --- /dev/null +++ b/HXPHPicker/HXPHTypes.swift @@ -0,0 +1,54 @@ +// +// HXPHTypes.swift +// 照片选择器-Swift +// +// Created by 洪欣 on 2020/11/9. +// Copyright © 2020 洪欣. All rights reserved. +// + +import UIKit + +enum HXPHSelectType: Int { + case photo = 0 //!< 只显示图片 + case video = 1 //!< 只显示视频 + case any = 2 //!< 任何类型 +} + +enum HXPHAssetSelectMode: Int { + case single = 0 //!< 单选模式 + case multiple = 1 //!< 多选模式 +} + +enum HXAlbumShowMode: Int { + case normal = 0 //!< 正常展示 + case popup = 1 //!< 弹出展示 +} + +enum HXPHAssetMediaType: Int { + case photo = 0 //!< 照片 + case video = 1 //!< 视频 +} + +enum HXPHAssetMediaSubType: Int { + case image = 0 //!< 静态图 + case imageAnimated = 1 //!< 动图 + case livePhoto = 2 //!< LivePhoto + case localPhoto = 3 //!< 本地图片 + case video = 4 //!< 视频 + case localVideo = 5 //!< 本地视频 + case camera = 99 //!< 相机 +} + +enum HXPHLanguageType: Int { + case system //!< 跟随系统语言 + case simplifiedChinese //!< 中文简体 + case traditionalChinese //!< 中文繁体 + case japanese //!< 日文 + case korean //!< 韩文 + case english //!< 英文 +} + +enum HXPHPickerCellSelectBoxType: Int { + case number //!< 数字 + case tick //!< √ +} diff --git a/HXPHPicker/String+HXPHPicker.swift b/HXPHPicker/String+HXPHPicker.swift new file mode 100644 index 00000000..4eec4109 --- /dev/null +++ b/HXPHPicker/String+HXPHPicker.swift @@ -0,0 +1,40 @@ +// +// String+HXPHPicker.swift +// HXPHPickerExample +// +// Created by 洪欣 on 2020/11/13. +// Copyright © 2020 洪欣. All rights reserved. +// + +import UIKit + +extension String { + + func hx_localized() -> String { + return Bundle.hx_localizedString(for: self) + } + + func hx_stringWidth(ofFont font: UIFont, maxHeight: CGFloat) -> CGFloat { + let constraintRect = CGSize(width: CGFloat(MAXFLOAT), height: maxHeight) + let boundingBox = self.boundingRect(with: constraintRect, options: NSStringDrawingOptions.usesLineFragmentOrigin, attributes: [NSAttributedString.Key.font: font], context: nil) + return boundingBox.size.width + } + + func hx_stringWidth(ofSize size: CGFloat, maxHeight: CGFloat) -> CGFloat { + let constraintRect = CGSize(width: CGFloat(MAXFLOAT), height: maxHeight) + let boundingBox = self.boundingRect(with: constraintRect, options: NSStringDrawingOptions.usesLineFragmentOrigin, attributes: [NSAttributedString.Key.font: UIFont.systemFont(ofSize: size)], context: nil) + return boundingBox.size.width + } + + func hx_stringHeight(ofFont font: UIFont, maxWidth: CGFloat) -> CGFloat { + let constraintRect = CGSize(width: maxWidth, height: CGFloat(MAXFLOAT)) + let boundingBox = self.boundingRect(with: constraintRect, options: NSStringDrawingOptions.usesLineFragmentOrigin, attributes: [NSAttributedString.Key.font: font], context: nil) + return boundingBox.size.height + } + + func hx_stringHeight(ofSize size: CGFloat, maxWidth: CGFloat) -> CGFloat { + let constraintRect = CGSize(width: maxWidth, height: CGFloat(MAXFLOAT)) + let boundingBox = self.boundingRect(with: constraintRect, options: NSStringDrawingOptions.usesLineFragmentOrigin, attributes: [NSAttributedString.Key.font: UIFont.systemFont(ofSize: size)], context: nil) + return boundingBox.size.height + } +} diff --git a/HXPHPicker/UIColor+HXPHPicker.swift b/HXPHPicker/UIColor+HXPHPicker.swift new file mode 100644 index 00000000..80e61a07 --- /dev/null +++ b/HXPHPicker/UIColor+HXPHPicker.swift @@ -0,0 +1,31 @@ +// +// UIColor+HXPHPicker.swift +// HXPHPickerExample +// +// Created by 洪欣 on 2020/11/13. +// Copyright © 2020 洪欣. All rights reserved. +// + +import UIKit + +extension UIColor { + + convenience init(hx_hexString: String) { + let hexString = hx_hexString.trimmingCharacters(in: .whitespacesAndNewlines) + let scanner = Scanner(string: hexString) + if hexString.hasPrefix("#") { + scanner.scanLocation = 1 + } + var color: UInt32 = 0 + scanner.scanHexInt32(&color) + let mask = 0x000000FF + let r = Int(color >> 16) & mask + let g = Int(color >> 8) & mask + let b = Int(color) & mask + let red = CGFloat(r) / 255.0 + let green = CGFloat(g) / 255.0 + let blue = CGFloat(b) / 255.0 + self.init(red: red, green: green, blue: blue, alpha: 1) + } + +} diff --git a/HXPHPicker/UIDevice+HXPHPicker.swift b/HXPHPicker/UIDevice+HXPHPicker.swift new file mode 100644 index 00000000..121e42bb --- /dev/null +++ b/HXPHPicker/UIDevice+HXPHPicker.swift @@ -0,0 +1,126 @@ +// +// UIDevice+HXPHPicker.swift +// HXPHPickerExample +// +// Created by 洪欣 on 2020/11/13. +// Copyright © 2020 洪欣. All rights reserved. +// + +import UIKit + +extension UIDevice { + class func hx_isPortrait() -> Bool { + let orientation = UIApplication.shared.statusBarOrientation + if orientation == UIInterfaceOrientation.landscapeLeft || + orientation == UIInterfaceOrientation.landscapeRight { + return false + } + return true + } + class func hx_navigationBarHeight() -> CGFloat { + return hx_statusBarHeight() + 44 + } + class func hx_statusBarHeight() -> CGFloat { + let statusBarHeight : CGFloat; + let window = UIApplication.shared.windows.first + if #available(iOS 13.0, *) { + statusBarHeight = (window?.windowScene?.statusBarManager?.statusBarFrame.size.height)! + } else { + // Fallback on earlier versions + statusBarHeight = UIApplication.shared.statusBarFrame.size.height + } + return statusBarHeight + } + class func hx_topMargin() -> CGFloat { + if hx_isAllIPhoneX() { + return hx_statusBarHeight() + } + return 0 + } + class func hx_leftMargin() -> CGFloat { + if hx_isAllIPhoneX() { + if !hx_isPortrait() { + return 44 + } + } + return 0 + } + class func hx_rightMargin() -> CGFloat { + if hx_isAllIPhoneX() { + if !hx_isPortrait() { + return 44 + } + } + return 0 + } + class func hx_bottomMargin() -> CGFloat { + if hx_isAllIPhoneX() { + if hx_isPortrait() { + return 34 + }else { + return 21 + } + } + return 0 + } + class func hx_isPad() -> Bool { + return UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiom.pad + } + class func hx_isAllIPhoneX() -> Bool { + return (hx_isIPhoneX() || hx_isIPhoneXR() || hx_isIPhoneXsMax() || hx_isIPhoneXsMax() || hx_isIPhoneTwelveMini() || hx_isIPhoneTwelve() || hx_isIPhoneTwelveProMax()) + } + class func hx_isIPhoneX() -> Bool { + if UIScreen.instancesRespond(to: Selector(("currentMode"))) == true && + hx_isPad() == false { + if __CGSizeEqualToSize(CGSize(width: 1125, height: 2436), UIScreen.main.currentMode!.size) { + return true + } + } + return false + } + class func hx_isIPhoneXR() -> Bool { + if UIScreen.instancesRespond(to: Selector(("currentMode"))) == true && + hx_isPad() == false { + if __CGSizeEqualToSize(CGSize(width: 828, height: 1792), UIScreen.main.currentMode!.size) { + return true + } + } + return false + } + class func hx_isIPhoneXsMax() -> Bool { + if UIScreen.instancesRespond(to: Selector(("currentMode"))) == true && + hx_isPad() == false { + if __CGSizeEqualToSize(CGSize(width: 1242, height: 2688), UIScreen.main.currentMode!.size) { + return true + } + } + return false + } + class func hx_isIPhoneTwelveMini() -> Bool { + if UIScreen.instancesRespond(to: Selector(("currentMode"))) == true && + hx_isPad() == false { + if __CGSizeEqualToSize(CGSize(width: 1080, height: 2340), UIScreen.main.currentMode!.size) { + return true + } + } + return false + } + class func hx_isIPhoneTwelve() -> Bool { + if UIScreen.instancesRespond(to: Selector(("currentMode"))) == true && + hx_isPad() == false { + if __CGSizeEqualToSize(CGSize(width: 1170, height: 2532), UIScreen.main.currentMode!.size) { + return true + } + } + return false + } + class func hx_isIPhoneTwelveProMax() -> Bool { + if UIScreen.instancesRespond(to: Selector(("currentMode"))) == true && + hx_isPad() == false { + if __CGSizeEqualToSize(CGSize(width: 1284, height: 2778), UIScreen.main.currentMode!.size) { + return true + } + } + return false + } +} diff --git a/HXPHPicker/UIFont+HXPHPicker.swift b/HXPHPicker/UIFont+HXPHPicker.swift new file mode 100644 index 00000000..e726e35b --- /dev/null +++ b/HXPHPicker/UIFont+HXPHPicker.swift @@ -0,0 +1,28 @@ +// +// UIFont+HXPHPicker.swift +// HXPHPickerExample +// +// Created by 洪欣 on 2020/11/13. +// Copyright © 2020 洪欣. All rights reserved. +// + +import UIKit + +extension UIFont { + + class func hx_regularPingFang(size: CGFloat) -> UIFont { + let font = UIFont.init(name: "PingFangSC-Regular", size: size) + return font ?? UIFont.systemFont(ofSize: size) + } + + class func hx_mediumPingFang(size: CGFloat) -> UIFont { + let font = UIFont.init(name: "PingFangSC-Medium", size: size) + return font ?? UIFont.systemFont(ofSize: size) + } + + class func hx_semiboldPingFang(size: CGFloat) -> UIFont { + let font = UIFont.init(name: "PingFangSC-Semibold", size: size) + return font ?? UIFont.systemFont(ofSize: size) + } + +} diff --git a/HXPHPicker/UIImage+HXPHPicker.swift b/HXPHPicker/UIImage+HXPHPicker.swift new file mode 100644 index 00000000..e10115ec --- /dev/null +++ b/HXPHPicker/UIImage+HXPHPicker.swift @@ -0,0 +1,64 @@ +// +// UIImage+HXPHPicker.swift +// HXPHPickerExample +// +// Created by 洪欣 on 2020/11/15. +// Copyright © 2020 洪欣. All rights reserved. +// + +import UIKit + +extension UIImage { + + class func hx_named(named: String) -> UIImage? { + let bundle = HXPHManager.shared.bundle + var image : UIImage? + if bundle != nil { + let path = bundle?.path(forResource: "images/" + named, ofType: nil) + if path != nil { + image = self.init(named: path!) + } + } + if image == nil { + image = self.init(named: named) + } + return image + } + + func hx_scaleSuitableSize() -> UIImage? { + var imageSize = self.size + while (imageSize.width * imageSize.height > 3 * 1000 * 1000) { + imageSize.width *= 0.5 + imageSize.height *= 0.5 + } + return self.hx_scaleToFillSize(size: imageSize) + } + func hx_scaleToFillSize(size: CGSize) -> UIImage? { + if __CGSizeEqualToSize(self.size, size) { + return self + } + UIGraphicsBeginImageContextWithOptions(size, false, self.scale) + self.draw(in: CGRect(x: 0, y: 0, width: size.width, height: size.height)) + let image = UIGraphicsGetImageFromCurrentImageContext() + UIGraphicsEndImageContext() + return image + } + + class func hx_image(for color: UIColor, havingSize: CGSize) -> UIImage? { + let rect: CGRect + if havingSize.equalTo(CGSize.zero) { + rect = CGRect(x: 0, y: 0, width: 1, height: 1) + }else { + rect = CGRect(x: 0, y: 0, width: havingSize.width, height: havingSize.height) + } + UIGraphicsBeginImageContext(rect.size) + let context = UIGraphicsGetCurrentContext() + context?.setFillColor(color.cgColor) + context?.fill(rect) + + let image = UIGraphicsGetImageFromCurrentImageContext() + UIGraphicsEndImageContext() + return image + } + +} diff --git a/HXPHPicker/UIView+HXPHPicker.swift b/HXPHPicker/UIView+HXPHPicker.swift new file mode 100644 index 00000000..81451d6d --- /dev/null +++ b/HXPHPicker/UIView+HXPHPicker.swift @@ -0,0 +1,383 @@ +// +// UIView+HXPHPicker.swift +// HXPhotoPickerSwift +// +// Created by 洪欣 on 2020/11/12. +// Copyright © 2020 洪欣. All rights reserved. +// + +import UIKit + +extension UIView { + var hx_x : CGFloat { + get { + return frame.origin.x + } + set { + var rect = frame + rect.origin.x = newValue + frame = rect + } + } + var hx_y : CGFloat { + get { + return frame.origin.y + } + set { + var rect = frame + rect.origin.y = newValue + frame = rect + } + } + var hx_width : CGFloat { + get { + return frame.size.width + } + set { + var rect = frame + rect.size.width = newValue + frame = rect + } + } + var hx_height : CGFloat { + get { + return frame.size.height + } + set { + var rect = frame + rect.size.height = newValue + frame = rect + } + } + var hx_size : CGSize { + get { + return frame.size + } + set { + var rect = frame + rect.size = newValue + frame = rect + } + } + var hx_centerX : CGFloat { + get { + return center.x + } + set { + var point = center + point.x = newValue + center = point + } + } + var hx_centerY : CGFloat { + get { + return center.y + } + set { + var point = center + point.y = newValue + center = point + } + } + + func hx_viewController() -> UIViewController? { + var next = superview + while (next != nil) { + let nextResponder = next?.next + if nextResponder is UINavigationController || + nextResponder is UIViewController { + return nextResponder as? UIViewController + } + next = next?.superview + } + return nil + } +} + +enum HXPHProgressHUDMode : Int { + case indicator + case image +} + +class HXPHProgressHUD: UIView { + var mode : HXPHProgressHUDMode! + + lazy var backgroundView: UIView = { + let backgroundView = UIView.init() + backgroundView.layer.cornerRadius = 5 + backgroundView.layer.masksToBounds = true + backgroundView.alpha = 0 + backgroundView.addSubview(blurEffectView) + return backgroundView + }() + + lazy var blurEffectView: UIVisualEffectView = { + let effect = UIBlurEffect.init(style: UIBlurEffect.Style.dark) + let blurEffectView = UIVisualEffectView.init(effect: effect) + return blurEffectView + }() + + lazy var indicatorView : UIActivityIndicatorView = { + let indicatorView = UIActivityIndicatorView.init(style: UIActivityIndicatorView.Style.whiteLarge) + indicatorView.hidesWhenStopped = true + return indicatorView + }() + + lazy var textLb: UILabel = { + let textLb = UILabel.init() + textLb.textColor = UIColor.white + textLb.textAlignment = NSTextAlignment.center + textLb.font = UIFont.hx_mediumPingFang(size: 16) + textLb.numberOfLines = 0; + return textLb + }() + + lazy var imageView: HXPHProgressImageView = { + let imageView = HXPHProgressImageView.init(frame: CGRect(x: 0, y: 0, width: 60, height: 60)) + return imageView + }() + + var text : String? + var finished : Bool = false + var showDelayTimer : Timer? + var hideDelayTimer : Timer? + + init(addedTo view: UIView, mode: HXPHProgressHUDMode) { + super.init(frame: view.bounds) + self.mode = mode + initView() + } + + func initView() { + addSubview(backgroundView) + backgroundView.addSubview(textLb) + if mode == HXPHProgressHUDMode.indicator { + backgroundView.addSubview(indicatorView) + }else if mode == HXPHProgressHUDMode.image { + backgroundView.addSubview(imageView) + } + } + + private func showHUD(text: String?, animated: Bool, afterDelay: TimeInterval) { + self.text = text + textLb.text = text + updateFrame() + if afterDelay > 0 { + let timer = Timer.init(timeInterval: afterDelay, target: self, selector: #selector(handleShowTimer(timer:)), userInfo: animated, repeats: false) + RunLoop.current.add(timer, forMode: RunLoop.Mode.common) + self.showDelayTimer = timer + }else { + showViews(animated: animated) + } + } + @objc func handleShowTimer(timer: Timer) { + showViews(animated: (timer.userInfo != nil)) + } + private func showViews(animated: Bool) { + if finished { + return + } + if animated { + UIView.animate(withDuration: 0.25) { + self.backgroundView.alpha = 1 + } + }else { + self.backgroundView.alpha = 1 + } + } + private func hideHUD(withAnimated animated: Bool, afterDelay: TimeInterval) { + finished = true + self.showDelayTimer?.invalidate() + if afterDelay > 0 { + let timer = Timer.init(timeInterval: afterDelay, target: self, selector: #selector(handleHideTimer(timer:)), userInfo: animated, repeats: false) + RunLoop.current.add(timer, forMode: RunLoop.Mode.common) + self.hideDelayTimer = timer + }else { + hideViews(animated: animated) + } + } + @objc func handleHideTimer(timer: Timer) { + hideViews(animated: (timer.userInfo != nil)) + } + private func hideViews(animated: Bool) { + if animated { + UIView.animate(withDuration: 0.25) { + self.backgroundView.alpha = 0 + } completion: { (finished) in + self.removeFromSuperview() + } + }else { + self.backgroundView.alpha = 0 + removeFromSuperview() + } + } + private func updateFrame() { + if text != nil { + var width = text!.hx_stringWidth(ofFont: textLb.font, maxHeight: 15) + if width < 60 { + width = 60 + } + if width > hx_width - 100 { + width = hx_width - 100 + } + let height = text!.hx_stringHeight(ofFont: textLb.font, maxWidth: width) + textLb.hx_size = CGSize(width: width, height: height) + } + var width = textLb.hx_width + 60 + if width < 100 { + width = 100 + } + + let centenrX = width / 2 + textLb.hx_centerX = centenrX + if mode == HXPHProgressHUDMode.indicator { + indicatorView.startAnimating() + indicatorView.hx_centerX = centenrX + if text != nil { + indicatorView.hx_y = 20 + textLb.hx_y = indicatorView.frame.maxY + 10 + }else { + indicatorView.hx_centerY = 100 / 2 + } + }else if mode == HXPHProgressHUDMode.image { + imageView.hx_centerX = centenrX + if text != nil { + imageView.hx_y = 20 + textLb.hx_y = imageView.frame.maxY + 15 + }else { + imageView.hx_centerY = 100 / 2 + } + } + + backgroundView.hx_width = width + if textLb.frame.maxY + 20 < 120 { + backgroundView.hx_height = 100 + }else { + backgroundView.hx_height = textLb.frame.maxY + 20 + } + backgroundView.center = CGPoint(x: hx_width / 2, y: hx_height / 2) + blurEffectView.frame = backgroundView.bounds + } + + class func showLoadingHUD(addedTo view: UIView?, animated: Bool) { + showLoadingHUD(addedTo: view, text: nil, animated: animated) + } + class func showLoadingHUD(addedTo view: UIView?, afterDelay: TimeInterval, animated: Bool) { + showLoadingHUD(addedTo: view, text: nil, afterDelay: afterDelay, animated: animated) + } + + class func showLoadingHUD(addedTo view: UIView?, text: String?, animated: Bool) { + showLoadingHUD(addedTo: view, text: text, afterDelay: 0, animated: animated) + } + + class func showLoadingHUD(addedTo view: UIView?, text: String?, afterDelay: TimeInterval , animated: Bool) { + if view == nil { + return + } + let progressView = HXPHProgressHUD.init(addedTo: view!, mode: HXPHProgressHUDMode.indicator) + progressView.showHUD(text: text, animated: animated, afterDelay: afterDelay) + view!.addSubview(progressView) + } + + class func showWarningHUD(addedTo view: UIView?, text: String?, afterDelay: TimeInterval , animated: Bool) { + if view == nil { + return + } + let progressView = HXPHProgressHUD.init(addedTo: view!, mode: HXPHProgressHUDMode.image) + progressView.showHUD(text: text, animated: animated, afterDelay: afterDelay) + view!.addSubview(progressView) + } + + class func hideHUD(forView view:UIView? ,animated: Bool) { + hideHUD(forView: view, animated: animated, afterDelay: 0) + } + + class func hideHUD(forView view:UIView? ,animated: Bool ,afterDelay: TimeInterval) { + if view == nil { + return + } + for subView in view!.subviews { + if subView is HXPHProgressHUD { + (subView as! HXPHProgressHUD).hideHUD(withAnimated: animated, afterDelay: afterDelay) + } + } + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } +} +class HXPHProgressImageView: UIView { + + lazy var circleLayer: CAShapeLayer = { + let circleLayer = CAShapeLayer.init() + return circleLayer + }() + + lazy var lineLayer: CAShapeLayer = { + let lineLayer = CAShapeLayer.init() + return lineLayer + }() + + lazy var pointLayer: CAShapeLayer = { + let pointLayer = CAShapeLayer.init() + return pointLayer + }() + + override init(frame: CGRect) { + super.init(frame: frame) + layer.addSublayer(circleLayer) + layer.addSublayer(lineLayer) + layer.addSublayer(pointLayer) + drawCircle() + drawExclamationPoint() + } + func startAnimation() { + } + func drawCircle() { + let circlePath = UIBezierPath.init() + circlePath.addArc(withCenter: CGPoint(x: hx_width * 0.5, y: hx_height * 0.5), radius: hx_width * 0.5, startAngle: 0, endAngle: 2 * .pi, clockwise: true) + circleLayer.path = circlePath.cgPath + circleLayer.lineWidth = 1.5 + circleLayer.strokeColor = UIColor.white.cgColor + circleLayer.fillColor = UIColor.clear.cgColor + +// let circleAimation = CABasicAnimation.init(keyPath: "strokeEnd") +// circleAimation.fromValue = 0 +// circleAimation.toValue = 1 +// circleAimation.duration = 0.5 +// circleLayer.add(circleAimation, forKey: "") + } + + func drawExclamationPoint() { + let linePath = UIBezierPath.init() + linePath.move(to: CGPoint(x: hx_width * 0.5, y: 15)) + linePath.addLine(to: CGPoint(x: hx_width * 0.5, y: hx_height - 22)) + lineLayer.path = linePath.cgPath + lineLayer.lineWidth = 2 + lineLayer.strokeColor = UIColor.white.cgColor + lineLayer.fillColor = UIColor.white.cgColor + +// let lineAimation = CABasicAnimation.init(keyPath: "strokeEnd") +// lineAimation.fromValue = 0 +// lineAimation.toValue = 1 +// lineAimation.duration = 0.3 +// lineLayer.add(lineAimation, forKey: "") + + let pointPath = UIBezierPath.init() + pointPath.addArc(withCenter: CGPoint(x: hx_width * 0.5, y: hx_height - 15), radius: 1, startAngle: 0, endAngle: 2 * .pi, clockwise: true) + pointLayer.path = pointPath.cgPath + pointLayer.lineWidth = 1 + pointLayer.strokeColor = UIColor.white.cgColor + pointLayer.fillColor = UIColor.white.cgColor + +// let pointAimation = CAKeyframeAnimation.init(keyPath: "transform.scale") +// pointAimation.values = [0, 1.2, 0.8, 1.1, 0.9 , 1] +// pointAimation.duration = 0.5 +// pointLayer.add(pointAimation, forKey: "") + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } +} diff --git a/HXPHPicker/UIViewController+HXPHPicker.swift b/HXPHPicker/UIViewController+HXPHPicker.swift new file mode 100644 index 00000000..c3f79542 --- /dev/null +++ b/HXPHPicker/UIViewController+HXPHPicker.swift @@ -0,0 +1,20 @@ +// +// UIViewController+HXPHPicker.swift +// 照片选择器-Swift +// +// Created by 洪欣 on 2020/11/11. +// Copyright © 2020 洪欣. All rights reserved. +// + +import UIKit + +extension UIViewController { + + func hx_pickerController() -> HXPHPickerController? { + if self.navigationController is HXPHPickerController { + return self.navigationController as? HXPHPickerController + } + return nil + } + +} diff --git a/HXPhotoPicker-DemoUITests/HXPhotoPicker_DemoUITests.m b/HXPhotoPicker-DemoUITests/HXPhotoPicker_DemoUITests.m deleted file mode 100644 index c4d69e0a..00000000 --- a/HXPhotoPicker-DemoUITests/HXPhotoPicker_DemoUITests.m +++ /dev/null @@ -1,48 +0,0 @@ -// -// HXPhotoPicker_DemoUITests.m -// HXPhotoPicker-DemoUITests -// -// Created by 洪欣 on 2020/8/29. -// Copyright © 2020 洪欣. All rights reserved. -// - -#import - -@interface HXPhotoPicker_DemoUITests : XCTestCase - -@end - -@implementation HXPhotoPicker_DemoUITests - -- (void)setUp { - // Put setup code here. This method is called before the invocation of each test method in the class. - // - // In UI tests it is usually best to stop immediately when a failure occurs. - self.continueAfterFailure = NO; - - // In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this. -} - -- (void)tearDown { - // Put teardown code here. This method is called after the invocation of each test method in the class. -} - -- (void)testExample { - // UI tests must launch the application that they test. - XCUIApplication *app = [[XCUIApplication alloc] init]; - [app launch]; - - // Use recording to get started writing UI tests. - // Use XCTAssert and related functions to verify your tests produce the correct results. -} - -- (void)testLaunchPerformance { - if (@available(macOS 10.15, iOS 13.0, tvOS 13.0, *)) { - // This measures how long it takes to launch your application. - [self measureWithMetrics:@[XCTOSSignpostMetric.applicationLaunchMetric] block:^{ - [[[XCUIApplication alloc] init] launch]; - }]; - } -} - -@end diff --git a/HXPhotoPicker-DemoUITests/Info.plist b/HXPhotoPicker-DemoUITests/Info.plist deleted file mode 100644 index 64d65ca4..00000000 --- a/HXPhotoPicker-DemoUITests/Info.plist +++ /dev/null @@ -1,22 +0,0 @@ - - - - - CFBundleDevelopmentRegion - $(DEVELOPMENT_LANGUAGE) - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - $(PRODUCT_BUNDLE_PACKAGE_TYPE) - CFBundleShortVersionString - 1.0 - CFBundleVersion - 1 - - diff --git a/HXPhotoPicker/Category/NSArray+HXExtension.h b/HXPhotoPicker/Category/NSArray+HXExtension.h index 90531e93..c4885a11 100644 --- a/HXPhotoPicker/Category/NSArray+HXExtension.h +++ b/HXPhotoPicker/Category/NSArray+HXExtension.h @@ -1,6 +1,6 @@ // // NSArray+HXExtension.h -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2019/1/7. // Copyright © 2019年 洪欣. All rights reserved. diff --git a/HXPhotoPicker/Category/NSArray+HXExtension.m b/HXPhotoPicker/Category/NSArray+HXExtension.m index e1ff047f..069aa622 100644 --- a/HXPhotoPicker/Category/NSArray+HXExtension.m +++ b/HXPhotoPicker/Category/NSArray+HXExtension.m @@ -1,6 +1,6 @@ // // NSArray+HXExtension.m -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2019/1/7. // Copyright © 2019年 洪欣. All rights reserved. diff --git a/HXPhotoPicker/Category/NSBundle+HXPhotoPicker.h b/HXPhotoPicker/Category/NSBundle+HXPhotoPicker.h index 623c0571..2f78856f 100644 --- a/HXPhotoPicker/Category/NSBundle+HXPhotoPicker.h +++ b/HXPhotoPicker/Category/NSBundle+HXPhotoPicker.h @@ -1,6 +1,6 @@ // // NSBundle+HXPhotoPicker.h -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2017/7/25. // Copyright © 2017年 洪欣. All rights reserved. diff --git a/HXPhotoPicker/Category/NSBundle+HXPhotoPicker.m b/HXPhotoPicker/Category/NSBundle+HXPhotoPicker.m index 920cd980..453420d1 100644 --- a/HXPhotoPicker/Category/NSBundle+HXPhotoPicker.m +++ b/HXPhotoPicker/Category/NSBundle+HXPhotoPicker.m @@ -1,6 +1,6 @@ // // NSBundle+HXPhotopicker.m -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2017/7/25. // Copyright © 2017年 洪欣. All rights reserved. diff --git a/HXPhotoPicker/Category/NSDate+HXExtension.h b/HXPhotoPicker/Category/NSDate+HXExtension.h index 13727f6e..8e55c835 100644 --- a/HXPhotoPicker/Category/NSDate+HXExtension.h +++ b/HXPhotoPicker/Category/NSDate+HXExtension.h @@ -1,6 +1,6 @@ // // NSDate+HXExtension.h -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2017/10/14. // Copyright © 2017年 洪欣. All rights reserved. diff --git a/HXPhotoPicker/Category/NSDate+HXExtension.m b/HXPhotoPicker/Category/NSDate+HXExtension.m index 68cf504d..70ea90c8 100644 --- a/HXPhotoPicker/Category/NSDate+HXExtension.m +++ b/HXPhotoPicker/Category/NSDate+HXExtension.m @@ -1,6 +1,6 @@ // // NSDate+HXExtension.m -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2017/10/14. // Copyright © 2017年 洪欣. All rights reserved. diff --git a/HXPhotoPicker/Category/NSString+HXExtension.h b/HXPhotoPicker/Category/NSString+HXExtension.h index 2175d45b..3b3c2d1f 100644 --- a/HXPhotoPicker/Category/NSString+HXExtension.h +++ b/HXPhotoPicker/Category/NSString+HXExtension.h @@ -1,6 +1,6 @@ // // NSString+HXExtension.h -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2019/1/10. // Copyright © 2019年 洪欣. All rights reserved. diff --git a/HXPhotoPicker/Category/NSString+HXExtension.m b/HXPhotoPicker/Category/NSString+HXExtension.m index 915b55a5..a7a27dd3 100644 --- a/HXPhotoPicker/Category/NSString+HXExtension.m +++ b/HXPhotoPicker/Category/NSString+HXExtension.m @@ -1,6 +1,6 @@ // // NSString+HXExtension.m -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2019/1/10. // Copyright © 2019年 洪欣. All rights reserved. diff --git a/HXPhotoPicker/Category/NSTimer+HXExtension.h b/HXPhotoPicker/Category/NSTimer+HXExtension.h index 89fec9e6..e5521d23 100644 --- a/HXPhotoPicker/Category/NSTimer+HXExtension.h +++ b/HXPhotoPicker/Category/NSTimer+HXExtension.h @@ -1,6 +1,6 @@ // // NSTimer+HXExtension.h -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2019/1/3. // Copyright © 2019年 洪欣. All rights reserved. diff --git a/HXPhotoPicker/Category/NSTimer+HXExtension.m b/HXPhotoPicker/Category/NSTimer+HXExtension.m index 8776e088..1d581c3f 100644 --- a/HXPhotoPicker/Category/NSTimer+HXExtension.m +++ b/HXPhotoPicker/Category/NSTimer+HXExtension.m @@ -1,6 +1,6 @@ // // NSTimer+HXExtension.m -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2019/1/3. // Copyright © 2019年 洪欣. All rights reserved. diff --git a/HXPhotoPicker/Category/UIButton+HXExtension.h b/HXPhotoPicker/Category/UIButton+HXExtension.h index 5ca5cc50..7aa79a1f 100644 --- a/HXPhotoPicker/Category/UIButton+HXExtension.h +++ b/HXPhotoPicker/Category/UIButton+HXExtension.h @@ -1,6 +1,6 @@ // // UIButton+HXExtension.h -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 17/2/16. // Copyright © 2017年 洪欣. All rights reserved. diff --git a/HXPhotoPicker/Category/UIButton+HXExtension.m b/HXPhotoPicker/Category/UIButton+HXExtension.m index 1a575aab..56019b49 100644 --- a/HXPhotoPicker/Category/UIButton+HXExtension.m +++ b/HXPhotoPicker/Category/UIButton+HXExtension.m @@ -1,6 +1,6 @@ // // UIButton+HXExtension.m -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 17/2/16. // Copyright © 2017年 洪欣. All rights reserved. diff --git a/HXPhotoPicker/Category/UIColor+HXExtension.h b/HXPhotoPicker/Category/UIColor+HXExtension.h index a6a5449d..a16021a9 100644 --- a/HXPhotoPicker/Category/UIColor+HXExtension.h +++ b/HXPhotoPicker/Category/UIColor+HXExtension.h @@ -1,6 +1,6 @@ // // UIColor+HXExtension.h -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2019/12/3. // Copyright © 2019 洪欣. All rights reserved. diff --git a/HXPhotoPicker/Category/UIColor+HXExtension.m b/HXPhotoPicker/Category/UIColor+HXExtension.m index 382dd4d6..322a8cc9 100644 --- a/HXPhotoPicker/Category/UIColor+HXExtension.m +++ b/HXPhotoPicker/Category/UIColor+HXExtension.m @@ -1,6 +1,6 @@ // // UIColor+HXExtension.m -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2019/12/3. // Copyright © 2019 洪欣. All rights reserved. diff --git a/HXPhotoPicker/Category/UIFont+HXExtension.h b/HXPhotoPicker/Category/UIFont+HXExtension.h index 911afcb8..00645b19 100644 --- a/HXPhotoPicker/Category/UIFont+HXExtension.h +++ b/HXPhotoPicker/Category/UIFont+HXExtension.h @@ -1,6 +1,6 @@ // // UIFont+HXExtension.h -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2017/10/14. // Copyright © 2017年 洪欣. All rights reserved. diff --git a/HXPhotoPicker/Category/UIFont+HXExtension.m b/HXPhotoPicker/Category/UIFont+HXExtension.m index 4cdf7a94..b49efc23 100644 --- a/HXPhotoPicker/Category/UIFont+HXExtension.m +++ b/HXPhotoPicker/Category/UIFont+HXExtension.m @@ -1,6 +1,6 @@ // // UIFont+HXExtension.m -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2017/10/14. // Copyright © 2017年 洪欣. All rights reserved. diff --git a/HXPhotoPicker/Category/UIImage+HXExtension.h b/HXPhotoPicker/Category/UIImage+HXExtension.h index 9ce2e68d..85bbaeb1 100644 --- a/HXPhotoPicker/Category/UIImage+HXExtension.h +++ b/HXPhotoPicker/Category/UIImage+HXExtension.h @@ -1,6 +1,6 @@ // // UIImage+HXExtension.h -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 17/2/15. // Copyright © 2017年 洪欣. All rights reserved. diff --git a/HXPhotoPicker/Category/UIImage+HXExtension.m b/HXPhotoPicker/Category/UIImage+HXExtension.m index 8bb94735..d5a95e0a 100644 --- a/HXPhotoPicker/Category/UIImage+HXExtension.m +++ b/HXPhotoPicker/Category/UIImage+HXExtension.m @@ -1,6 +1,6 @@ // // UIImage+HXExtension.m -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 17/2/15. // Copyright © 2017年 洪欣. All rights reserved. diff --git a/HXPhotoPicker/Category/UIImageView+HXExtension.h b/HXPhotoPicker/Category/UIImageView+HXExtension.h index d86b2dd9..5dcfc179 100644 --- a/HXPhotoPicker/Category/UIImageView+HXExtension.h +++ b/HXPhotoPicker/Category/UIImageView+HXExtension.h @@ -1,6 +1,6 @@ // // UIImageView+HXExtension.h -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2018/2/14. // Copyright © 2018年 洪欣. All rights reserved. diff --git a/HXPhotoPicker/Category/UIImageView+HXExtension.m b/HXPhotoPicker/Category/UIImageView+HXExtension.m index 54c482ce..3d1c0750 100644 --- a/HXPhotoPicker/Category/UIImageView+HXExtension.m +++ b/HXPhotoPicker/Category/UIImageView+HXExtension.m @@ -1,6 +1,6 @@ // // UIImageView+HXExtension.m -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2018/2/14. // Copyright © 2018年 洪欣. All rights reserved. diff --git a/HXPhotoPicker/Category/UILabel+HXExtension.h b/HXPhotoPicker/Category/UILabel+HXExtension.h index 43bceb68..f0f63f6e 100644 --- a/HXPhotoPicker/Category/UILabel+HXExtension.h +++ b/HXPhotoPicker/Category/UILabel+HXExtension.h @@ -1,6 +1,6 @@ // // UILabel+HXExtension.h -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2018/12/28. // Copyright © 2018年 洪欣. All rights reserved. diff --git a/HXPhotoPicker/Category/UILabel+HXExtension.m b/HXPhotoPicker/Category/UILabel+HXExtension.m index c4d9a632..e9e519d2 100644 --- a/HXPhotoPicker/Category/UILabel+HXExtension.m +++ b/HXPhotoPicker/Category/UILabel+HXExtension.m @@ -1,6 +1,6 @@ // // UILabel+HXExtension.m -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2018/12/28. // Copyright © 2018年 洪欣. All rights reserved. diff --git a/HXPhotoPicker/Category/UIView+HXExtension.h b/HXPhotoPicker/Category/UIView+HXExtension.h index 3a17a087..50d0832d 100644 --- a/HXPhotoPicker/Category/UIView+HXExtension.h +++ b/HXPhotoPicker/Category/UIView+HXExtension.h @@ -1,6 +1,6 @@ // // UIView+HXExtension.h -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 17/2/16. // Copyright © 2017年 洪欣. All rights reserved. diff --git a/HXPhotoPicker/Category/UIView+HXExtension.m b/HXPhotoPicker/Category/UIView+HXExtension.m index d19752ba..21773ffd 100644 --- a/HXPhotoPicker/Category/UIView+HXExtension.m +++ b/HXPhotoPicker/Category/UIView+HXExtension.m @@ -1,6 +1,6 @@ // // UIView+HXExtension.m -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 17/2/16. // Copyright © 2017年 洪欣. All rights reserved. diff --git a/HXPhotoPicker/Category/UIViewController+HXExtension.h b/HXPhotoPicker/Category/UIViewController+HXExtension.h index 8cba88fb..933ce5d2 100644 --- a/HXPhotoPicker/Category/UIViewController+HXExtension.h +++ b/HXPhotoPicker/Category/UIViewController+HXExtension.h @@ -1,6 +1,6 @@ // // UIViewController+HXExtension.h -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2017/11/24. // Copyright © 2017年 洪欣. All rights reserved. diff --git a/HXPhotoPicker/Category/UIViewController+HXExtension.m b/HXPhotoPicker/Category/UIViewController+HXExtension.m index e1d337f2..4dd5f997 100644 --- a/HXPhotoPicker/Category/UIViewController+HXExtension.m +++ b/HXPhotoPicker/Category/UIViewController+HXExtension.m @@ -1,6 +1,6 @@ // // UIViewController+HXExtension.m -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2017/11/24. // Copyright © 2017年 洪欣. All rights reserved. diff --git a/HXPhotoPicker/Controller/HXAlbumListViewController.h b/HXPhotoPicker/Controller/HXAlbumListViewController.h index 2aae6cad..e1e0438c 100644 --- a/HXPhotoPicker/Controller/HXAlbumListViewController.h +++ b/HXPhotoPicker/Controller/HXAlbumListViewController.h @@ -1,6 +1,6 @@ // // HXDateAlbumViewController.h -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2017/10/14. // Copyright © 2017年 洪欣. All rights reserved. diff --git a/HXPhotoPicker/Controller/HXAlbumListViewController.m b/HXPhotoPicker/Controller/HXAlbumListViewController.m index 2add8855..bd6ab9ea 100644 --- a/HXPhotoPicker/Controller/HXAlbumListViewController.m +++ b/HXPhotoPicker/Controller/HXAlbumListViewController.m @@ -1,6 +1,6 @@ // // HXDateAlbumViewController.m -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2017/10/14. // Copyright © 2017年 洪欣. All rights reserved. diff --git a/HXPhotoPicker/Controller/HXCustomCameraController.h b/HXPhotoPicker/Controller/HXCustomCameraController.h index e274033a..794299f1 100644 --- a/HXPhotoPicker/Controller/HXCustomCameraController.h +++ b/HXPhotoPicker/Controller/HXCustomCameraController.h @@ -1,6 +1,6 @@ // // HXCustomCameraController.h -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2017/10/31. // Copyright © 2017年 洪欣. All rights reserved. diff --git a/HXPhotoPicker/Controller/HXCustomCameraController.m b/HXPhotoPicker/Controller/HXCustomCameraController.m index 37d37f02..01599c1b 100644 --- a/HXPhotoPicker/Controller/HXCustomCameraController.m +++ b/HXPhotoPicker/Controller/HXCustomCameraController.m @@ -1,6 +1,6 @@ // // HXCustomCameraController.m -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2017/10/31. // Copyright © 2017年 洪欣. All rights reserved. diff --git a/HXPhotoPicker/Controller/HXCustomCameraViewController.h b/HXPhotoPicker/Controller/HXCustomCameraViewController.h index f3b85926..2ec1288b 100644 --- a/HXPhotoPicker/Controller/HXCustomCameraViewController.h +++ b/HXPhotoPicker/Controller/HXCustomCameraViewController.h @@ -1,6 +1,6 @@ // // HXCustomCameraViewController.h -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2017/9/30. // Copyright © 2017年 洪欣. All rights reserved. diff --git a/HXPhotoPicker/Controller/HXCustomCameraViewController.m b/HXPhotoPicker/Controller/HXCustomCameraViewController.m index 5c7806bd..9edcc8db 100644 --- a/HXPhotoPicker/Controller/HXCustomCameraViewController.m +++ b/HXPhotoPicker/Controller/HXCustomCameraViewController.m @@ -1,6 +1,6 @@ // // HXCustomCameraViewController.m -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2017/9/30. // Copyright © 2017年 洪欣. All rights reserved. diff --git a/HXPhotoPicker/Controller/HXCustomNavigationController.h b/HXPhotoPicker/Controller/HXCustomNavigationController.h index f0fdfff3..ab88ad46 100644 --- a/HXPhotoPicker/Controller/HXCustomNavigationController.h +++ b/HXPhotoPicker/Controller/HXCustomNavigationController.h @@ -1,6 +1,6 @@ // // HXCustomNavigationController.h -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2017/10/31. // Copyright © 2017年 洪欣. All rights reserved. diff --git a/HXPhotoPicker/Controller/HXCustomNavigationController.m b/HXPhotoPicker/Controller/HXCustomNavigationController.m index 9a0f8e4e..cd6ac8a9 100644 --- a/HXPhotoPicker/Controller/HXCustomNavigationController.m +++ b/HXPhotoPicker/Controller/HXCustomNavigationController.m @@ -1,6 +1,6 @@ // // HXCustomNavigationController.m -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2017/10/31. // Copyright © 2017年 洪欣. All rights reserved. diff --git a/HXPhotoPicker/Controller/HXPhoto3DTouchViewController.h b/HXPhotoPicker/Controller/HXPhoto3DTouchViewController.h index 8b3bd614..10d2bb64 100644 --- a/HXPhotoPicker/Controller/HXPhoto3DTouchViewController.h +++ b/HXPhotoPicker/Controller/HXPhoto3DTouchViewController.h @@ -1,6 +1,6 @@ // // HXPhoto3DTouchViewController.h -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2017/9/25. // Copyright © 2017年 洪欣. All rights reserved. diff --git a/HXPhotoPicker/Controller/HXPhoto3DTouchViewController.m b/HXPhotoPicker/Controller/HXPhoto3DTouchViewController.m index fb3b334a..57b5e1b4 100644 --- a/HXPhotoPicker/Controller/HXPhoto3DTouchViewController.m +++ b/HXPhotoPicker/Controller/HXPhoto3DTouchViewController.m @@ -1,6 +1,6 @@ // // HXPhoto3DTouchViewController.m -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2017/9/25. // Copyright © 2017年 洪欣. All rights reserved. diff --git a/HXPhotoPicker/Controller/HXPhotoEditViewController.h b/HXPhotoPicker/Controller/HXPhotoEditViewController.h index 074574ac..dac86b8a 100644 --- a/HXPhotoPicker/Controller/HXPhotoEditViewController.h +++ b/HXPhotoPicker/Controller/HXPhotoEditViewController.h @@ -1,6 +1,6 @@ // // HXPhotoEditViewController.h -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2017/10/27. // Copyright © 2017年 洪欣. All rights reserved. diff --git a/HXPhotoPicker/Controller/HXPhotoEditViewController.m b/HXPhotoPicker/Controller/HXPhotoEditViewController.m index ace6a9e3..a861ff4d 100644 --- a/HXPhotoPicker/Controller/HXPhotoEditViewController.m +++ b/HXPhotoPicker/Controller/HXPhotoEditViewController.m @@ -1,6 +1,6 @@ // // HXPhotoEditViewController.m -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2017/10/27. // Copyright © 2017年 洪欣. All rights reserved. diff --git a/HXPhotoPicker/Controller/HXPhotoPreviewViewController.h b/HXPhotoPicker/Controller/HXPhotoPreviewViewController.h index da83450f..5e148910 100644 --- a/HXPhotoPicker/Controller/HXPhotoPreviewViewController.h +++ b/HXPhotoPicker/Controller/HXPhotoPreviewViewController.h @@ -1,6 +1,6 @@ // // HXPhotoPreviewViewController.h -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2017/10/14. // Copyright © 2017年 洪欣. All rights reserved. diff --git a/HXPhotoPicker/Controller/HXPhotoPreviewViewController.m b/HXPhotoPicker/Controller/HXPhotoPreviewViewController.m index f972ee59..791b00a4 100644 --- a/HXPhotoPicker/Controller/HXPhotoPreviewViewController.m +++ b/HXPhotoPicker/Controller/HXPhotoPreviewViewController.m @@ -1,6 +1,6 @@ // // HXPhotoPreviewViewController.m -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2017/10/14. // Copyright © 2017年 洪欣. All rights reserved. @@ -723,7 +723,7 @@ - (HXPhotoPreviewViewCell *)currentPreviewCell:(HXPhotoModel *)model { } - (void)changeStatusBarWithHidden:(BOOL)hidden { self.statusBarShouldBeHidden = hidden; - [self preferredStatusBarUpdateAnimation]; +// [self preferredStatusBarUpdateAnimation]; } - (void)setSubviewAlphaAnimate:(BOOL)animete duration:(NSTimeInterval)duration { if (self.exteriorPreviewStyle == HXPhotoViewPreViewShowStyleDark) { diff --git a/HXPhotoPicker/Controller/HXPhotoViewController.h b/HXPhotoPicker/Controller/HXPhotoViewController.h index 120efd4f..9c702f54 100644 --- a/HXPhotoPicker/Controller/HXPhotoViewController.h +++ b/HXPhotoPicker/Controller/HXPhotoViewController.h @@ -1,6 +1,6 @@ // // HXPhotoViewController.h -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2017/10/14. // Copyright © 2017年 洪欣. All rights reserved. diff --git a/HXPhotoPicker/Controller/HXPhotoViewController.m b/HXPhotoPicker/Controller/HXPhotoViewController.m index 7342df17..6e2d7e5d 100644 --- a/HXPhotoPicker/Controller/HXPhotoViewController.m +++ b/HXPhotoPicker/Controller/HXPhotoViewController.m @@ -1,6 +1,6 @@ // // HXPhotoViewController.m -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2017/10/14. // Copyright © 2017年 洪欣. All rights reserved. diff --git a/HXPhotoPicker/Controller/HXVideoEditViewController.h b/HXPhotoPicker/Controller/HXVideoEditViewController.h index 319e4649..d867f7ba 100644 --- a/HXPhotoPicker/Controller/HXVideoEditViewController.h +++ b/HXPhotoPicker/Controller/HXVideoEditViewController.h @@ -1,6 +1,6 @@ // // HXVideoEditViewController.h -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2017/12/31. // Copyright © 2017年 洪欣. All rights reserved. diff --git a/HXPhotoPicker/Controller/HXVideoEditViewController.m b/HXPhotoPicker/Controller/HXVideoEditViewController.m index 77617a03..c44ea365 100644 --- a/HXPhotoPicker/Controller/HXVideoEditViewController.m +++ b/HXPhotoPicker/Controller/HXVideoEditViewController.m @@ -1,6 +1,6 @@ // // HXVideoEditViewController.m -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2017/12/31. // Copyright © 2017年 洪欣. All rights reserved. diff --git a/HXPhotoPicker/HXAssetManager.h b/HXPhotoPicker/HXAssetManager.h index 41099375..16e91934 100644 --- a/HXPhotoPicker/HXAssetManager.h +++ b/HXPhotoPicker/HXAssetManager.h @@ -1,6 +1,6 @@ // // HXAssetManager.h -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2020/11/5. // Copyright © 2020 洪欣. All rights reserved. diff --git a/HXPhotoPicker/HXAssetManager.m b/HXPhotoPicker/HXAssetManager.m index caec03cb..852da24d 100644 --- a/HXPhotoPicker/HXAssetManager.m +++ b/HXPhotoPicker/HXAssetManager.m @@ -1,6 +1,6 @@ // // HXAssetManager.m -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2020/11/5. // Copyright © 2020 洪欣. All rights reserved. diff --git a/HXPhotoPicker/HXPhotoCommon.h b/HXPhotoPicker/HXPhotoCommon.h index 6e7c2b87..4e7f5225 100644 --- a/HXPhotoPicker/HXPhotoCommon.h +++ b/HXPhotoPicker/HXPhotoCommon.h @@ -1,6 +1,6 @@ // // HXPhotoCommon.h -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2019/1/8. // Copyright © 2019年 洪欣. All rights reserved. diff --git a/HXPhotoPicker/HXPhotoCommon.m b/HXPhotoPicker/HXPhotoCommon.m index 25e63d43..aac20524 100644 --- a/HXPhotoPicker/HXPhotoCommon.m +++ b/HXPhotoPicker/HXPhotoCommon.m @@ -1,6 +1,6 @@ // // HXPhotoCommon.m -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2019/1/8. // Copyright © 2019年 洪欣. All rights reserved. diff --git a/HXPhotoPicker/HXPhotoConfiguration.h b/HXPhotoPicker/HXPhotoConfiguration.h index 42a197a8..48d8d37b 100644 --- a/HXPhotoPicker/HXPhotoConfiguration.h +++ b/HXPhotoPicker/HXPhotoConfiguration.h @@ -1,6 +1,6 @@ // // HXPhotoConfiguration.h -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2017/11/21. // Copyright © 2017年 洪欣. All rights reserved. diff --git a/HXPhotoPicker/HXPhotoConfiguration.m b/HXPhotoPicker/HXPhotoConfiguration.m index da5bb395..4644eea1 100644 --- a/HXPhotoPicker/HXPhotoConfiguration.m +++ b/HXPhotoPicker/HXPhotoConfiguration.m @@ -1,6 +1,6 @@ // // HXPhotoConfiguration.m -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2017/11/21. // Copyright © 2017年 洪欣. All rights reserved. diff --git a/HXPhotoPicker/HXPhotoDefine.h b/HXPhotoPicker/HXPhotoDefine.h index dc49e5ea..58402b42 100644 --- a/HXPhotoPicker/HXPhotoDefine.h +++ b/HXPhotoPicker/HXPhotoDefine.h @@ -1,6 +1,6 @@ // // HXPhotoDefine.h -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2017/11/24. // Copyright © 2017年 洪欣. All rights reserved. @@ -110,12 +110,15 @@ #define HX_IS_IPhoneX_All (HX_Is_iPhoneX || HX_Is_iPhoneXR || HX_Is_iPhoneXS || HX_Is_iPhoneXS_MAX || HX_IS_IPHONEX || HX_Is_iPhoneTwelveMini || HX_Is_iPhoneTwelvePro || HX_Is_iPhoneTwelveProMax) // 导航栏 + 状态栏 的高度 -#define hxNavigationBarHeight (HX_IS_IPhoneX_All ? 88 : 64) +#define hxNavigationBarHeight (44 + HXStatusBarHeight) #define hxTopMargin (HX_IS_IPhoneX_All ? 44 : 0) #define hxBottomMargin (HX_IS_IPhoneX_All ? 34 : 0) +#define HXStatusBarHeight [HXPhotoTools getStatusBarHeight] #define HX_IOS14_Later ([UIDevice currentDevice].systemVersion.floatValue >= 14.0f) +#define HX_IOS13_Later ([UIDevice currentDevice].systemVersion.floatValue >= 13.0f) + #define HX_IOS11_Later ([UIDevice currentDevice].systemVersion.floatValue >= 11.0f) #define HX_IOS11_Earlier ([UIDevice currentDevice].systemVersion.floatValue < 11.0f) diff --git a/HXPhotoPicker/HXPhotoEdit/View/HXPhotoEditGraffitiColorSizeView.h b/HXPhotoPicker/HXPhotoEdit/View/HXPhotoEditGraffitiColorSizeView.h index c0995a24..9d77b50b 100644 --- a/HXPhotoPicker/HXPhotoEdit/View/HXPhotoEditGraffitiColorSizeView.h +++ b/HXPhotoPicker/HXPhotoEdit/View/HXPhotoEditGraffitiColorSizeView.h @@ -1,6 +1,6 @@ // // HXPhotoEditGraffitiColorSizeView.h -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2020/8/14. // Copyright © 2020 洪欣. All rights reserved. diff --git a/HXPhotoPicker/HXPhotoEdit/View/HXPhotoEditGraffitiColorSizeView.m b/HXPhotoPicker/HXPhotoEdit/View/HXPhotoEditGraffitiColorSizeView.m index 59d20232..02c985b7 100644 --- a/HXPhotoPicker/HXPhotoEdit/View/HXPhotoEditGraffitiColorSizeView.m +++ b/HXPhotoPicker/HXPhotoEdit/View/HXPhotoEditGraffitiColorSizeView.m @@ -1,6 +1,6 @@ // // HXPhotoEditGraffitiColorSizeView.m -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2020/8/14. // Copyright © 2020 洪欣. All rights reserved. diff --git a/HXPhotoPicker/HXPhotoEdit/View/HXPhotoEditTextView.m b/HXPhotoPicker/HXPhotoEdit/View/HXPhotoEditTextView.m index bc735ae9..f1bdb1f0 100644 --- a/HXPhotoPicker/HXPhotoEdit/View/HXPhotoEditTextView.m +++ b/HXPhotoPicker/HXPhotoEdit/View/HXPhotoEditTextView.m @@ -15,6 +15,7 @@ #import "HXPhotoEditConfiguration.h" #import "NSBundle+HXPhotoPicker.h" #import "UIFont+HXExtension.h" +#import "HXPhotoTools.h" #define HXEditTextBlankWidth 22 #define HXEditTextRadius 8.f diff --git a/HXPhotoPicker/HXPhotoManager.h b/HXPhotoPicker/HXPhotoManager.h index ddc7e31d..8898784b 100644 --- a/HXPhotoPicker/HXPhotoManager.h +++ b/HXPhotoPicker/HXPhotoManager.h @@ -1,6 +1,6 @@ // // HX_PhotoManager.h -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 17/2/8. // Copyright © 2017年 洪欣. All rights reserved. diff --git a/HXPhotoPicker/HXPhotoManager.m b/HXPhotoPicker/HXPhotoManager.m index 750ee5c1..1fcb9d92 100644 --- a/HXPhotoPicker/HXPhotoManager.m +++ b/HXPhotoPicker/HXPhotoManager.m @@ -1,6 +1,6 @@ // // HX_PhotoManager.m -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 17/2/8. // Copyright © 2017年 洪欣. All rights reserved. diff --git a/HXPhotoPicker/HXPhotoPicker.h b/HXPhotoPicker/HXPhotoPicker.h index 2e06f132..0e4eed0b 100644 --- a/HXPhotoPicker/HXPhotoPicker.h +++ b/HXPhotoPicker/HXPhotoPicker.h @@ -1,6 +1,6 @@ // // HXPhotoPicker.h -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2017/11/24. // Copyright © 2017年 洪欣. All rights reserved. diff --git a/HXPhotoPicker/HXPhotoTools.h b/HXPhotoPicker/HXPhotoTools.h index 7cc2fe60..c0253e6f 100644 --- a/HXPhotoPicker/HXPhotoTools.h +++ b/HXPhotoPicker/HXPhotoTools.h @@ -1,6 +1,6 @@ // // HXPhotoTools.h -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 17/2/8. // Copyright © 2017年 洪欣. All rights reserved. @@ -142,4 +142,6 @@ /// 删除下载的网络视频缓存文件 + (void)deleteNetWorkVideoFile; + ++ (CGFloat)getStatusBarHeight; @end diff --git a/HXPhotoPicker/HXPhotoTools.m b/HXPhotoPicker/HXPhotoTools.m index 0ece417c..d9f01db6 100644 --- a/HXPhotoPicker/HXPhotoTools.m +++ b/HXPhotoPicker/HXPhotoTools.m @@ -1,6 +1,6 @@ // // HXPhotoTools.m -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 17/2/8. // Copyright © 2017年 洪欣. All rights reserved. @@ -1015,4 +1015,17 @@ + (void)deleteLivePhotoCachesFile { + (void)deleteNetWorkVideoFile { [[NSFileManager defaultManager] removeItemAtPath:HXPhotoPickerCachesDownloadPath error:nil]; } + + ++ (CGFloat)getStatusBarHeight { + CGFloat statusBarHeight = 0; + if (@available(iOS 13.0, *)) { + UIStatusBarManager *statusBarManager = [UIApplication sharedApplication].windows.firstObject.windowScene.statusBarManager; + statusBarHeight = statusBarManager.statusBarFrame.size.height; + } + else { + statusBarHeight = [UIApplication sharedApplication].statusBarFrame.size.height; + } + return statusBarHeight; +} @end diff --git a/HXPhotoPicker/HXPhotoTypes.h b/HXPhotoPicker/HXPhotoTypes.h index 69797c8f..a7d04228 100644 --- a/HXPhotoPicker/HXPhotoTypes.h +++ b/HXPhotoPicker/HXPhotoTypes.h @@ -1,6 +1,6 @@ // // HXPhotoTypes.h -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2020/8/3. // Copyright © 2020 洪欣. All rights reserved. diff --git a/HXPhotoPicker/Model/HXAlbumModel.h b/HXPhotoPicker/Model/HXAlbumModel.h index 81e2ebed..fc9b01ba 100644 --- a/HXPhotoPicker/Model/HXAlbumModel.h +++ b/HXPhotoPicker/Model/HXAlbumModel.h @@ -1,6 +1,6 @@ // // HXAlbumModel.h -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 17/2/8. // Copyright © 2017年 洪欣. All rights reserved. diff --git a/HXPhotoPicker/Model/HXAlbumModel.m b/HXPhotoPicker/Model/HXAlbumModel.m index cb5f4df4..d54fcfa7 100644 --- a/HXPhotoPicker/Model/HXAlbumModel.m +++ b/HXPhotoPicker/Model/HXAlbumModel.m @@ -1,6 +1,6 @@ // // HXAlbumModel.m -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 17/2/8. // Copyright © 2017年 洪欣. All rights reserved. diff --git a/HXPhotoPicker/Model/HXCustomAssetModel.h b/HXPhotoPicker/Model/HXCustomAssetModel.h index 9e73d1e0..c574edc1 100644 --- a/HXPhotoPicker/Model/HXCustomAssetModel.h +++ b/HXPhotoPicker/Model/HXCustomAssetModel.h @@ -1,6 +1,6 @@ // // HXCustomAssetModel.h -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2018/7/25. // Copyright © 2018年 洪欣. All rights reserved. diff --git a/HXPhotoPicker/Model/HXCustomAssetModel.m b/HXPhotoPicker/Model/HXCustomAssetModel.m index 9fbd265f..0f631156 100644 --- a/HXPhotoPicker/Model/HXCustomAssetModel.m +++ b/HXPhotoPicker/Model/HXCustomAssetModel.m @@ -1,6 +1,6 @@ // // HXCustomAssetModel.m -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2018/7/25. // Copyright © 2018年 洪欣. All rights reserved. diff --git a/HXPhotoPicker/Model/HXPhotoModel.h b/HXPhotoPicker/Model/HXPhotoModel.h index b6e07c0d..4351c727 100644 --- a/HXPhotoPicker/Model/HXPhotoModel.h +++ b/HXPhotoPicker/Model/HXPhotoModel.h @@ -1,6 +1,6 @@ // // HXPhotoModel.h -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 17/2/8. // Copyright © 2017年 洪欣. All rights reserved. diff --git a/HXPhotoPicker/Model/HXPhotoModel.m b/HXPhotoPicker/Model/HXPhotoModel.m index 8bca371f..274912be 100644 --- a/HXPhotoPicker/Model/HXPhotoModel.m +++ b/HXPhotoPicker/Model/HXPhotoModel.m @@ -1,6 +1,6 @@ // // HXPhotoModel.m -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 17/2/8. // Copyright © 2017年 洪欣. All rights reserved. diff --git a/HXPhotoPicker/Model/HXPhotoViewCellCustomProtocol.h b/HXPhotoPicker/Model/HXPhotoViewCellCustomProtocol.h index 48388515..859accb7 100644 --- a/HXPhotoPicker/Model/HXPhotoViewCellCustomProtocol.h +++ b/HXPhotoPicker/Model/HXPhotoViewCellCustomProtocol.h @@ -1,6 +1,6 @@ // // HXPhotoViewCellCustomProtocol.h -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2020/7/21. // Copyright © 2020 洪欣. All rights reserved. diff --git a/HXPhotoPicker/Model/HXPhotoViewProtocol.h b/HXPhotoPicker/Model/HXPhotoViewProtocol.h index b46ead07..4d41e6a3 100644 --- a/HXPhotoPicker/Model/HXPhotoViewProtocol.h +++ b/HXPhotoPicker/Model/HXPhotoViewProtocol.h @@ -1,6 +1,6 @@ // // HXPhotoViewProtocol.h -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2020/8/1. // Copyright © 2020 洪欣. All rights reserved. diff --git a/HXPhotoPicker/TransitionAnimation/HXPhotoEditTransition.h b/HXPhotoPicker/TransitionAnimation/HXPhotoEditTransition.h index d9350072..aaa49a63 100644 --- a/HXPhotoPicker/TransitionAnimation/HXPhotoEditTransition.h +++ b/HXPhotoPicker/TransitionAnimation/HXPhotoEditTransition.h @@ -1,6 +1,6 @@ // // HXPhotoEditTransition.h -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2019/1/20. // Copyright © 2019年 洪欣. All rights reserved. diff --git a/HXPhotoPicker/TransitionAnimation/HXPhotoEditTransition.m b/HXPhotoPicker/TransitionAnimation/HXPhotoEditTransition.m index b9d3c33c..f1033d35 100644 --- a/HXPhotoPicker/TransitionAnimation/HXPhotoEditTransition.m +++ b/HXPhotoPicker/TransitionAnimation/HXPhotoEditTransition.m @@ -1,6 +1,6 @@ // // HXPhotoEditTransition.m -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2019/1/20. // Copyright © 2019年 洪欣. All rights reserved. diff --git a/HXPhotoPicker/TransitionAnimation/HXPhotoInteractiveTransition.h b/HXPhotoPicker/TransitionAnimation/HXPhotoInteractiveTransition.h index 693f5b33..f4d24844 100644 --- a/HXPhotoPicker/TransitionAnimation/HXPhotoInteractiveTransition.h +++ b/HXPhotoPicker/TransitionAnimation/HXPhotoInteractiveTransition.h @@ -1,6 +1,6 @@ // // HXPhotoInteractiveTransition.h -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2017/10/28. // Copyright © 2017年 洪欣. All rights reserved. diff --git a/HXPhotoPicker/TransitionAnimation/HXPhotoInteractiveTransition.m b/HXPhotoPicker/TransitionAnimation/HXPhotoInteractiveTransition.m index 16d6f018..710fab88 100644 --- a/HXPhotoPicker/TransitionAnimation/HXPhotoInteractiveTransition.m +++ b/HXPhotoPicker/TransitionAnimation/HXPhotoInteractiveTransition.m @@ -1,6 +1,6 @@ // // HXPhotoInteractiveTransition.m -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2017/10/28. // Copyright © 2017年 洪欣. All rights reserved. @@ -178,9 +178,6 @@ - (void)beginInterPercent { HXPhotoPreviewViewCell *fromCell = [fromVC currentPreviewCell:model]; HXPhotoViewCell *toCell = [toVC currentPreviewCell:model]; self.fromCell = fromCell; - if (fromCell.previewContentView.frame.origin.x != 0) { - NSSLog(@"11111"); - } self.scrollViewZoomScale = [self.fromCell getScrollViewZoomScale]; self.scrollViewContentSize = [self.fromCell getScrollViewContentSize]; self.scrollViewContentOffset = [self.fromCell getScrollViewContentOffset]; @@ -190,10 +187,6 @@ - (void)beginInterPercent { self.contentView = fromCell.previewContentView; self.imageInitialFrame = fromCell.previewContentView.frame; tempImageViewFrame = [fromCell.previewContentView convertRect:fromCell.previewContentView.bounds toView:containerView]; - if (tempImageViewFrame.origin.x != 0) { - NSSLog(@"11111"); - } - NSSLog(@"%@", NSStringFromCGRect(tempImageViewFrame)); if (!toCell) { [toVC scrollToModel:model]; toCell = [toVC currentPreviewCell:model]; diff --git a/HXPhotoPicker/TransitionAnimation/HXPhotoPersentInteractiveTransition.h b/HXPhotoPicker/TransitionAnimation/HXPhotoPersentInteractiveTransition.h index 705b8325..cf0c3d01 100644 --- a/HXPhotoPicker/TransitionAnimation/HXPhotoPersentInteractiveTransition.h +++ b/HXPhotoPicker/TransitionAnimation/HXPhotoPersentInteractiveTransition.h @@ -1,6 +1,6 @@ // // HXPhotoPersentInteractiveTransition.h -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2018/9/8. // Copyright © 2018年 洪欣. All rights reserved. diff --git a/HXPhotoPicker/TransitionAnimation/HXPhotoPersentInteractiveTransition.m b/HXPhotoPicker/TransitionAnimation/HXPhotoPersentInteractiveTransition.m index bf51e6d0..3fad84fe 100644 --- a/HXPhotoPicker/TransitionAnimation/HXPhotoPersentInteractiveTransition.m +++ b/HXPhotoPicker/TransitionAnimation/HXPhotoPersentInteractiveTransition.m @@ -1,6 +1,6 @@ // // HXPhotoPersentInteractiveTransition.m -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2018/9/8. // Copyright © 2018年 洪欣. All rights reserved. diff --git a/HXPhotoPicker/TransitionAnimation/HXPhotoViewPresentTransition.h b/HXPhotoPicker/TransitionAnimation/HXPhotoViewPresentTransition.h index 1e48deb5..c5b003a5 100644 --- a/HXPhotoPicker/TransitionAnimation/HXPhotoViewPresentTransition.h +++ b/HXPhotoPicker/TransitionAnimation/HXPhotoViewPresentTransition.h @@ -1,6 +1,6 @@ // // HXPhotoViewPresentTransition.h -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2017/10/28. // Copyright © 2017年 洪欣. All rights reserved. diff --git a/HXPhotoPicker/TransitionAnimation/HXPhotoViewPresentTransition.m b/HXPhotoPicker/TransitionAnimation/HXPhotoViewPresentTransition.m index 99e11447..d39ed54b 100644 --- a/HXPhotoPicker/TransitionAnimation/HXPhotoViewPresentTransition.m +++ b/HXPhotoPicker/TransitionAnimation/HXPhotoViewPresentTransition.m @@ -1,6 +1,6 @@ // // HXPhotoViewPresentTransition.m -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2017/10/28. // Copyright © 2017年 洪欣. All rights reserved. diff --git a/HXPhotoPicker/TransitionAnimation/HXPhotoViewTransition.h b/HXPhotoPicker/TransitionAnimation/HXPhotoViewTransition.h index 167a0f2c..3b7c29a4 100644 --- a/HXPhotoPicker/TransitionAnimation/HXPhotoViewTransition.h +++ b/HXPhotoPicker/TransitionAnimation/HXPhotoViewTransition.h @@ -1,6 +1,6 @@ // // HXPhotoViewTransition.h -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2017/10/27. // Copyright © 2017年 洪欣. All rights reserved. diff --git a/HXPhotoPicker/TransitionAnimation/HXPhotoViewTransition.m b/HXPhotoPicker/TransitionAnimation/HXPhotoViewTransition.m index b62e8266..18144509 100644 --- a/HXPhotoPicker/TransitionAnimation/HXPhotoViewTransition.m +++ b/HXPhotoPicker/TransitionAnimation/HXPhotoViewTransition.m @@ -1,6 +1,6 @@ // // HXPhotoViewTransition.m -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2017/10/27. // Copyright © 2017年 洪欣. All rights reserved. diff --git a/HXPhotoPicker/View/HXAlbumlistView.h b/HXPhotoPicker/View/HXAlbumlistView.h index 9abb2038..753bfa9a 100644 --- a/HXPhotoPicker/View/HXAlbumlistView.h +++ b/HXPhotoPicker/View/HXAlbumlistView.h @@ -1,6 +1,6 @@ // // HXAlbumlistView.h -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2018/9/26. // Copyright © 2018年 洪欣. All rights reserved. diff --git a/HXPhotoPicker/View/HXAlbumlistView.m b/HXPhotoPicker/View/HXAlbumlistView.m index fd10ac91..bb00dafb 100644 --- a/HXPhotoPicker/View/HXAlbumlistView.m +++ b/HXPhotoPicker/View/HXAlbumlistView.m @@ -1,6 +1,6 @@ // // HXAlbumlistView.m -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2018/9/26. // Copyright © 2018年 洪欣. All rights reserved. diff --git a/HXPhotoPicker/View/HXCameraBottomView.h b/HXPhotoPicker/View/HXCameraBottomView.h index 2ad94f0c..cdbe30da 100644 --- a/HXPhotoPicker/View/HXCameraBottomView.h +++ b/HXPhotoPicker/View/HXCameraBottomView.h @@ -1,6 +1,6 @@ // // HXCameraBottomView.h -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2020/7/17. // Copyright © 2020 洪欣. All rights reserved. diff --git a/HXPhotoPicker/View/HXCameraBottomView.m b/HXPhotoPicker/View/HXCameraBottomView.m index d97e5a0d..8ef5de16 100644 --- a/HXPhotoPicker/View/HXCameraBottomView.m +++ b/HXPhotoPicker/View/HXCameraBottomView.m @@ -1,6 +1,6 @@ // // HXCameraBottomView.m -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2020/7/17. // Copyright © 2020 洪欣. All rights reserved. diff --git a/HXPhotoPicker/View/HXCircleProgressView.h b/HXPhotoPicker/View/HXCircleProgressView.h index 111aa8dc..93d98149 100644 --- a/HXPhotoPicker/View/HXCircleProgressView.h +++ b/HXPhotoPicker/View/HXCircleProgressView.h @@ -1,6 +1,6 @@ // // HXCircleProgressView.h -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2017/5/18. // Copyright © 2017年 洪欣. All rights reserved. diff --git a/HXPhotoPicker/View/HXCircleProgressView.m b/HXPhotoPicker/View/HXCircleProgressView.m index e2bb9bc0..433c06d8 100644 --- a/HXPhotoPicker/View/HXCircleProgressView.m +++ b/HXPhotoPicker/View/HXCircleProgressView.m @@ -1,6 +1,6 @@ // // HXCircleProgressView.m -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2017/5/18. // Copyright © 2017年 洪欣. All rights reserved. diff --git a/HXPhotoPicker/View/HXCollectionView.h b/HXPhotoPicker/View/HXCollectionView.h index 2043624f..52a85275 100644 --- a/HXPhotoPicker/View/HXCollectionView.h +++ b/HXPhotoPicker/View/HXCollectionView.h @@ -1,6 +1,6 @@ // // HXCollectionView.h -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 17/2/17. // Copyright © 2017年 洪欣. All rights reserved. diff --git a/HXPhotoPicker/View/HXCollectionView.m b/HXPhotoPicker/View/HXCollectionView.m index 47d6c4f6..002aec83 100644 --- a/HXPhotoPicker/View/HXCollectionView.m +++ b/HXPhotoPicker/View/HXCollectionView.m @@ -1,6 +1,6 @@ // // HXCollectionView.m -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 17/2/17. // Copyright © 2017年 洪欣. All rights reserved. diff --git a/HXPhotoPicker/View/HXCustomCollectionReusableView.h b/HXPhotoPicker/View/HXCustomCollectionReusableView.h index d33ab319..52741a40 100644 --- a/HXPhotoPicker/View/HXCustomCollectionReusableView.h +++ b/HXPhotoPicker/View/HXCustomCollectionReusableView.h @@ -1,6 +1,6 @@ // // HXCustomCollectionReusableView.h -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2017/11/8. // Copyright © 2017年 洪欣. All rights reserved. diff --git a/HXPhotoPicker/View/HXCustomCollectionReusableView.m b/HXPhotoPicker/View/HXCustomCollectionReusableView.m index 948089b6..e6fb6beb 100644 --- a/HXPhotoPicker/View/HXCustomCollectionReusableView.m +++ b/HXPhotoPicker/View/HXCustomCollectionReusableView.m @@ -1,6 +1,6 @@ // // HXCustomCollectionReusableView.m -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2017/11/8. // Copyright © 2017年 洪欣. All rights reserved. diff --git a/HXPhotoPicker/View/HXCustomPreviewView.h b/HXPhotoPicker/View/HXCustomPreviewView.h index 4a7ac267..184ed671 100644 --- a/HXPhotoPicker/View/HXCustomPreviewView.h +++ b/HXPhotoPicker/View/HXCustomPreviewView.h @@ -1,6 +1,6 @@ // // HXCustomPreviewView.h -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2017/10/31. // Copyright © 2017年 洪欣. All rights reserved. diff --git a/HXPhotoPicker/View/HXCustomPreviewView.m b/HXPhotoPicker/View/HXCustomPreviewView.m index 3cc6b314..1943af4d 100644 --- a/HXPhotoPicker/View/HXCustomPreviewView.m +++ b/HXPhotoPicker/View/HXCustomPreviewView.m @@ -1,6 +1,6 @@ // // HXCustomPreviewView.m -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2017/10/31. // Copyright © 2017年 洪欣. All rights reserved. diff --git a/HXPhotoPicker/View/HXFullScreenCameraPlayView.h b/HXPhotoPicker/View/HXFullScreenCameraPlayView.h index d189705e..24cf1a3e 100644 --- a/HXPhotoPicker/View/HXFullScreenCameraPlayView.h +++ b/HXPhotoPicker/View/HXFullScreenCameraPlayView.h @@ -1,6 +1,6 @@ // // HXFullScreenCameraPlayView.h -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2017/5/23. // Copyright © 2017年 洪欣. All rights reserved. diff --git a/HXPhotoPicker/View/HXFullScreenCameraPlayView.m b/HXPhotoPicker/View/HXFullScreenCameraPlayView.m index fead5317..34a016b7 100644 --- a/HXPhotoPicker/View/HXFullScreenCameraPlayView.m +++ b/HXPhotoPicker/View/HXFullScreenCameraPlayView.m @@ -1,6 +1,6 @@ // // HXFullScreenCameraPlayView.m -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2017/5/23. // Copyright © 2017年 洪欣. All rights reserved. diff --git a/HXPhotoPicker/View/HXPhotoBottomSelectView.h b/HXPhotoPicker/View/HXPhotoBottomSelectView.h index e99a2c20..b0bf59fa 100644 --- a/HXPhotoPicker/View/HXPhotoBottomSelectView.h +++ b/HXPhotoPicker/View/HXPhotoBottomSelectView.h @@ -1,6 +1,6 @@ // // HXPhotoBottomSelectView.h -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2019/9/30. // Copyright © 2019 洪欣. All rights reserved. diff --git a/HXPhotoPicker/View/HXPhotoBottomSelectView.m b/HXPhotoPicker/View/HXPhotoBottomSelectView.m index bed48c39..15627a12 100644 --- a/HXPhotoPicker/View/HXPhotoBottomSelectView.m +++ b/HXPhotoPicker/View/HXPhotoBottomSelectView.m @@ -1,6 +1,6 @@ // // HXPhotoBottomSelectView.m -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2019/9/30. // Copyright © 2019 洪欣. All rights reserved. diff --git a/HXPhotoPicker/View/HXPhotoCustomNavigationBar.h b/HXPhotoPicker/View/HXPhotoCustomNavigationBar.h index de90838e..e887e4b6 100644 --- a/HXPhotoPicker/View/HXPhotoCustomNavigationBar.h +++ b/HXPhotoPicker/View/HXPhotoCustomNavigationBar.h @@ -1,6 +1,6 @@ // // HXPhotoCustomNavigationBar.h -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2017/9/22. // Copyright © 2017年 洪欣. All rights reserved. diff --git a/HXPhotoPicker/View/HXPhotoCustomNavigationBar.m b/HXPhotoPicker/View/HXPhotoCustomNavigationBar.m index 10426b2c..129a8405 100644 --- a/HXPhotoPicker/View/HXPhotoCustomNavigationBar.m +++ b/HXPhotoPicker/View/HXPhotoCustomNavigationBar.m @@ -1,6 +1,6 @@ // // HXPhotoCustomNavigationBar.m -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2017/9/22. // Copyright © 2017年 洪欣. All rights reserved. diff --git a/HXPhotoPicker/View/HXPhotoPreviewBottomView.h b/HXPhotoPicker/View/HXPhotoPreviewBottomView.h index ed6a8208..7b3d5e12 100644 --- a/HXPhotoPicker/View/HXPhotoPreviewBottomView.h +++ b/HXPhotoPicker/View/HXPhotoPreviewBottomView.h @@ -1,6 +1,6 @@ // // HXPhotoPreviewBottomView.h -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2017/10/16. // Copyright © 2017年 洪欣. All rights reserved. diff --git a/HXPhotoPicker/View/HXPhotoPreviewBottomView.m b/HXPhotoPicker/View/HXPhotoPreviewBottomView.m index 37b6dc96..df59205d 100644 --- a/HXPhotoPicker/View/HXPhotoPreviewBottomView.m +++ b/HXPhotoPicker/View/HXPhotoPreviewBottomView.m @@ -1,6 +1,6 @@ // // HXPhotoPreviewBottomView.m -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2017/10/16. // Copyright © 2017年 洪欣. All rights reserved. diff --git a/HXPhotoPicker/View/HXPhotoPreviewImageViewCell.h b/HXPhotoPicker/View/HXPhotoPreviewImageViewCell.h index 5b0d3dda..071a33ba 100644 --- a/HXPhotoPicker/View/HXPhotoPreviewImageViewCell.h +++ b/HXPhotoPicker/View/HXPhotoPreviewImageViewCell.h @@ -1,6 +1,6 @@ // // HXPhotoPreviewImageViewCell.h -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2019/12/5. // Copyright © 2019 洪欣. All rights reserved. diff --git a/HXPhotoPicker/View/HXPhotoPreviewImageViewCell.m b/HXPhotoPicker/View/HXPhotoPreviewImageViewCell.m index 4690ea09..ef12d741 100644 --- a/HXPhotoPicker/View/HXPhotoPreviewImageViewCell.m +++ b/HXPhotoPicker/View/HXPhotoPreviewImageViewCell.m @@ -1,6 +1,6 @@ // // HXPhotoPreviewImageViewCell.m -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2019/12/5. // Copyright © 2019 洪欣. All rights reserved. diff --git a/HXPhotoPicker/View/HXPhotoPreviewLivePhotoCell.h b/HXPhotoPicker/View/HXPhotoPreviewLivePhotoCell.h index 11beafc1..3ab1b334 100644 --- a/HXPhotoPicker/View/HXPhotoPreviewLivePhotoCell.h +++ b/HXPhotoPicker/View/HXPhotoPreviewLivePhotoCell.h @@ -1,6 +1,6 @@ // // HXPhotoPreviewLivePhotoCell.h -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2019/12/14. // Copyright © 2019 洪欣. All rights reserved. diff --git a/HXPhotoPicker/View/HXPhotoPreviewLivePhotoCell.m b/HXPhotoPicker/View/HXPhotoPreviewLivePhotoCell.m index 314e79da..7045a663 100644 --- a/HXPhotoPicker/View/HXPhotoPreviewLivePhotoCell.m +++ b/HXPhotoPicker/View/HXPhotoPreviewLivePhotoCell.m @@ -1,6 +1,6 @@ // // HXPhotoPreviewLivePhotoCell.m -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2019/12/14. // Copyright © 2019 洪欣. All rights reserved. diff --git a/HXPhotoPicker/View/HXPhotoPreviewVideoViewCell.h b/HXPhotoPicker/View/HXPhotoPreviewVideoViewCell.h index f391c45d..a51cf572 100644 --- a/HXPhotoPicker/View/HXPhotoPreviewVideoViewCell.h +++ b/HXPhotoPicker/View/HXPhotoPreviewVideoViewCell.h @@ -1,6 +1,6 @@ // // HXPhotoPreviewVideoViewCell.h -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2019/12/5. // Copyright © 2019 洪欣. All rights reserved. diff --git a/HXPhotoPicker/View/HXPhotoPreviewVideoViewCell.m b/HXPhotoPicker/View/HXPhotoPreviewVideoViewCell.m index 666ffa84..1b77884a 100644 --- a/HXPhotoPicker/View/HXPhotoPreviewVideoViewCell.m +++ b/HXPhotoPicker/View/HXPhotoPreviewVideoViewCell.m @@ -1,6 +1,6 @@ // // HXPhotoPreviewVideoViewCell.m -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2019/12/5. // Copyright © 2019 洪欣. All rights reserved. diff --git a/HXPhotoPicker/View/HXPhotoPreviewViewCell.h b/HXPhotoPicker/View/HXPhotoPreviewViewCell.h index 02366583..4bd5c839 100644 --- a/HXPhotoPicker/View/HXPhotoPreviewViewCell.h +++ b/HXPhotoPicker/View/HXPhotoPreviewViewCell.h @@ -1,6 +1,6 @@ // // HXPhotoPreviewViewCell.h -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2019/12/5. // Copyright © 2019 洪欣. All rights reserved. diff --git a/HXPhotoPicker/View/HXPhotoPreviewViewCell.m b/HXPhotoPicker/View/HXPhotoPreviewViewCell.m index 7e071b10..e74edc95 100644 --- a/HXPhotoPicker/View/HXPhotoPreviewViewCell.m +++ b/HXPhotoPicker/View/HXPhotoPreviewViewCell.m @@ -1,6 +1,6 @@ // // HXPhotoPreviewViewCell.m -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2019/12/5. // Copyright © 2019 洪欣. All rights reserved. @@ -216,8 +216,6 @@ - (void)layoutSubviews { - (UIScrollView *)scrollView { if (!_scrollView) { _scrollView = [[UIScrollView alloc] init]; - _scrollView.showsHorizontalScrollIndicator = NO; - _scrollView.showsVerticalScrollIndicator = NO; _scrollView.bouncesZoom = YES; _scrollView.minimumZoomScale = 1; _scrollView.multipleTouchEnabled = YES; diff --git a/HXPhotoPicker/View/HXPhotoSubViewCell.h b/HXPhotoPicker/View/HXPhotoSubViewCell.h index 44e06058..2e13ab24 100644 --- a/HXPhotoPicker/View/HXPhotoSubViewCell.h +++ b/HXPhotoPicker/View/HXPhotoSubViewCell.h @@ -1,6 +1,6 @@ // // HXPhotoSubViewCell.h -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 17/2/17. // Copyright © 2017年 洪欣. All rights reserved. diff --git a/HXPhotoPicker/View/HXPhotoSubViewCell.m b/HXPhotoPicker/View/HXPhotoSubViewCell.m index 6ff9b4db..13ff1e36 100644 --- a/HXPhotoPicker/View/HXPhotoSubViewCell.m +++ b/HXPhotoPicker/View/HXPhotoSubViewCell.m @@ -1,6 +1,6 @@ // // HXPhotoSubViewCell.m -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 17/2/17. // Copyright © 2017年 洪欣. All rights reserved. diff --git a/HXPhotoPicker/View/HXPhotoView.h b/HXPhotoPicker/View/HXPhotoView.h index bbf76195..d016260c 100644 --- a/HXPhotoPicker/View/HXPhotoView.h +++ b/HXPhotoPicker/View/HXPhotoView.h @@ -1,6 +1,6 @@ // // HXPhotoView.h -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 17/2/17. // Copyright © 2017年 洪欣. All rights reserved. diff --git a/HXPhotoPicker/View/HXPhotoView.m b/HXPhotoPicker/View/HXPhotoView.m index b57287cb..5d1747ae 100644 --- a/HXPhotoPicker/View/HXPhotoView.m +++ b/HXPhotoPicker/View/HXPhotoView.m @@ -1,6 +1,6 @@ // // HXPhotoView.m -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 17/2/17. // Copyright © 2017年 洪欣. All rights reserved. diff --git a/HXPhotoPicker/View/HXPhotoViewFlowLayout.h b/HXPhotoPicker/View/HXPhotoViewFlowLayout.h index 743b1ebc..6d14b235 100644 --- a/HXPhotoPicker/View/HXPhotoViewFlowLayout.h +++ b/HXPhotoPicker/View/HXPhotoViewFlowLayout.h @@ -1,6 +1,6 @@ // // HXPhotoViewFlowLayout.h -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2017/11/15. // Copyright © 2017年 洪欣. All rights reserved. diff --git a/HXPhotoPicker/View/HXPhotoViewFlowLayout.m b/HXPhotoPicker/View/HXPhotoViewFlowLayout.m index 2fd08d7c..4be923cb 100644 --- a/HXPhotoPicker/View/HXPhotoViewFlowLayout.m +++ b/HXPhotoPicker/View/HXPhotoViewFlowLayout.m @@ -1,6 +1,6 @@ // // HXPhotoViewFlowLayout.m -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2017/11/15. // Copyright © 2017年 洪欣. All rights reserved. diff --git a/HXPhotoPicker/View/HXPreviewContentView.h b/HXPhotoPicker/View/HXPreviewContentView.h index 45509030..e2fba390 100644 --- a/HXPhotoPicker/View/HXPreviewContentView.h +++ b/HXPhotoPicker/View/HXPreviewContentView.h @@ -1,6 +1,6 @@ // // HXPreviewContentView.h -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2019/11/19. // Copyright © 2019 洪欣. All rights reserved. diff --git a/HXPhotoPicker/View/HXPreviewContentView.m b/HXPhotoPicker/View/HXPreviewContentView.m index 4403ea05..fd0f5407 100644 --- a/HXPhotoPicker/View/HXPreviewContentView.m +++ b/HXPhotoPicker/View/HXPreviewContentView.m @@ -1,6 +1,6 @@ // // HXPreviewContentView.m -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2019/11/19. // Copyright © 2019 洪欣. All rights reserved. diff --git a/HXPhotoPicker/View/HXPreviewImageView.h b/HXPhotoPicker/View/HXPreviewImageView.h index 8f31c785..680b44bb 100644 --- a/HXPhotoPicker/View/HXPreviewImageView.h +++ b/HXPhotoPicker/View/HXPreviewImageView.h @@ -1,6 +1,6 @@ // // HXPreviewImageView.h -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2019/11/15. // Copyright © 2019 洪欣. All rights reserved. diff --git a/HXPhotoPicker/View/HXPreviewImageView.m b/HXPhotoPicker/View/HXPreviewImageView.m index f428b777..f9abd16f 100644 --- a/HXPhotoPicker/View/HXPreviewImageView.m +++ b/HXPhotoPicker/View/HXPreviewImageView.m @@ -1,6 +1,6 @@ // // HXPreviewImageView.m -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2019/11/15. // Copyright © 2019 洪欣. All rights reserved. diff --git a/HXPhotoPicker/View/HXPreviewLivePhotoView.h b/HXPhotoPicker/View/HXPreviewLivePhotoView.h index c45ff9be..b2bf22d3 100644 --- a/HXPhotoPicker/View/HXPreviewLivePhotoView.h +++ b/HXPhotoPicker/View/HXPreviewLivePhotoView.h @@ -1,6 +1,6 @@ // // HXPreviewLivePhotoView.h -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2019/11/15. // Copyright © 2019 洪欣. All rights reserved. diff --git a/HXPhotoPicker/View/HXPreviewLivePhotoView.m b/HXPhotoPicker/View/HXPreviewLivePhotoView.m index 6cb2f6bb..e8db6ebb 100644 --- a/HXPhotoPicker/View/HXPreviewLivePhotoView.m +++ b/HXPhotoPicker/View/HXPreviewLivePhotoView.m @@ -1,6 +1,6 @@ // // HXPreviewLivePhotoView.m -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2019/11/15. // Copyright © 2019 洪欣. All rights reserved. diff --git a/HXPhotoPicker/View/HXPreviewVideoView.h b/HXPhotoPicker/View/HXPreviewVideoView.h index a52c8166..85d15b02 100644 --- a/HXPhotoPicker/View/HXPreviewVideoView.h +++ b/HXPhotoPicker/View/HXPreviewVideoView.h @@ -1,6 +1,6 @@ // // HXPreviewVideoView.h -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2019/11/15. // Copyright © 2019 洪欣. All rights reserved. diff --git a/HXPhotoPicker/View/HXPreviewVideoView.m b/HXPhotoPicker/View/HXPreviewVideoView.m index e4863cf6..40d7c229 100644 --- a/HXPhotoPicker/View/HXPreviewVideoView.m +++ b/HXPhotoPicker/View/HXPreviewVideoView.m @@ -1,6 +1,6 @@ // // HXPreviewVideoView.m -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2019/11/15. // Copyright © 2019 洪欣. All rights reserved. diff --git a/HXPhotoPicker-Demo.xcodeproj/project.pbxproj b/HXPhotoPickerExample.xcodeproj/project.pbxproj similarity index 89% rename from HXPhotoPicker-Demo.xcodeproj/project.pbxproj rename to HXPhotoPickerExample.xcodeproj/project.pbxproj index 229c0020..3a9eea02 100644 --- a/HXPhotoPicker-Demo.xcodeproj/project.pbxproj +++ b/HXPhotoPickerExample.xcodeproj/project.pbxproj @@ -7,8 +7,7 @@ objects = { /* Begin PBXBuildFile section */ - 62FC75381C5F62172A3FF354 /* libPods-HXPhotoPicker-Demo.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 1AD350B5542739D4914344B4 /* libPods-HXPhotoPicker-Demo.a */; }; - 7B0856B924FA00FD00E93091 /* HXPhotoPicker_DemoUITests.m in Sources */ = {isa = PBXBuildFile; fileRef = 7B0856B824FA00FD00E93091 /* HXPhotoPicker_DemoUITests.m */; }; + 438A0ED618CD3AF385950318 /* libPods-HXPhotoPickerExample.a in Frameworks */ = {isa = PBXBuildFile; fileRef = E6254BB2C20603515D5A76A4 /* libPods-HXPhotoPickerExample.a */; }; 7B08595324FA58DE00E93091 /* WxMomentPublishViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 7B08590D24FA58DE00E93091 /* WxMomentPublishViewController.xib */; }; 7B08595424FA58DE00E93091 /* YYWeakProxy.m in Sources */ = {isa = PBXBuildFile; fileRef = 7B08590E24FA58DE00E93091 /* YYWeakProxy.m */; }; 7B08595524FA58DF00E93091 /* Demo15ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 7B08591024FA58DE00E93091 /* Demo15ViewController.m */; }; @@ -49,7 +48,32 @@ 7B08597A24FA58DF00E93091 /* Demo10ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 7B08594E24FA58DE00E93091 /* Demo10ViewController.m */; }; 7B08597B24FA58DF00E93091 /* SettingViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 7B08595024FA58DE00E93091 /* SettingViewController.m */; }; 7B08597C24FA58DF00E93091 /* WxMomentViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 7B08595124FA58DE00E93091 /* WxMomentViewCell.xib */; }; + 7B0B2A88255E1AE300ACF619 /* HXPHPickerViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B0B2A7A255E1AE300ACF619 /* HXPHPickerViewController.swift */; }; + 7B0B2A89255E1AE300ACF619 /* HXPHConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B0B2A7B255E1AE300ACF619 /* HXPHConfiguration.swift */; }; + 7B0B2A8A255E1AE300ACF619 /* HXPHTypes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B0B2A7C255E1AE300ACF619 /* HXPHTypes.swift */; }; + 7B0B2A8B255E1AE300ACF619 /* HXPHPickerController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B0B2A7D255E1AE300ACF619 /* HXPHPickerController.swift */; }; + 7B0B2A8C255E1AE300ACF619 /* HXPHTools.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B0B2A7E255E1AE300ACF619 /* HXPHTools.swift */; }; + 7B0B2A8D255E1AE300ACF619 /* HXAlbumViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B0B2A7F255E1AE300ACF619 /* HXAlbumViewController.swift */; }; + 7B0B2A8E255E1AE300ACF619 /* HXPHAsset.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B0B2A80255E1AE300ACF619 /* HXPHAsset.swift */; }; + 7B0B2A8F255E1AE300ACF619 /* HXPHAssetCollection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B0B2A81255E1AE300ACF619 /* HXPHAssetCollection.swift */; }; + 7B0B2A90255E1AE300ACF619 /* HXAlbumViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B0B2A82255E1AE300ACF619 /* HXAlbumViewCell.swift */; }; + 7B0B2A91255E1AE300ACF619 /* HXPHManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B0B2A83255E1AE300ACF619 /* HXPHManager.swift */; }; + 7B0B2A92255E1AE300ACF619 /* HXPHAssetManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B0B2A84255E1AE300ACF619 /* HXPHAssetManager.swift */; }; + 7B0B2A93255E1AE300ACF619 /* HXPHPickerViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B0B2A85255E1AE300ACF619 /* HXPHPickerViewCell.swift */; }; + 7B0B2A94255E1AE300ACF619 /* UIView+HXPHPicker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B0B2A86255E1AE300ACF619 /* UIView+HXPHPicker.swift */; }; + 7B0B2A95255E1AE300ACF619 /* UIViewController+HXPHPicker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B0B2A87255E1AE300ACF619 /* UIViewController+HXPHPicker.swift */; }; + 7B0B2AAA255E384100ACF619 /* UIFont+HXPHPicker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B0B2AA9255E384100ACF619 /* UIFont+HXPHPicker.swift */; }; + 7B0B2AAF255E3B7B00ACF619 /* UIColor+HXPHPicker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B0B2AAE255E3B7B00ACF619 /* UIColor+HXPHPicker.swift */; }; + 7B0B2AB4255E5A1800ACF619 /* HXPHPreviewViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B0B2AB3255E5A1800ACF619 /* HXPHPreviewViewController.swift */; }; + 7B0B2AB9255E5F6F00ACF619 /* HXPHPreviewViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B0B2AB8255E5F6F00ACF619 /* HXPHPreviewViewCell.swift */; }; + 7B0B2AD1255E82F200ACF619 /* UIDevice+HXPHPicker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B0B2AD0255E82F200ACF619 /* UIDevice+HXPHPicker.swift */; }; 7B2824192514A7CD00DEE5A0 /* HXPhotoPicker.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 7B2824182514A7CD00DEE5A0 /* HXPhotoPicker.bundle */; }; + 7B3327F7255EE4F300784BC0 /* String+HXPHPicker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B3327F6255EE4F300784BC0 /* String+HXPHPicker.swift */; }; + 7B3EDEC1255E185900937B4A /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B3EDEC0255E185900937B4A /* AppDelegate.swift */; }; + 7B3EDEC5255E185900937B4A /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B3EDEC4255E185900937B4A /* ViewController.swift */; }; + 7B3EDEC8255E185900937B4A /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 7B3EDEC6255E185900937B4A /* Main.storyboard */; }; + 7B3EDECA255E185B00937B4A /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 7B3EDEC9255E185B00937B4A /* Assets.xcassets */; }; + 7B3EDECD255E185B00937B4A /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 7B3EDECB255E185B00937B4A /* LaunchScreen.storyboard */; }; 7B3FAFE02558EFAE0092FCE0 /* HXPhotoPicker.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 7B2824182514A7CD00DEE5A0 /* HXPhotoPicker.bundle */; }; 7B4D4C3E24B858C600B03846 /* HXPhotoEditConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = 7B4D4BE624B858C600B03846 /* HXPhotoEditConfiguration.m */; }; 7B4D4C4624B858C600B03846 /* HX_PhotoEditViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 7B4D4BF924B858C600B03846 /* HX_PhotoEditViewController.m */; }; @@ -140,6 +164,7 @@ 7B64186124F76C67003A5723 /* README.md in Resources */ = {isa = PBXBuildFile; fileRef = 7B64186024F76C67003A5723 /* README.md */; }; 7B752DE82372ADF000580F35 /* Photos.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7B752DE72372ADF000580F35 /* Photos.framework */; settings = {ATTRIBUTES = (Weak, ); }; }; 7B752DEA2372ADF300580F35 /* PhotosUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7B752DE92372ADF300580F35 /* PhotosUI.framework */; settings = {ATTRIBUTES = (Weak, ); }; }; + 7B7BE3F22563D34A0008C391 /* HXAlbumView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B7BE3F12563D34A0008C391 /* HXAlbumView.swift */; }; 7B7E3E7B1E4AACD1002234EE /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 7B7E3E7A1E4AACD1002234EE /* main.m */; }; 7B7E3E7E1E4AACD1002234EE /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 7B7E3E7D1E4AACD1002234EE /* AppDelegate.m */; }; 7B7E3E861E4AACD1002234EE /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 7B7E3E851E4AACD1002234EE /* Assets.xcassets */; }; @@ -150,6 +175,9 @@ 7B8629AA237D0F8D00F8A584 /* EventKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7B8629A9237D0F8C00F8A584 /* EventKit.framework */; }; 7B8629AC237D0F9400F8A584 /* Contacts.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7B8629AB237D0F9400F8A584 /* Contacts.framework */; }; 7B8629AE237D0FAA00F8A584 /* AddressBook.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7B8629AD237D0FAA00F8A584 /* AddressBook.framework */; }; + 7BA6878B25610CF00014C3E3 /* UIImage+HXPHPicker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7BA6878A25610CF00014C3E3 /* UIImage+HXPHPicker.swift */; }; + 7BA68790256144EA0014C3E3 /* HXPHPicker.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 7BA6878F256144EA0014C3E3 /* HXPHPicker.bundle */; }; + 7BA68798256149790014C3E3 /* Bundle+HXPhotoPicker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7BA68797256149790014C3E3 /* Bundle+HXPhotoPicker.swift */; }; 7BAF876124C14D5C00ACAF85 /* HXCameraBottomView.m in Sources */ = {isa = PBXBuildFile; fileRef = 7BAF876024C14D5C00ACAF85 /* HXCameraBottomView.m */; }; 7BC371522505D25000E2D05C /* HXPhotoEditGraffitiColorSizeView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 7BC3713A2505D24E00E2D05C /* HXPhotoEditGraffitiColorSizeView.xib */; }; 7BC371532505D25000E2D05C /* HXPhotoEditStickerTrashView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 7BC3713B2505D24E00E2D05C /* HXPhotoEditStickerTrashView.xib */; }; @@ -342,21 +370,9 @@ 7BD52F7D24FE258200AE3D7C /* HXPhotoTools.m in Sources */ = {isa = PBXBuildFile; fileRef = 7B4E65D92487AD5B00077EE1 /* HXPhotoTools.m */; }; /* End PBXBuildFile section */ -/* Begin PBXContainerItemProxy section */ - 7B0856BB24FA00FE00E93091 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 7B7E3E6E1E4AACD1002234EE /* Project object */; - proxyType = 1; - remoteGlobalIDString = 7B7E3E751E4AACD1002234EE; - remoteInfo = "HXPhotoPicker-Demo"; - }; -/* End PBXContainerItemProxy section */ - /* Begin PBXFileReference section */ - 1AD350B5542739D4914344B4 /* libPods-HXPhotoPicker-Demo.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-HXPhotoPicker-Demo.a"; sourceTree = BUILT_PRODUCTS_DIR; }; - 7B0856B624FA00FD00E93091 /* HXPhotoPicker-DemoUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "HXPhotoPicker-DemoUITests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; - 7B0856B824FA00FD00E93091 /* HXPhotoPicker_DemoUITests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = HXPhotoPicker_DemoUITests.m; sourceTree = ""; }; - 7B0856BA24FA00FD00E93091 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 16A9631049F51EB2C9886F18 /* Pods-HXPhotoPickerExample.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-HXPhotoPickerExample.debug.xcconfig"; path = "Target Support Files/Pods-HXPhotoPickerExample/Pods-HXPhotoPickerExample.debug.xcconfig"; sourceTree = ""; }; + 3582D2EABCA69E96E4C95300 /* Pods-HXPhotoPickerExample.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-HXPhotoPickerExample.release.xcconfig"; path = "Target Support Files/Pods-HXPhotoPickerExample/Pods-HXPhotoPickerExample.release.xcconfig"; sourceTree = ""; }; 7B08590C24FA58DE00E93091 /* WxMomentPublishViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WxMomentPublishViewController.h; sourceTree = ""; }; 7B08590D24FA58DE00E93091 /* WxMomentPublishViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = WxMomentPublishViewController.xib; sourceTree = ""; }; 7B08590E24FA58DE00E93091 /* YYWeakProxy.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = YYWeakProxy.m; sourceTree = ""; }; @@ -423,7 +439,34 @@ 7B08595024FA58DE00E93091 /* SettingViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SettingViewController.m; sourceTree = ""; }; 7B08595124FA58DE00E93091 /* WxMomentViewCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = WxMomentViewCell.xib; sourceTree = ""; }; 7B08595224FA58DE00E93091 /* Demo6SubViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Demo6SubViewController.h; sourceTree = ""; }; + 7B0B2A7A255E1AE300ACF619 /* HXPHPickerViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HXPHPickerViewController.swift; sourceTree = ""; }; + 7B0B2A7B255E1AE300ACF619 /* HXPHConfiguration.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HXPHConfiguration.swift; sourceTree = ""; }; + 7B0B2A7C255E1AE300ACF619 /* HXPHTypes.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HXPHTypes.swift; sourceTree = ""; }; + 7B0B2A7D255E1AE300ACF619 /* HXPHPickerController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HXPHPickerController.swift; sourceTree = ""; }; + 7B0B2A7E255E1AE300ACF619 /* HXPHTools.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HXPHTools.swift; sourceTree = ""; }; + 7B0B2A7F255E1AE300ACF619 /* HXAlbumViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HXAlbumViewController.swift; sourceTree = ""; }; + 7B0B2A80255E1AE300ACF619 /* HXPHAsset.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HXPHAsset.swift; sourceTree = ""; }; + 7B0B2A81255E1AE300ACF619 /* HXPHAssetCollection.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HXPHAssetCollection.swift; sourceTree = ""; }; + 7B0B2A82255E1AE300ACF619 /* HXAlbumViewCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HXAlbumViewCell.swift; sourceTree = ""; }; + 7B0B2A83255E1AE300ACF619 /* HXPHManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HXPHManager.swift; sourceTree = ""; }; + 7B0B2A84255E1AE300ACF619 /* HXPHAssetManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HXPHAssetManager.swift; sourceTree = ""; }; + 7B0B2A85255E1AE300ACF619 /* HXPHPickerViewCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HXPHPickerViewCell.swift; sourceTree = ""; }; + 7B0B2A86255E1AE300ACF619 /* UIView+HXPHPicker.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIView+HXPHPicker.swift"; sourceTree = ""; }; + 7B0B2A87255E1AE300ACF619 /* UIViewController+HXPHPicker.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIViewController+HXPHPicker.swift"; sourceTree = ""; }; + 7B0B2AA9255E384100ACF619 /* UIFont+HXPHPicker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIFont+HXPHPicker.swift"; sourceTree = ""; }; + 7B0B2AAE255E3B7B00ACF619 /* UIColor+HXPHPicker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIColor+HXPHPicker.swift"; sourceTree = ""; }; + 7B0B2AB3255E5A1800ACF619 /* HXPHPreviewViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HXPHPreviewViewController.swift; sourceTree = ""; }; + 7B0B2AB8255E5F6F00ACF619 /* HXPHPreviewViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HXPHPreviewViewCell.swift; sourceTree = ""; }; + 7B0B2AD0255E82F200ACF619 /* UIDevice+HXPHPicker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIDevice+HXPHPicker.swift"; sourceTree = ""; }; 7B2824182514A7CD00DEE5A0 /* HXPhotoPicker.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = HXPhotoPicker.bundle; sourceTree = ""; }; + 7B3327F6255EE4F300784BC0 /* String+HXPHPicker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "String+HXPHPicker.swift"; sourceTree = ""; }; + 7B3EDEBE255E185900937B4A /* HXPHPickerExample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = HXPHPickerExample.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 7B3EDEC0255E185900937B4A /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 7B3EDEC4255E185900937B4A /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; + 7B3EDEC7255E185900937B4A /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + 7B3EDEC9255E185B00937B4A /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 7B3EDECC255E185B00937B4A /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + 7B3EDECE255E185B00937B4A /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 7B4D4BE624B858C600B03846 /* HXPhotoEditConfiguration.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HXPhotoEditConfiguration.m; sourceTree = ""; }; 7B4D4BF424B858C600B03846 /* HXPhotoEdit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HXPhotoEdit.h; sourceTree = ""; }; 7B4D4BF824B858C600B03846 /* HX_PhotoEditViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HX_PhotoEditViewController.h; sourceTree = ""; }; @@ -601,7 +644,8 @@ 7B64186024F76C67003A5723 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = ""; }; 7B752DE72372ADF000580F35 /* Photos.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Photos.framework; path = System/Library/Frameworks/Photos.framework; sourceTree = SDKROOT; }; 7B752DE92372ADF300580F35 /* PhotosUI.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = PhotosUI.framework; path = System/Library/Frameworks/PhotosUI.framework; sourceTree = SDKROOT; }; - 7B7E3E761E4AACD1002234EE /* HXPhotoPicker-Demo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "HXPhotoPicker-Demo.app"; sourceTree = BUILT_PRODUCTS_DIR; }; + 7B7BE3F12563D34A0008C391 /* HXAlbumView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HXAlbumView.swift; sourceTree = ""; }; + 7B7E3E761E4AACD1002234EE /* HXPhotoPickerExample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = HXPhotoPickerExample.app; sourceTree = BUILT_PRODUCTS_DIR; }; 7B7E3E7A1E4AACD1002234EE /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 7B7E3E7C1E4AACD1002234EE /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; 7B7E3E7D1E4AACD1002234EE /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; @@ -615,6 +659,9 @@ 7B8629AB237D0F9400F8A584 /* Contacts.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Contacts.framework; path = System/Library/Frameworks/Contacts.framework; sourceTree = SDKROOT; }; 7B8629AD237D0FAA00F8A584 /* AddressBook.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AddressBook.framework; path = System/Library/Frameworks/AddressBook.framework; sourceTree = SDKROOT; }; 7B8EED1A24D7C2C600957B3C /* HXPhotoTypes.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = HXPhotoTypes.h; sourceTree = ""; }; + 7BA6878A25610CF00014C3E3 /* UIImage+HXPHPicker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIImage+HXPHPicker.swift"; sourceTree = ""; }; + 7BA6878F256144EA0014C3E3 /* HXPHPicker.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = HXPHPicker.bundle; sourceTree = ""; }; + 7BA68797256149790014C3E3 /* Bundle+HXPhotoPicker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Bundle+HXPhotoPicker.swift"; sourceTree = ""; }; 7BAF875F24C14D5C00ACAF85 /* HXCameraBottomView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = HXCameraBottomView.h; sourceTree = ""; }; 7BAF876024C14D5C00ACAF85 /* HXCameraBottomView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = HXCameraBottomView.m; sourceTree = ""; }; 7BB9FDFB24D500DB00C9A6F1 /* HXPhotoViewProtocol.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = HXPhotoViewProtocol.h; sourceTree = ""; }; @@ -633,12 +680,11 @@ 7BD52EC024FE250E00AE3D7C /* HXPhotoPicker.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = HXPhotoPicker.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7BD52EC324FE250E00AE3D7C /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 7BE8DFD624C68B2800306042 /* HXPhotoViewCellCustomProtocol.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = HXPhotoViewCellCustomProtocol.h; sourceTree = ""; }; - AD6E46F470F33649CB1826B8 /* Pods-HXPhotoPicker-Demo.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-HXPhotoPicker-Demo.debug.xcconfig"; path = "Target Support Files/Pods-HXPhotoPicker-Demo/Pods-HXPhotoPicker-Demo.debug.xcconfig"; sourceTree = ""; }; - B50B4B451C32F6F526B3EFDA /* Pods-HXPhotoPicker-Demo.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-HXPhotoPicker-Demo.release.xcconfig"; path = "Target Support Files/Pods-HXPhotoPicker-Demo/Pods-HXPhotoPicker-Demo.release.xcconfig"; sourceTree = ""; }; + E6254BB2C20603515D5A76A4 /* libPods-HXPhotoPickerExample.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-HXPhotoPickerExample.a"; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 7B0856B324FA00FD00E93091 /* Frameworks */ = { + 7B3EDEBB255E185900937B4A /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( @@ -658,7 +704,7 @@ 7B8629A2237D0F6500F8A584 /* QuickLook.framework in Frameworks */, 7B752DEA2372ADF300580F35 /* PhotosUI.framework in Frameworks */, 7B752DE82372ADF000580F35 /* Photos.framework in Frameworks */, - 62FC75381C5F62172A3FF354 /* libPods-HXPhotoPicker-Demo.a in Frameworks */, + 438A0ED618CD3AF385950318 /* libPods-HXPhotoPickerExample.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -675,8 +721,8 @@ 4577D5A9522A169F69B55034 /* Pods */ = { isa = PBXGroup; children = ( - AD6E46F470F33649CB1826B8 /* Pods-HXPhotoPicker-Demo.debug.xcconfig */, - B50B4B451C32F6F526B3EFDA /* Pods-HXPhotoPicker-Demo.release.xcconfig */, + 16A9631049F51EB2C9886F18 /* Pods-HXPhotoPickerExample.debug.xcconfig */, + 3582D2EABCA69E96E4C95300 /* Pods-HXPhotoPickerExample.release.xcconfig */, ); path = Pods; sourceTree = ""; @@ -689,15 +735,6 @@ path = Resources; sourceTree = ""; }; - 7B0856B724FA00FD00E93091 /* HXPhotoPicker-DemoUITests */ = { - isa = PBXGroup; - children = ( - 7B0856B824FA00FD00E93091 /* HXPhotoPicker_DemoUITests.m */, - 7B0856BA24FA00FD00E93091 /* Info.plist */, - ); - path = "HXPhotoPicker-DemoUITests"; - sourceTree = ""; - }; 7B08590B24FA58DE00E93091 /* Classes */ = { isa = PBXGroup; children = ( @@ -791,6 +828,51 @@ path = assets; sourceTree = ""; }; + 7B0B2A79255E1AE300ACF619 /* HXPHPicker */ = { + isa = PBXGroup; + children = ( + 7BA6878F256144EA0014C3E3 /* HXPHPicker.bundle */, + 7B0B2A7B255E1AE300ACF619 /* HXPHConfiguration.swift */, + 7B0B2A83255E1AE300ACF619 /* HXPHManager.swift */, + 7B0B2A84255E1AE300ACF619 /* HXPHAssetManager.swift */, + 7B0B2A81255E1AE300ACF619 /* HXPHAssetCollection.swift */, + 7B0B2A80255E1AE300ACF619 /* HXPHAsset.swift */, + 7B0B2A7D255E1AE300ACF619 /* HXPHPickerController.swift */, + 7B0B2A7F255E1AE300ACF619 /* HXAlbumViewController.swift */, + 7B7BE3F12563D34A0008C391 /* HXAlbumView.swift */, + 7B0B2A82255E1AE300ACF619 /* HXAlbumViewCell.swift */, + 7B0B2A7A255E1AE300ACF619 /* HXPHPickerViewController.swift */, + 7B0B2A85255E1AE300ACF619 /* HXPHPickerViewCell.swift */, + 7B0B2AB3255E5A1800ACF619 /* HXPHPreviewViewController.swift */, + 7B0B2AB8255E5F6F00ACF619 /* HXPHPreviewViewCell.swift */, + 7B0B2A7E255E1AE300ACF619 /* HXPHTools.swift */, + 7B0B2A7C255E1AE300ACF619 /* HXPHTypes.swift */, + 7B0B2AD0255E82F200ACF619 /* UIDevice+HXPHPicker.swift */, + 7B0B2A86255E1AE300ACF619 /* UIView+HXPHPicker.swift */, + 7B0B2A87255E1AE300ACF619 /* UIViewController+HXPHPicker.swift */, + 7B0B2AA9255E384100ACF619 /* UIFont+HXPHPicker.swift */, + 7B0B2AAE255E3B7B00ACF619 /* UIColor+HXPHPicker.swift */, + 7B3327F6255EE4F300784BC0 /* String+HXPHPicker.swift */, + 7BA6878A25610CF00014C3E3 /* UIImage+HXPHPicker.swift */, + 7BA68797256149790014C3E3 /* Bundle+HXPhotoPicker.swift */, + ); + path = HXPHPicker; + sourceTree = SOURCE_ROOT; + }; + 7B3EDEBF255E185900937B4A /* Swift */ = { + isa = PBXGroup; + children = ( + 7B0B2A79255E1AE300ACF619 /* HXPHPicker */, + 7B3EDEC0255E185900937B4A /* AppDelegate.swift */, + 7B3EDEC4255E185900937B4A /* ViewController.swift */, + 7B3EDEC6255E185900937B4A /* Main.storyboard */, + 7B3EDEC9255E185B00937B4A /* Assets.xcassets */, + 7B3EDECB255E185B00937B4A /* LaunchScreen.storyboard */, + 7B3EDECE255E185B00937B4A /* Info.plist */, + ); + path = Swift; + sourceTree = ""; + }; 7B4D4BE524B858C600B03846 /* HXPhotoEdit */ = { isa = PBXGroup; children = ( @@ -1062,7 +1144,7 @@ 7B8629A1237D0F6500F8A584 /* QuickLook.framework */, 7B752DE92372ADF300580F35 /* PhotosUI.framework */, 7B752DE72372ADF000580F35 /* Photos.framework */, - 1AD350B5542739D4914344B4 /* libPods-HXPhotoPicker-Demo.a */, + E6254BB2C20603515D5A76A4 /* libPods-HXPhotoPickerExample.a */, ); name = Frameworks; sourceTree = ""; @@ -1071,8 +1153,8 @@ isa = PBXGroup; children = ( 7B64186024F76C67003A5723 /* README.md */, - 7B7E3E781E4AACD1002234EE /* HXPhotoPicker-Demo */, - 7B0856B724FA00FD00E93091 /* HXPhotoPicker-DemoUITests */, + 7B7E3E781E4AACD1002234EE /* Objective-C */, + 7B3EDEBF255E185900937B4A /* Swift */, 7BD52EC124FE250E00AE3D7C /* HXPhotoPickerFramework */, 7B7E3E771E4AACD1002234EE /* Products */, 7B752DE62372ADEF00580F35 /* Frameworks */, @@ -1083,14 +1165,14 @@ 7B7E3E771E4AACD1002234EE /* Products */ = { isa = PBXGroup; children = ( - 7B7E3E761E4AACD1002234EE /* HXPhotoPicker-Demo.app */, - 7B0856B624FA00FD00E93091 /* HXPhotoPicker-DemoUITests.xctest */, + 7B7E3E761E4AACD1002234EE /* HXPhotoPickerExample.app */, 7BD52EC024FE250E00AE3D7C /* HXPhotoPicker.framework */, + 7B3EDEBE255E185900937B4A /* HXPHPickerExample.app */, ); name = Products; sourceTree = ""; }; - 7B7E3E781E4AACD1002234EE /* HXPhotoPicker-Demo */ = { + 7B7E3E781E4AACD1002234EE /* Objective-C */ = { isa = PBXGroup; children = ( 7B4E65AE2487AD5B00077EE1 /* HXPhotoPicker */, @@ -1101,7 +1183,7 @@ 7B7E3E8A1E4AACD1002234EE /* Info.plist */, 7B7E3E791E4AACD1002234EE /* Supporting Files */, ); - path = "HXPhotoPicker-Demo"; + path = "Objective-C"; sourceTree = ""; }; 7B7E3E791E4AACD1002234EE /* Supporting Files */ = { @@ -1224,27 +1306,26 @@ /* End PBXHeadersBuildPhase section */ /* Begin PBXNativeTarget section */ - 7B0856B524FA00FD00E93091 /* HXPhotoPicker-DemoUITests */ = { + 7B3EDEBD255E185900937B4A /* HXPHPickerExample */ = { isa = PBXNativeTarget; - buildConfigurationList = 7B0856BD24FA00FE00E93091 /* Build configuration list for PBXNativeTarget "HXPhotoPicker-DemoUITests" */; + buildConfigurationList = 7B3EDECF255E185B00937B4A /* Build configuration list for PBXNativeTarget "HXPHPickerExample" */; buildPhases = ( - 7B0856B224FA00FD00E93091 /* Sources */, - 7B0856B324FA00FD00E93091 /* Frameworks */, - 7B0856B424FA00FD00E93091 /* Resources */, + 7B3EDEBA255E185900937B4A /* Sources */, + 7B3EDEBB255E185900937B4A /* Frameworks */, + 7B3EDEBC255E185900937B4A /* Resources */, ); buildRules = ( ); dependencies = ( - 7B0856BC24FA00FE00E93091 /* PBXTargetDependency */, ); - name = "HXPhotoPicker-DemoUITests"; - productName = "HXPhotoPicker-DemoUITests"; - productReference = 7B0856B624FA00FD00E93091 /* HXPhotoPicker-DemoUITests.xctest */; - productType = "com.apple.product-type.bundle.ui-testing"; + name = HXPHPickerExample; + productName = HXPHPickerExample; + productReference = 7B3EDEBE255E185900937B4A /* HXPHPickerExample.app */; + productType = "com.apple.product-type.application"; }; - 7B7E3E751E4AACD1002234EE /* HXPhotoPicker-Demo */ = { + 7B7E3E751E4AACD1002234EE /* HXPhotoPickerExample */ = { isa = PBXNativeTarget; - buildConfigurationList = 7B7E3E8D1E4AACD1002234EE /* Build configuration list for PBXNativeTarget "HXPhotoPicker-Demo" */; + buildConfigurationList = 7B7E3E8D1E4AACD1002234EE /* Build configuration list for PBXNativeTarget "HXPhotoPickerExample" */; buildPhases = ( 434547430CF3E6D5B728C923 /* [CP] Check Pods Manifest.lock */, 7B7E3E721E4AACD1002234EE /* Sources */, @@ -1255,9 +1336,9 @@ ); dependencies = ( ); - name = "HXPhotoPicker-Demo"; + name = HXPhotoPickerExample; productName = "照片选择"; - productReference = 7B7E3E761E4AACD1002234EE /* HXPhotoPicker-Demo.app */; + productReference = 7B7E3E761E4AACD1002234EE /* HXPhotoPickerExample.app */; productType = "com.apple.product-type.application"; }; 7BD52EBF24FE250E00AE3D7C /* HXPhotoPickerFramework */ = { @@ -1285,14 +1366,14 @@ isa = PBXProject; attributes = { DefaultBuildSystemTypeForWorkspace = Latest; + LastSwiftUpdateCheck = 1220; LastUpgradeCheck = 1200; ORGANIZATIONNAME = "洪欣"; TargetAttributes = { - 7B0856B524FA00FD00E93091 = { - CreatedOnToolsVersion = 11.5; - DevelopmentTeam = BMBPTRQ2Q4; + 7B3EDEBD255E185900937B4A = { + CreatedOnToolsVersion = 12.2; + DevelopmentTeam = 36YN45CVLK; ProvisioningStyle = Automatic; - TestTargetID = 7B7E3E751E4AACD1002234EE; }; 7B7E3E751E4AACD1002234EE = { CreatedOnToolsVersion = 8.2.1; @@ -1306,7 +1387,7 @@ }; }; }; - buildConfigurationList = 7B7E3E711E4AACD1002234EE /* Build configuration list for PBXProject "HXPhotoPicker-Demo" */; + buildConfigurationList = 7B7E3E711E4AACD1002234EE /* Build configuration list for PBXProject "HXPhotoPickerExample" */; compatibilityVersion = "Xcode 3.2"; developmentRegion = en; hasScannedForEncodings = 0; @@ -1319,18 +1400,22 @@ projectDirPath = ""; projectRoot = ""; targets = ( - 7B7E3E751E4AACD1002234EE /* HXPhotoPicker-Demo */, - 7B0856B524FA00FD00E93091 /* HXPhotoPicker-DemoUITests */, + 7B7E3E751E4AACD1002234EE /* HXPhotoPickerExample */, + 7B3EDEBD255E185900937B4A /* HXPHPickerExample */, 7BD52EBF24FE250E00AE3D7C /* HXPhotoPickerFramework */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ - 7B0856B424FA00FD00E93091 /* Resources */ = { + 7B3EDEBC255E185900937B4A /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + 7B3EDECD255E185B00937B4A /* LaunchScreen.storyboard in Resources */, + 7B3EDECA255E185B00937B4A /* Assets.xcassets in Resources */, + 7B3EDEC8255E185900937B4A /* Main.storyboard in Resources */, + 7BA68790256144EA0014C3E3 /* HXPHPicker.bundle in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1396,7 +1481,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-HXPhotoPicker-Demo-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-HXPhotoPickerExample-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -1406,11 +1491,35 @@ /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ - 7B0856B224FA00FD00E93091 /* Sources */ = { + 7B3EDEBA255E185900937B4A /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 7B0856B924FA00FD00E93091 /* HXPhotoPicker_DemoUITests.m in Sources */, + 7B3327F7255EE4F300784BC0 /* String+HXPHPicker.swift in Sources */, + 7B0B2AAA255E384100ACF619 /* UIFont+HXPHPicker.swift in Sources */, + 7B0B2A8A255E1AE300ACF619 /* HXPHTypes.swift in Sources */, + 7B0B2A92255E1AE300ACF619 /* HXPHAssetManager.swift in Sources */, + 7B0B2A8C255E1AE300ACF619 /* HXPHTools.swift in Sources */, + 7B0B2A94255E1AE300ACF619 /* UIView+HXPHPicker.swift in Sources */, + 7B0B2A8F255E1AE300ACF619 /* HXPHAssetCollection.swift in Sources */, + 7B3EDEC5255E185900937B4A /* ViewController.swift in Sources */, + 7B0B2AAF255E3B7B00ACF619 /* UIColor+HXPHPicker.swift in Sources */, + 7BA68798256149790014C3E3 /* Bundle+HXPhotoPicker.swift in Sources */, + 7B0B2AB4255E5A1800ACF619 /* HXPHPreviewViewController.swift in Sources */, + 7B0B2A88255E1AE300ACF619 /* HXPHPickerViewController.swift in Sources */, + 7B0B2A8E255E1AE300ACF619 /* HXPHAsset.swift in Sources */, + 7B0B2A89255E1AE300ACF619 /* HXPHConfiguration.swift in Sources */, + 7BA6878B25610CF00014C3E3 /* UIImage+HXPHPicker.swift in Sources */, + 7B3EDEC1255E185900937B4A /* AppDelegate.swift in Sources */, + 7B0B2AB9255E5F6F00ACF619 /* HXPHPreviewViewCell.swift in Sources */, + 7B0B2A8D255E1AE300ACF619 /* HXAlbumViewController.swift in Sources */, + 7B0B2A90255E1AE300ACF619 /* HXAlbumViewCell.swift in Sources */, + 7B0B2AD1255E82F200ACF619 /* UIDevice+HXPHPicker.swift in Sources */, + 7B0B2A8B255E1AE300ACF619 /* HXPHPickerController.swift in Sources */, + 7B7BE3F22563D34A0008C391 /* HXAlbumView.swift in Sources */, + 7B0B2A93255E1AE300ACF619 /* HXPHPickerViewCell.swift in Sources */, + 7B0B2A95255E1AE300ACF619 /* UIViewController+HXPHPicker.swift in Sources */, + 7B0B2A91255E1AE300ACF619 /* HXPHManager.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1631,55 +1740,77 @@ }; /* End PBXSourcesBuildPhase section */ -/* Begin PBXTargetDependency section */ - 7B0856BC24FA00FE00E93091 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 7B7E3E751E4AACD1002234EE /* HXPhotoPicker-Demo */; - targetProxy = 7B0856BB24FA00FE00E93091 /* PBXContainerItemProxy */; +/* Begin PBXVariantGroup section */ + 7B3EDEC6255E185900937B4A /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 7B3EDEC7255E185900937B4A /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + 7B3EDECB255E185B00937B4A /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 7B3EDECC255E185B00937B4A /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; }; -/* End PBXTargetDependency section */ +/* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ - 7B0856BE24FA00FE00E93091 /* Debug */ = { + 7B3EDED0255E185B00937B4A /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; CLANG_ENABLE_OBJC_WEAK = YES; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CODE_SIGN_STYLE = Automatic; - DEVELOPMENT_TEAM = BMBPTRQ2Q4; + DEVELOPMENT_TEAM = 36YN45CVLK; GCC_C_LANGUAGE_STANDARD = gnu11; - INFOPLIST_FILE = "HXPhotoPicker-DemoUITests/Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 13.5; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + INFOPLIST_FILE = Swift/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; - PRODUCT_BUNDLE_IDENTIFIER = "com.silence.HXPhotoPicker-DemoUITests"; + PRODUCT_BUNDLE_IDENTIFIER = com.silence.HXPHPickerExample; PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; - TEST_TARGET_NAME = "HXPhotoPicker-Demo"; }; name = Debug; }; - 7B0856BF24FA00FE00E93091 /* Release */ = { + 7B3EDED1255E185B00937B4A /* Release */ = { isa = XCBuildConfiguration; buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; CLANG_ENABLE_OBJC_WEAK = YES; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CODE_SIGN_STYLE = Automatic; - DEVELOPMENT_TEAM = BMBPTRQ2Q4; + DEVELOPMENT_TEAM = 36YN45CVLK; GCC_C_LANGUAGE_STANDARD = gnu11; - INFOPLIST_FILE = "HXPhotoPicker-DemoUITests/Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 13.5; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + INFOPLIST_FILE = Swift/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; MTL_FAST_MATH = YES; - PRODUCT_BUNDLE_IDENTIFIER = "com.silence.HXPhotoPicker-DemoUITests"; + PRODUCT_BUNDLE_IDENTIFIER = com.silence.HXPHPickerExample; PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; - TEST_TARGET_NAME = "HXPhotoPicker-Demo"; }; name = Release; }; @@ -1795,7 +1926,7 @@ }; 7B7E3E8E1E4AACD1002234EE /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = AD6E46F470F33649CB1826B8 /* Pods-HXPhotoPicker-Demo.debug.xcconfig */; + baseConfigurationReference = 16A9631049F51EB2C9886F18 /* Pods-HXPhotoPickerExample.debug.xcconfig */; buildSettings = { ARCHS = "$(ARCHS_STANDARD)"; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; @@ -1810,12 +1941,12 @@ "COCOAPODS=1", DEBUG, ); - INFOPLIST_FILE = "HXPhotoPicker-Demo/Info.plist"; + INFOPLIST_FILE = "$(SRCROOT)/Objective-C/Info.plist"; IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; MARKETING_VERSION = 3.1.5; ONLY_ACTIVE_ARCH = YES; - PRODUCT_BUNDLE_IDENTIFIER = "com.silence.HXPhotoPicker-4"; + PRODUCT_BUNDLE_IDENTIFIER = "com.silence.HXPhotoPicker-5"; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; TARGETED_DEVICE_FAMILY = "1,2"; @@ -1825,7 +1956,7 @@ }; 7B7E3E8F1E4AACD1002234EE /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = B50B4B451C32F6F526B3EFDA /* Pods-HXPhotoPicker-Demo.release.xcconfig */; + baseConfigurationReference = 3582D2EABCA69E96E4C95300 /* Pods-HXPhotoPickerExample.release.xcconfig */; buildSettings = { ARCHS = "$(ARCHS_STANDARD)"; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; @@ -1834,11 +1965,11 @@ CODE_SIGN_STYLE = Automatic; DEVELOPMENT_TEAM = 36YN45CVLK; FRAMEWORK_SEARCH_PATHS = "$(inherited)"; - INFOPLIST_FILE = "HXPhotoPicker-Demo/Info.plist"; + INFOPLIST_FILE = "$(SRCROOT)/Objective-C/Info.plist"; IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; MARKETING_VERSION = 3.1.5; - PRODUCT_BUNDLE_IDENTIFIER = "com.silence.HXPhotoPicker-4"; + PRODUCT_BUNDLE_IDENTIFIER = "com.silence.HXPhotoPicker-5"; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; TARGETED_DEVICE_FAMILY = "1,2"; @@ -1918,16 +2049,16 @@ /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ - 7B0856BD24FA00FE00E93091 /* Build configuration list for PBXNativeTarget "HXPhotoPicker-DemoUITests" */ = { + 7B3EDECF255E185B00937B4A /* Build configuration list for PBXNativeTarget "HXPHPickerExample" */ = { isa = XCConfigurationList; buildConfigurations = ( - 7B0856BE24FA00FE00E93091 /* Debug */, - 7B0856BF24FA00FE00E93091 /* Release */, + 7B3EDED0255E185B00937B4A /* Debug */, + 7B3EDED1255E185B00937B4A /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 7B7E3E711E4AACD1002234EE /* Build configuration list for PBXProject "HXPhotoPicker-Demo" */ = { + 7B7E3E711E4AACD1002234EE /* Build configuration list for PBXProject "HXPhotoPickerExample" */ = { isa = XCConfigurationList; buildConfigurations = ( 7B7E3E8B1E4AACD1002234EE /* Debug */, @@ -1936,7 +2067,7 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 7B7E3E8D1E4AACD1002234EE /* Build configuration list for PBXNativeTarget "HXPhotoPicker-Demo" */ = { + 7B7E3E8D1E4AACD1002234EE /* Build configuration list for PBXNativeTarget "HXPhotoPickerExample" */ = { isa = XCConfigurationList; buildConfigurations = ( 7B7E3E8E1E4AACD1002234EE /* Debug */, diff --git a/HXPhotoPicker-Demo.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/HXPhotoPickerExample.xcodeproj/project.xcworkspace/contents.xcworkspacedata similarity index 100% rename from HXPhotoPicker-Demo.xcodeproj/project.xcworkspace/contents.xcworkspacedata rename to HXPhotoPickerExample.xcodeproj/project.xcworkspace/contents.xcworkspacedata diff --git a/HXPhotoPicker-Demo.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/HXPhotoPickerExample.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist similarity index 100% rename from HXPhotoPicker-Demo.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist rename to HXPhotoPickerExample.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist diff --git a/HXPhotoPicker-Demo.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/HXPhotoPickerExample.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings similarity index 100% rename from HXPhotoPicker-Demo.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings rename to HXPhotoPickerExample.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings diff --git a/HXPhotoPicker-Demo.xcodeproj/xcshareddata/xcschemes/HXPhotoPicker.xcscheme b/HXPhotoPickerExample.xcodeproj/xcshareddata/xcschemes/HXPHPickerExample.xcscheme similarity index 62% rename from HXPhotoPicker-Demo.xcodeproj/xcshareddata/xcschemes/HXPhotoPicker.xcscheme rename to HXPhotoPickerExample.xcodeproj/xcshareddata/xcschemes/HXPHPickerExample.xcscheme index 3ec137ae..794fb069 100644 --- a/HXPhotoPicker-Demo.xcodeproj/xcshareddata/xcschemes/HXPhotoPicker.xcscheme +++ b/HXPhotoPickerExample.xcodeproj/xcshareddata/xcschemes/HXPHPickerExample.xcscheme @@ -14,10 +14,10 @@ buildForAnalyzing = "YES"> + BlueprintIdentifier = "7B3EDEBD255E185900937B4A" + BuildableName = "HXPHPickerExample.app" + BlueprintName = "HXPHPickerExample" + ReferencedContainer = "container:HXPhotoPickerExample.xcodeproj"> @@ -26,19 +26,8 @@ buildConfiguration = "Debug" selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" - shouldUseLaunchSchemeArgsEnv = "YES" - codeCoverageEnabled = "YES"> + shouldUseLaunchSchemeArgsEnv = "YES"> - - - - + BlueprintIdentifier = "7B3EDEBD255E185900937B4A" + BuildableName = "HXPHPickerExample.app" + BlueprintName = "HXPHPickerExample" + ReferencedContainer = "container:HXPhotoPickerExample.xcodeproj"> @@ -72,10 +61,10 @@ runnableDebuggingMode = "0"> + BlueprintIdentifier = "7B3EDEBD255E185900937B4A" + BuildableName = "HXPHPickerExample.app" + BlueprintName = "HXPHPickerExample" + ReferencedContainer = "container:HXPhotoPickerExample.xcodeproj"> diff --git a/HXPhotoPicker-Demo.xcodeproj/xcshareddata/xcschemes/HXPhotoPicker-DemoUITests.xcscheme b/HXPhotoPickerExample.xcodeproj/xcshareddata/xcschemes/HXPhotoPickerExample.xcscheme similarity index 60% rename from HXPhotoPicker-Demo.xcodeproj/xcshareddata/xcschemes/HXPhotoPicker-DemoUITests.xcscheme rename to HXPhotoPickerExample.xcodeproj/xcshareddata/xcschemes/HXPhotoPickerExample.xcscheme index e40e91f6..351686fc 100644 --- a/HXPhotoPicker-Demo.xcodeproj/xcshareddata/xcschemes/HXPhotoPicker-DemoUITests.xcscheme +++ b/HXPhotoPickerExample.xcodeproj/xcshareddata/xcschemes/HXPhotoPickerExample.xcscheme @@ -5,6 +5,22 @@ + + + + + + - - - - + + + + + ReferencedContainer = "container:HXPhotoPickerExample.xcodeproj"> @@ -47,15 +47,6 @@ savedToolIdentifier = "" useCustomWorkingDirectory = "NO" debugDocumentVersioning = "YES"> - - - - diff --git a/HXPhotoPicker-Demo.xcworkspace/contents.xcworkspacedata b/HXPhotoPickerExample.xcworkspace/contents.xcworkspacedata similarity index 76% rename from HXPhotoPicker-Demo.xcworkspace/contents.xcworkspacedata rename to HXPhotoPickerExample.xcworkspace/contents.xcworkspacedata index 4c6ec2b3..0b3a51f2 100644 --- a/HXPhotoPicker-Demo.xcworkspace/contents.xcworkspacedata +++ b/HXPhotoPickerExample.xcworkspace/contents.xcworkspacedata @@ -2,7 +2,7 @@ + location = "group:HXPhotoPickerExample.xcodeproj"> diff --git a/HXPhotoPicker-Demo.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/HXPhotoPickerExample.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist similarity index 100% rename from HXPhotoPicker-Demo.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist rename to HXPhotoPickerExample.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist diff --git a/HXPhotoPicker-Demo.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/HXPhotoPickerExample.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings similarity index 100% rename from HXPhotoPicker-Demo.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings rename to HXPhotoPickerExample.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings diff --git a/HXPhotoPicker-Demo/AppDelegate.h b/Objective-C/AppDelegate.h similarity index 91% rename from HXPhotoPicker-Demo/AppDelegate.h rename to Objective-C/AppDelegate.h index e0966cc7..16c5f885 100644 --- a/HXPhotoPicker-Demo/AppDelegate.h +++ b/Objective-C/AppDelegate.h @@ -1,6 +1,6 @@ // // AppDelegate.h -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 17/2/8. // Copyright © 2017年 洪欣. All rights reserved. diff --git a/HXPhotoPicker-Demo/AppDelegate.m b/Objective-C/AppDelegate.m similarity index 99% rename from HXPhotoPicker-Demo/AppDelegate.m rename to Objective-C/AppDelegate.m index b27fa0d5..404a7a55 100644 --- a/HXPhotoPicker-Demo/AppDelegate.m +++ b/Objective-C/AppDelegate.m @@ -1,6 +1,6 @@ // // AppDelegate.m -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 17/2/8. // Copyright © 2017年 洪欣. All rights reserved. diff --git a/HXPhotoPicker-Demo/Assets.xcassets/0.imageset/Contents.json b/Objective-C/Assets.xcassets/0.imageset/Contents.json similarity index 100% rename from HXPhotoPicker-Demo/Assets.xcassets/0.imageset/Contents.json rename to Objective-C/Assets.xcassets/0.imageset/Contents.json diff --git a/HXPhotoPicker-Demo/Assets.xcassets/0.imageset/ab6ee730c94871de3382e22c5ffdacf1.jpg b/Objective-C/Assets.xcassets/0.imageset/ab6ee730c94871de3382e22c5ffdacf1.jpg similarity index 100% rename from HXPhotoPicker-Demo/Assets.xcassets/0.imageset/ab6ee730c94871de3382e22c5ffdacf1.jpg rename to Objective-C/Assets.xcassets/0.imageset/ab6ee730c94871de3382e22c5ffdacf1.jpg diff --git a/HXPhotoPicker-Demo/Assets.xcassets/1.imageset/22ea5c0b716b2548069b91464012eeac.jpg b/Objective-C/Assets.xcassets/1.imageset/22ea5c0b716b2548069b91464012eeac.jpg similarity index 100% rename from HXPhotoPicker-Demo/Assets.xcassets/1.imageset/22ea5c0b716b2548069b91464012eeac.jpg rename to Objective-C/Assets.xcassets/1.imageset/22ea5c0b716b2548069b91464012eeac.jpg diff --git a/HXPhotoPicker-Demo/Assets.xcassets/1.imageset/Contents.json b/Objective-C/Assets.xcassets/1.imageset/Contents.json similarity index 100% rename from HXPhotoPicker-Demo/Assets.xcassets/1.imageset/Contents.json rename to Objective-C/Assets.xcassets/1.imageset/Contents.json diff --git a/HXPhotoPicker-Demo/Assets.xcassets/2.imageset/0954d7ffbe081e75cdcf5bdcbc500f50.jpg b/Objective-C/Assets.xcassets/2.imageset/0954d7ffbe081e75cdcf5bdcbc500f50.jpg similarity index 100% rename from HXPhotoPicker-Demo/Assets.xcassets/2.imageset/0954d7ffbe081e75cdcf5bdcbc500f50.jpg rename to Objective-C/Assets.xcassets/2.imageset/0954d7ffbe081e75cdcf5bdcbc500f50.jpg diff --git a/HXPhotoPicker-Demo/Assets.xcassets/2.imageset/Contents.json b/Objective-C/Assets.xcassets/2.imageset/Contents.json similarity index 100% rename from HXPhotoPicker-Demo/Assets.xcassets/2.imageset/Contents.json rename to Objective-C/Assets.xcassets/2.imageset/Contents.json diff --git a/HXPhotoPicker-Demo/Assets.xcassets/3.imageset/5576ce269d16bd4422b66c5e75cfbe43 (1).jpg b/Objective-C/Assets.xcassets/3.imageset/5576ce269d16bd4422b66c5e75cfbe43 (1).jpg similarity index 100% rename from HXPhotoPicker-Demo/Assets.xcassets/3.imageset/5576ce269d16bd4422b66c5e75cfbe43 (1).jpg rename to Objective-C/Assets.xcassets/3.imageset/5576ce269d16bd4422b66c5e75cfbe43 (1).jpg diff --git a/HXPhotoPicker-Demo/Assets.xcassets/3.imageset/Contents.json b/Objective-C/Assets.xcassets/3.imageset/Contents.json similarity index 100% rename from HXPhotoPicker-Demo/Assets.xcassets/3.imageset/Contents.json rename to Objective-C/Assets.xcassets/3.imageset/Contents.json diff --git a/HXPhotoPicker-Demo/Assets.xcassets/APPCityPlayer_bannerGame.imageset/APPCityPlayer_bannerGame@2x.png b/Objective-C/Assets.xcassets/APPCityPlayer_bannerGame.imageset/APPCityPlayer_bannerGame@2x.png similarity index 100% rename from HXPhotoPicker-Demo/Assets.xcassets/APPCityPlayer_bannerGame.imageset/APPCityPlayer_bannerGame@2x.png rename to Objective-C/Assets.xcassets/APPCityPlayer_bannerGame.imageset/APPCityPlayer_bannerGame@2x.png diff --git a/HXPhotoPicker-Demo/Assets.xcassets/APPCityPlayer_bannerGame.imageset/APPCityPlayer_bannerGame@3x.png b/Objective-C/Assets.xcassets/APPCityPlayer_bannerGame.imageset/APPCityPlayer_bannerGame@3x.png similarity index 100% rename from HXPhotoPicker-Demo/Assets.xcassets/APPCityPlayer_bannerGame.imageset/APPCityPlayer_bannerGame@3x.png rename to Objective-C/Assets.xcassets/APPCityPlayer_bannerGame.imageset/APPCityPlayer_bannerGame@3x.png diff --git a/HXPhotoPicker-Demo/Assets.xcassets/APPCityPlayer_bannerGame.imageset/Contents.json b/Objective-C/Assets.xcassets/APPCityPlayer_bannerGame.imageset/Contents.json similarity index 100% rename from HXPhotoPicker-Demo/Assets.xcassets/APPCityPlayer_bannerGame.imageset/Contents.json rename to Objective-C/Assets.xcassets/APPCityPlayer_bannerGame.imageset/Contents.json diff --git a/HXPhotoPicker-Demo/Assets.xcassets/AppIcon.appiconset/Contents.json b/Objective-C/Assets.xcassets/AppIcon.appiconset/Contents.json similarity index 100% rename from HXPhotoPicker-Demo/Assets.xcassets/AppIcon.appiconset/Contents.json rename to Objective-C/Assets.xcassets/AppIcon.appiconset/Contents.json diff --git a/HXPhotoPicker-Demo/Assets.xcassets/AppIcon.appiconset/HXPhotoPicker_Icon@2x.png b/Objective-C/Assets.xcassets/AppIcon.appiconset/HXPhotoPicker_Icon@2x.png similarity index 100% rename from HXPhotoPicker-Demo/Assets.xcassets/AppIcon.appiconset/HXPhotoPicker_Icon@2x.png rename to Objective-C/Assets.xcassets/AppIcon.appiconset/HXPhotoPicker_Icon@2x.png diff --git a/HXPhotoPicker-Demo/Assets.xcassets/AppIcon.appiconset/Icon-1024.png b/Objective-C/Assets.xcassets/AppIcon.appiconset/Icon-1024.png similarity index 100% rename from HXPhotoPicker-Demo/Assets.xcassets/AppIcon.appiconset/Icon-1024.png rename to Objective-C/Assets.xcassets/AppIcon.appiconset/Icon-1024.png diff --git a/HXPhotoPicker-Demo/Assets.xcassets/AppIcon.appiconset/Icon-60@2x.png b/Objective-C/Assets.xcassets/AppIcon.appiconset/Icon-60@2x.png similarity index 100% rename from HXPhotoPicker-Demo/Assets.xcassets/AppIcon.appiconset/Icon-60@2x.png rename to Objective-C/Assets.xcassets/AppIcon.appiconset/Icon-60@2x.png diff --git a/HXPhotoPicker-Demo/Assets.xcassets/AppIcon.appiconset/Icon-60@3x.png b/Objective-C/Assets.xcassets/AppIcon.appiconset/Icon-60@3x.png similarity index 100% rename from HXPhotoPicker-Demo/Assets.xcassets/AppIcon.appiconset/Icon-60@3x.png rename to Objective-C/Assets.xcassets/AppIcon.appiconset/Icon-60@3x.png diff --git a/HXPhotoPicker-Demo/Assets.xcassets/AppIcon.appiconset/Icon-Notify@2x.png b/Objective-C/Assets.xcassets/AppIcon.appiconset/Icon-Notify@2x.png similarity index 100% rename from HXPhotoPicker-Demo/Assets.xcassets/AppIcon.appiconset/Icon-Notify@2x.png rename to Objective-C/Assets.xcassets/AppIcon.appiconset/Icon-Notify@2x.png diff --git a/HXPhotoPicker-Demo/Assets.xcassets/AppIcon.appiconset/Icon-Notify@3x.png b/Objective-C/Assets.xcassets/AppIcon.appiconset/Icon-Notify@3x.png similarity index 100% rename from HXPhotoPicker-Demo/Assets.xcassets/AppIcon.appiconset/Icon-Notify@3x.png rename to Objective-C/Assets.xcassets/AppIcon.appiconset/Icon-Notify@3x.png diff --git a/HXPhotoPicker-Demo/Assets.xcassets/AppIcon.appiconset/Icon-Small-40@2x.png b/Objective-C/Assets.xcassets/AppIcon.appiconset/Icon-Small-40@2x.png similarity index 100% rename from HXPhotoPicker-Demo/Assets.xcassets/AppIcon.appiconset/Icon-Small-40@2x.png rename to Objective-C/Assets.xcassets/AppIcon.appiconset/Icon-Small-40@2x.png diff --git a/HXPhotoPicker-Demo/Assets.xcassets/AppIcon.appiconset/Icon-Small-40@3x.png b/Objective-C/Assets.xcassets/AppIcon.appiconset/Icon-Small-40@3x.png similarity index 100% rename from HXPhotoPicker-Demo/Assets.xcassets/AppIcon.appiconset/Icon-Small-40@3x.png rename to Objective-C/Assets.xcassets/AppIcon.appiconset/Icon-Small-40@3x.png diff --git a/HXPhotoPicker-Demo/Assets.xcassets/AppIcon.appiconset/Icon-Small@2x.png b/Objective-C/Assets.xcassets/AppIcon.appiconset/Icon-Small@2x.png similarity index 100% rename from HXPhotoPicker-Demo/Assets.xcassets/AppIcon.appiconset/Icon-Small@2x.png rename to Objective-C/Assets.xcassets/AppIcon.appiconset/Icon-Small@2x.png diff --git a/HXPhotoPicker-Demo/Assets.xcassets/AppIcon.appiconset/Icon-Small@3x.png b/Objective-C/Assets.xcassets/AppIcon.appiconset/Icon-Small@3x.png similarity index 100% rename from HXPhotoPicker-Demo/Assets.xcassets/AppIcon.appiconset/Icon-Small@3x.png rename to Objective-C/Assets.xcassets/AppIcon.appiconset/Icon-Small@3x.png diff --git a/HXPhotoPicker-Demo/Assets.xcassets/Contents.json b/Objective-C/Assets.xcassets/Contents.json similarity index 100% rename from HXPhotoPicker-Demo/Assets.xcassets/Contents.json rename to Objective-C/Assets.xcassets/Contents.json diff --git a/HXPhotoPicker-Demo/Assets.xcassets/camera_overturn.imageset/Contents.json b/Objective-C/Assets.xcassets/camera_overturn.imageset/Contents.json similarity index 100% rename from HXPhotoPicker-Demo/Assets.xcassets/camera_overturn.imageset/Contents.json rename to Objective-C/Assets.xcassets/camera_overturn.imageset/Contents.json diff --git a/HXPhotoPicker-Demo/Assets.xcassets/camera_overturn.imageset/camera_overturn@2x.png b/Objective-C/Assets.xcassets/camera_overturn.imageset/camera_overturn@2x.png similarity index 100% rename from HXPhotoPicker-Demo/Assets.xcassets/camera_overturn.imageset/camera_overturn@2x.png rename to Objective-C/Assets.xcassets/camera_overturn.imageset/camera_overturn@2x.png diff --git a/HXPhotoPicker-Demo/Assets.xcassets/camera_overturn.imageset/camera_overturn@3x.png b/Objective-C/Assets.xcassets/camera_overturn.imageset/camera_overturn@3x.png similarity index 100% rename from HXPhotoPicker-Demo/Assets.xcassets/camera_overturn.imageset/camera_overturn@3x.png rename to Objective-C/Assets.xcassets/camera_overturn.imageset/camera_overturn@3x.png diff --git a/HXPhotoPicker-Demo/Assets.xcassets/camera_overturn_highlighted.imageset/Contents.json b/Objective-C/Assets.xcassets/camera_overturn_highlighted.imageset/Contents.json similarity index 100% rename from HXPhotoPicker-Demo/Assets.xcassets/camera_overturn_highlighted.imageset/Contents.json rename to Objective-C/Assets.xcassets/camera_overturn_highlighted.imageset/Contents.json diff --git a/HXPhotoPicker-Demo/Assets.xcassets/camera_overturn_highlighted.imageset/camera_overturn_highlighted@2x.png b/Objective-C/Assets.xcassets/camera_overturn_highlighted.imageset/camera_overturn_highlighted@2x.png similarity index 100% rename from HXPhotoPicker-Demo/Assets.xcassets/camera_overturn_highlighted.imageset/camera_overturn_highlighted@2x.png rename to Objective-C/Assets.xcassets/camera_overturn_highlighted.imageset/camera_overturn_highlighted@2x.png diff --git a/HXPhotoPicker-Demo/Assets.xcassets/camera_overturn_highlighted.imageset/camera_overturn_highlighted@3x.png b/Objective-C/Assets.xcassets/camera_overturn_highlighted.imageset/camera_overturn_highlighted@3x.png similarity index 100% rename from HXPhotoPicker-Demo/Assets.xcassets/camera_overturn_highlighted.imageset/camera_overturn_highlighted@3x.png rename to Objective-C/Assets.xcassets/camera_overturn_highlighted.imageset/camera_overturn_highlighted@3x.png diff --git a/HXPhotoPicker-Demo/Assets.xcassets/feed_more_arrow.imageset/Contents.json b/Objective-C/Assets.xcassets/feed_more_arrow.imageset/Contents.json similarity index 100% rename from HXPhotoPicker-Demo/Assets.xcassets/feed_more_arrow.imageset/Contents.json rename to Objective-C/Assets.xcassets/feed_more_arrow.imageset/Contents.json diff --git a/HXPhotoPicker-Demo/Assets.xcassets/feed_more_arrow.imageset/feed_more_arrow@2x.png b/Objective-C/Assets.xcassets/feed_more_arrow.imageset/feed_more_arrow@2x.png similarity index 100% rename from HXPhotoPicker-Demo/Assets.xcassets/feed_more_arrow.imageset/feed_more_arrow@2x.png rename to Objective-C/Assets.xcassets/feed_more_arrow.imageset/feed_more_arrow@2x.png diff --git a/HXPhotoPicker-Demo/Assets.xcassets/feed_more_arrow.imageset/feed_more_arrow@3x.png b/Objective-C/Assets.xcassets/feed_more_arrow.imageset/feed_more_arrow@3x.png similarity index 100% rename from HXPhotoPicker-Demo/Assets.xcassets/feed_more_arrow.imageset/feed_more_arrow@3x.png rename to Objective-C/Assets.xcassets/feed_more_arrow.imageset/feed_more_arrow@3x.png diff --git a/HXPhotoPicker-Demo/Assets.xcassets/headlines_icon_arrow.imageset/Contents.json b/Objective-C/Assets.xcassets/headlines_icon_arrow.imageset/Contents.json similarity index 100% rename from HXPhotoPicker-Demo/Assets.xcassets/headlines_icon_arrow.imageset/Contents.json rename to Objective-C/Assets.xcassets/headlines_icon_arrow.imageset/Contents.json diff --git a/HXPhotoPicker-Demo/Assets.xcassets/headlines_icon_arrow.imageset/headlines_icon_arrow@2x.png b/Objective-C/Assets.xcassets/headlines_icon_arrow.imageset/headlines_icon_arrow@2x.png similarity index 100% rename from HXPhotoPicker-Demo/Assets.xcassets/headlines_icon_arrow.imageset/headlines_icon_arrow@2x.png rename to Objective-C/Assets.xcassets/headlines_icon_arrow.imageset/headlines_icon_arrow@2x.png diff --git a/HXPhotoPicker-Demo/Assets.xcassets/headlines_icon_arrow.imageset/headlines_icon_arrow@3x.png b/Objective-C/Assets.xcassets/headlines_icon_arrow.imageset/headlines_icon_arrow@3x.png similarity index 100% rename from HXPhotoPicker-Demo/Assets.xcassets/headlines_icon_arrow.imageset/headlines_icon_arrow@3x.png rename to Objective-C/Assets.xcassets/headlines_icon_arrow.imageset/headlines_icon_arrow@3x.png diff --git a/HXPhotoPicker-Demo/Assets.xcassets/hotweibo_back_icon.imageset/Contents.json b/Objective-C/Assets.xcassets/hotweibo_back_icon.imageset/Contents.json similarity index 100% rename from HXPhotoPicker-Demo/Assets.xcassets/hotweibo_back_icon.imageset/Contents.json rename to Objective-C/Assets.xcassets/hotweibo_back_icon.imageset/Contents.json diff --git a/HXPhotoPicker-Demo/Assets.xcassets/hotweibo_back_icon.imageset/hotweibo_back_icon@2x.png b/Objective-C/Assets.xcassets/hotweibo_back_icon.imageset/hotweibo_back_icon@2x.png similarity index 100% rename from HXPhotoPicker-Demo/Assets.xcassets/hotweibo_back_icon.imageset/hotweibo_back_icon@2x.png rename to Objective-C/Assets.xcassets/hotweibo_back_icon.imageset/hotweibo_back_icon@2x.png diff --git a/HXPhotoPicker-Demo/Assets.xcassets/hotweibo_back_icon.imageset/hotweibo_back_icon@3x.png b/Objective-C/Assets.xcassets/hotweibo_back_icon.imageset/hotweibo_back_icon@3x.png similarity index 100% rename from HXPhotoPicker-Demo/Assets.xcassets/hotweibo_back_icon.imageset/hotweibo_back_icon@3x.png rename to Objective-C/Assets.xcassets/hotweibo_back_icon.imageset/hotweibo_back_icon@3x.png diff --git a/HXPhotoPicker-Demo/Assets.xcassets/hx_photo_edit_trash_close.imageset/Contents.json b/Objective-C/Assets.xcassets/hx_photo_edit_trash_close.imageset/Contents.json similarity index 100% rename from HXPhotoPicker-Demo/Assets.xcassets/hx_photo_edit_trash_close.imageset/Contents.json rename to Objective-C/Assets.xcassets/hx_photo_edit_trash_close.imageset/Contents.json diff --git a/HXPhotoPicker-Demo/Assets.xcassets/hx_photo_edit_trash_close.imageset/hx_photo_edit_trash_close@2x.png b/Objective-C/Assets.xcassets/hx_photo_edit_trash_close.imageset/hx_photo_edit_trash_close@2x.png similarity index 100% rename from HXPhotoPicker-Demo/Assets.xcassets/hx_photo_edit_trash_close.imageset/hx_photo_edit_trash_close@2x.png rename to Objective-C/Assets.xcassets/hx_photo_edit_trash_close.imageset/hx_photo_edit_trash_close@2x.png diff --git a/HXPhotoPicker-Demo/Assets.xcassets/hx_photo_edit_trash_close.imageset/hx_photo_edit_trash_close@3x.png b/Objective-C/Assets.xcassets/hx_photo_edit_trash_close.imageset/hx_photo_edit_trash_close@3x.png similarity index 100% rename from HXPhotoPicker-Demo/Assets.xcassets/hx_photo_edit_trash_close.imageset/hx_photo_edit_trash_close@3x.png rename to Objective-C/Assets.xcassets/hx_photo_edit_trash_close.imageset/hx_photo_edit_trash_close@3x.png diff --git a/HXPhotoPicker-Demo/Assets.xcassets/hx_photo_edit_trash_open.imageset/Contents.json b/Objective-C/Assets.xcassets/hx_photo_edit_trash_open.imageset/Contents.json similarity index 100% rename from HXPhotoPicker-Demo/Assets.xcassets/hx_photo_edit_trash_open.imageset/Contents.json rename to Objective-C/Assets.xcassets/hx_photo_edit_trash_open.imageset/Contents.json diff --git a/HXPhotoPicker-Demo/Assets.xcassets/hx_photo_edit_trash_open.imageset/hx_photo_edit_trash_open@2x.png b/Objective-C/Assets.xcassets/hx_photo_edit_trash_open.imageset/hx_photo_edit_trash_open@2x.png similarity index 100% rename from HXPhotoPicker-Demo/Assets.xcassets/hx_photo_edit_trash_open.imageset/hx_photo_edit_trash_open@2x.png rename to Objective-C/Assets.xcassets/hx_photo_edit_trash_open.imageset/hx_photo_edit_trash_open@2x.png diff --git a/HXPhotoPicker-Demo/Assets.xcassets/hx_photo_edit_trash_open.imageset/hx_photo_edit_trash_open@3x.png b/Objective-C/Assets.xcassets/hx_photo_edit_trash_open.imageset/hx_photo_edit_trash_open@3x.png similarity index 100% rename from HXPhotoPicker-Demo/Assets.xcassets/hx_photo_edit_trash_open.imageset/hx_photo_edit_trash_open@3x.png rename to Objective-C/Assets.xcassets/hx_photo_edit_trash_open.imageset/hx_photo_edit_trash_open@3x.png diff --git a/HXPhotoPicker-Demo/Assets.xcassets/news_2_merchant_back.imageset/Contents.json b/Objective-C/Assets.xcassets/news_2_merchant_back.imageset/Contents.json similarity index 100% rename from HXPhotoPicker-Demo/Assets.xcassets/news_2_merchant_back.imageset/Contents.json rename to Objective-C/Assets.xcassets/news_2_merchant_back.imageset/Contents.json diff --git a/HXPhotoPicker-Demo/Assets.xcassets/news_2_merchant_back.imageset/news_2_merchant_back@2x.png b/Objective-C/Assets.xcassets/news_2_merchant_back.imageset/news_2_merchant_back@2x.png similarity index 100% rename from HXPhotoPicker-Demo/Assets.xcassets/news_2_merchant_back.imageset/news_2_merchant_back@2x.png rename to Objective-C/Assets.xcassets/news_2_merchant_back.imageset/news_2_merchant_back@2x.png diff --git a/HXPhotoPicker-Demo/Assets.xcassets/wx_bg_image.imageset/Contents.json b/Objective-C/Assets.xcassets/wx_bg_image.imageset/Contents.json similarity index 100% rename from HXPhotoPicker-Demo/Assets.xcassets/wx_bg_image.imageset/Contents.json rename to Objective-C/Assets.xcassets/wx_bg_image.imageset/Contents.json diff --git a/HXPhotoPicker-Demo/Assets.xcassets/wx_bg_image.imageset/wx_bg_image@2x.png b/Objective-C/Assets.xcassets/wx_bg_image.imageset/wx_bg_image@2x.png similarity index 100% rename from HXPhotoPicker-Demo/Assets.xcassets/wx_bg_image.imageset/wx_bg_image@2x.png rename to Objective-C/Assets.xcassets/wx_bg_image.imageset/wx_bg_image@2x.png diff --git a/HXPhotoPicker-Demo/Assets.xcassets/wx_head_icon.imageset/Contents.json b/Objective-C/Assets.xcassets/wx_head_icon.imageset/Contents.json similarity index 100% rename from HXPhotoPicker-Demo/Assets.xcassets/wx_head_icon.imageset/Contents.json rename to Objective-C/Assets.xcassets/wx_head_icon.imageset/Contents.json diff --git a/HXPhotoPicker-Demo/Assets.xcassets/wx_head_icon.imageset/wx_head_icon@2x.png b/Objective-C/Assets.xcassets/wx_head_icon.imageset/wx_head_icon@2x.png similarity index 100% rename from HXPhotoPicker-Demo/Assets.xcassets/wx_head_icon.imageset/wx_head_icon@2x.png rename to Objective-C/Assets.xcassets/wx_head_icon.imageset/wx_head_icon@2x.png diff --git a/HXPhotoPicker-Demo/Classes/Demo10ViewController.h b/Objective-C/Classes/Demo10ViewController.h similarity index 89% rename from HXPhotoPicker-Demo/Classes/Demo10ViewController.h rename to Objective-C/Classes/Demo10ViewController.h index 94ca3c0e..324f912e 100644 --- a/HXPhotoPicker-Demo/Classes/Demo10ViewController.h +++ b/Objective-C/Classes/Demo10ViewController.h @@ -1,6 +1,6 @@ // // Demo10ViewController.h -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2018/7/21. // Copyright © 2018年 洪欣. All rights reserved. diff --git a/HXPhotoPicker-Demo/Classes/Demo10ViewController.m b/Objective-C/Classes/Demo10ViewController.m similarity index 99% rename from HXPhotoPicker-Demo/Classes/Demo10ViewController.m rename to Objective-C/Classes/Demo10ViewController.m index ccf0c761..5ad3e3c1 100644 --- a/HXPhotoPicker-Demo/Classes/Demo10ViewController.m +++ b/Objective-C/Classes/Demo10ViewController.m @@ -1,6 +1,6 @@ // // Demo10ViewController.m -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2018/7/21. // Copyright © 2018年 洪欣. All rights reserved. diff --git a/HXPhotoPicker-Demo/Classes/Demo11ViewController.h b/Objective-C/Classes/Demo11ViewController.h similarity index 89% rename from HXPhotoPicker-Demo/Classes/Demo11ViewController.h rename to Objective-C/Classes/Demo11ViewController.h index 766c326e..d88b6528 100644 --- a/HXPhotoPicker-Demo/Classes/Demo11ViewController.h +++ b/Objective-C/Classes/Demo11ViewController.h @@ -1,6 +1,6 @@ // // Demo11ViewController.h -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2018/7/21. // Copyright © 2018年 洪欣. All rights reserved. diff --git a/HXPhotoPicker-Demo/Classes/Demo11ViewController.m b/Objective-C/Classes/Demo11ViewController.m similarity index 99% rename from HXPhotoPicker-Demo/Classes/Demo11ViewController.m rename to Objective-C/Classes/Demo11ViewController.m index 996d4676..8ee43dec 100644 --- a/HXPhotoPicker-Demo/Classes/Demo11ViewController.m +++ b/Objective-C/Classes/Demo11ViewController.m @@ -1,6 +1,6 @@ // // Demo11ViewController.m -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2018/7/21. // Copyright © 2018年 洪欣. All rights reserved. diff --git a/HXPhotoPicker-Demo/Classes/Demo11ViewController.xib b/Objective-C/Classes/Demo11ViewController.xib similarity index 100% rename from HXPhotoPicker-Demo/Classes/Demo11ViewController.xib rename to Objective-C/Classes/Demo11ViewController.xib diff --git a/HXPhotoPicker-Demo/Classes/Demo12ViewController.h b/Objective-C/Classes/Demo12ViewController.h similarity index 89% rename from HXPhotoPicker-Demo/Classes/Demo12ViewController.h rename to Objective-C/Classes/Demo12ViewController.h index ee11656b..716a214b 100644 --- a/HXPhotoPicker-Demo/Classes/Demo12ViewController.h +++ b/Objective-C/Classes/Demo12ViewController.h @@ -1,6 +1,6 @@ // // Demo12ViewController.h -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2018/7/24. // Copyright © 2018年 洪欣. All rights reserved. diff --git a/HXPhotoPicker-Demo/Classes/Demo12ViewController.m b/Objective-C/Classes/Demo12ViewController.m similarity index 99% rename from HXPhotoPicker-Demo/Classes/Demo12ViewController.m rename to Objective-C/Classes/Demo12ViewController.m index dcfbed94..c21f6b8b 100644 --- a/HXPhotoPicker-Demo/Classes/Demo12ViewController.m +++ b/Objective-C/Classes/Demo12ViewController.m @@ -1,6 +1,6 @@ // // Demo12ViewController.m -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2018/7/24. // Copyright © 2018年 洪欣. All rights reserved. diff --git a/HXPhotoPicker-Demo/Classes/Demo14ViewController.h b/Objective-C/Classes/Demo14ViewController.h similarity index 91% rename from HXPhotoPicker-Demo/Classes/Demo14ViewController.h rename to Objective-C/Classes/Demo14ViewController.h index af295129..65f4962c 100644 --- a/HXPhotoPicker-Demo/Classes/Demo14ViewController.h +++ b/Objective-C/Classes/Demo14ViewController.h @@ -1,6 +1,6 @@ // // Demo14ViewController.h -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2020/5/22. // Copyright © 2020 洪欣. All rights reserved. diff --git a/HXPhotoPicker-Demo/Classes/Demo14ViewController.m b/Objective-C/Classes/Demo14ViewController.m similarity index 99% rename from HXPhotoPicker-Demo/Classes/Demo14ViewController.m rename to Objective-C/Classes/Demo14ViewController.m index 34abc8ab..b9c31cbe 100644 --- a/HXPhotoPicker-Demo/Classes/Demo14ViewController.m +++ b/Objective-C/Classes/Demo14ViewController.m @@ -1,6 +1,6 @@ // // Demo14ViewController.m -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2020/5/22. // Copyright © 2020 洪欣. All rights reserved. diff --git a/HXPhotoPicker-Demo/Classes/Demo15ViewController.h b/Objective-C/Classes/Demo15ViewController.h similarity index 91% rename from HXPhotoPicker-Demo/Classes/Demo15ViewController.h rename to Objective-C/Classes/Demo15ViewController.h index f8b7b7af..600e05ea 100644 --- a/HXPhotoPicker-Demo/Classes/Demo15ViewController.h +++ b/Objective-C/Classes/Demo15ViewController.h @@ -1,6 +1,6 @@ // // Demo15ViewController.h -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2020/5/27. // Copyright © 2020 洪欣. All rights reserved. diff --git a/HXPhotoPicker-Demo/Classes/Demo15ViewController.m b/Objective-C/Classes/Demo15ViewController.m similarity index 99% rename from HXPhotoPicker-Demo/Classes/Demo15ViewController.m rename to Objective-C/Classes/Demo15ViewController.m index 060c674b..24fc8627 100644 --- a/HXPhotoPicker-Demo/Classes/Demo15ViewController.m +++ b/Objective-C/Classes/Demo15ViewController.m @@ -1,6 +1,6 @@ // // Demo15ViewController.m -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2020/5/27. // Copyright © 2020 洪欣. All rights reserved. diff --git a/HXPhotoPicker-Demo/Classes/Demo1ViewController.h b/Objective-C/Classes/Demo1ViewController.h similarity index 89% rename from HXPhotoPicker-Demo/Classes/Demo1ViewController.h rename to Objective-C/Classes/Demo1ViewController.h index cdca52df..b57915e9 100644 --- a/HXPhotoPicker-Demo/Classes/Demo1ViewController.h +++ b/Objective-C/Classes/Demo1ViewController.h @@ -1,6 +1,6 @@ // // Demo1ViewController.h -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 17/2/17. // Copyright © 2017年 洪欣. All rights reserved. diff --git a/HXPhotoPicker-Demo/Classes/Demo1ViewController.m b/Objective-C/Classes/Demo1ViewController.m similarity index 99% rename from HXPhotoPicker-Demo/Classes/Demo1ViewController.m rename to Objective-C/Classes/Demo1ViewController.m index 5ec99b53..104603ec 100644 --- a/HXPhotoPicker-Demo/Classes/Demo1ViewController.m +++ b/Objective-C/Classes/Demo1ViewController.m @@ -1,6 +1,6 @@ // // Demo1ViewController.m -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 17/2/17. // Copyright © 2017年 洪欣. All rights reserved. diff --git a/HXPhotoPicker-Demo/Classes/Demo1ViewController.xib b/Objective-C/Classes/Demo1ViewController.xib similarity index 100% rename from HXPhotoPicker-Demo/Classes/Demo1ViewController.xib rename to Objective-C/Classes/Demo1ViewController.xib diff --git a/HXPhotoPicker-Demo/Classes/Demo2ViewController.h b/Objective-C/Classes/Demo2ViewController.h similarity index 89% rename from HXPhotoPicker-Demo/Classes/Demo2ViewController.h rename to Objective-C/Classes/Demo2ViewController.h index a5cbb6aa..65bc097d 100644 --- a/HXPhotoPicker-Demo/Classes/Demo2ViewController.h +++ b/Objective-C/Classes/Demo2ViewController.h @@ -1,6 +1,6 @@ // // Demo2ViewController.h -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 17/2/17. // Copyright © 2017年 洪欣. All rights reserved. diff --git a/HXPhotoPicker-Demo/Classes/Demo2ViewController.m b/Objective-C/Classes/Demo2ViewController.m similarity index 99% rename from HXPhotoPicker-Demo/Classes/Demo2ViewController.m rename to Objective-C/Classes/Demo2ViewController.m index 0aaa363b..c1977bce 100644 --- a/HXPhotoPicker-Demo/Classes/Demo2ViewController.m +++ b/Objective-C/Classes/Demo2ViewController.m @@ -1,6 +1,6 @@ // // Demo2ViewController.m -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 17/2/17. // Copyright © 2017年 洪欣. All rights reserved. diff --git a/HXPhotoPicker-Demo/Classes/Demo3ViewController.h b/Objective-C/Classes/Demo3ViewController.h similarity index 89% rename from HXPhotoPicker-Demo/Classes/Demo3ViewController.h rename to Objective-C/Classes/Demo3ViewController.h index 4fcc0bf5..42835809 100644 --- a/HXPhotoPicker-Demo/Classes/Demo3ViewController.h +++ b/Objective-C/Classes/Demo3ViewController.h @@ -1,6 +1,6 @@ // // Demo3ViewController.h -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 17/2/17. // Copyright © 2017年 洪欣. All rights reserved. diff --git a/HXPhotoPicker-Demo/Classes/Demo3ViewController.m b/Objective-C/Classes/Demo3ViewController.m similarity index 99% rename from HXPhotoPicker-Demo/Classes/Demo3ViewController.m rename to Objective-C/Classes/Demo3ViewController.m index ea8bb568..662d7676 100644 --- a/HXPhotoPicker-Demo/Classes/Demo3ViewController.m +++ b/Objective-C/Classes/Demo3ViewController.m @@ -1,6 +1,6 @@ // // Demo3ViewController.m -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 17/2/17. // Copyright © 2017年 洪欣. All rights reserved. diff --git a/HXPhotoPicker-Demo/Classes/Demo4ViewController.h b/Objective-C/Classes/Demo4ViewController.h similarity index 89% rename from HXPhotoPicker-Demo/Classes/Demo4ViewController.h rename to Objective-C/Classes/Demo4ViewController.h index c5ae1f05..a350a9a2 100644 --- a/HXPhotoPicker-Demo/Classes/Demo4ViewController.h +++ b/Objective-C/Classes/Demo4ViewController.h @@ -1,6 +1,6 @@ // // Demo4ViewController.h -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2017/7/1. // Copyright © 2017年 洪欣. All rights reserved. diff --git a/HXPhotoPicker-Demo/Classes/Demo4ViewController.m b/Objective-C/Classes/Demo4ViewController.m similarity index 99% rename from HXPhotoPicker-Demo/Classes/Demo4ViewController.m rename to Objective-C/Classes/Demo4ViewController.m index ff37d318..f6fce29c 100644 --- a/HXPhotoPicker-Demo/Classes/Demo4ViewController.m +++ b/Objective-C/Classes/Demo4ViewController.m @@ -1,6 +1,6 @@ // // Demo4ViewController.m -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2017/7/1. // Copyright © 2017年 洪欣. All rights reserved. diff --git a/HXPhotoPicker-Demo/Classes/Demo4ViewController.xib b/Objective-C/Classes/Demo4ViewController.xib similarity index 100% rename from HXPhotoPicker-Demo/Classes/Demo4ViewController.xib rename to Objective-C/Classes/Demo4ViewController.xib diff --git a/HXPhotoPicker-Demo/Classes/Demo5ViewController.h b/Objective-C/Classes/Demo5ViewController.h similarity index 89% rename from HXPhotoPicker-Demo/Classes/Demo5ViewController.h rename to Objective-C/Classes/Demo5ViewController.h index 54fe4c33..07937414 100644 --- a/HXPhotoPicker-Demo/Classes/Demo5ViewController.h +++ b/Objective-C/Classes/Demo5ViewController.h @@ -1,6 +1,6 @@ // // Demo5ViewController.h -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2017/7/5. // Copyright © 2017年 洪欣. All rights reserved. diff --git a/HXPhotoPicker-Demo/Classes/Demo5ViewController.m b/Objective-C/Classes/Demo5ViewController.m similarity index 99% rename from HXPhotoPicker-Demo/Classes/Demo5ViewController.m rename to Objective-C/Classes/Demo5ViewController.m index 3132f468..a36b053d 100644 --- a/HXPhotoPicker-Demo/Classes/Demo5ViewController.m +++ b/Objective-C/Classes/Demo5ViewController.m @@ -1,6 +1,6 @@ // // Demo5ViewController.m -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2017/7/5. // Copyright © 2017年 洪欣. All rights reserved. diff --git a/HXPhotoPicker-Demo/Classes/Demo6SubViewController.h b/Objective-C/Classes/Demo6SubViewController.h similarity index 92% rename from HXPhotoPicker-Demo/Classes/Demo6SubViewController.h rename to Objective-C/Classes/Demo6SubViewController.h index 4a1a8682..0e085b31 100644 --- a/HXPhotoPicker-Demo/Classes/Demo6SubViewController.h +++ b/Objective-C/Classes/Demo6SubViewController.h @@ -1,6 +1,6 @@ // // Demo6SubViewController.h -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2017/7/26. // Copyright © 2017年 洪欣. All rights reserved. diff --git a/HXPhotoPicker-Demo/Classes/Demo6SubViewController.m b/Objective-C/Classes/Demo6SubViewController.m similarity index 93% rename from HXPhotoPicker-Demo/Classes/Demo6SubViewController.m rename to Objective-C/Classes/Demo6SubViewController.m index 3eff1979..f1a2c0e4 100644 --- a/HXPhotoPicker-Demo/Classes/Demo6SubViewController.m +++ b/Objective-C/Classes/Demo6SubViewController.m @@ -1,6 +1,6 @@ // // Demo6SubViewController.m -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2017/7/26. // Copyright © 2017年 洪欣. All rights reserved. @@ -81,6 +81,9 @@ - (void)viewDidLoad { self.scrollView = scrollView; CGFloat width = scrollView.frame.size.width; + self.manager.configuration.photoEditConfigur.onlyCliping = NO; + self.manager.configuration.photoEditConfigur.aspectRatio = HXPhotoEditAspectRatioType_None; + self.manager.configuration.photoEditConfigur.isRoundCliping = NO; HXPhotoView *photoView = [[HXPhotoView alloc] initWithFrame:CGRectMake(kPhotoViewMargin, kPhotoViewMargin, width - kPhotoViewMargin * 2, 0) manager:self.manager]; photoView.delegate = self; photoView.outerCamera = YES; diff --git a/HXPhotoPicker-Demo/Classes/Demo6ViewController.h b/Objective-C/Classes/Demo6ViewController.h similarity index 89% rename from HXPhotoPicker-Demo/Classes/Demo6ViewController.h rename to Objective-C/Classes/Demo6ViewController.h index ce9c8dae..0e77977c 100644 --- a/HXPhotoPicker-Demo/Classes/Demo6ViewController.h +++ b/Objective-C/Classes/Demo6ViewController.h @@ -1,6 +1,6 @@ // // Demo6ViewController.h -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2017/7/26. // Copyright © 2017年 洪欣. All rights reserved. diff --git a/HXPhotoPicker-Demo/Classes/Demo6ViewController.m b/Objective-C/Classes/Demo6ViewController.m similarity index 96% rename from HXPhotoPicker-Demo/Classes/Demo6ViewController.m rename to Objective-C/Classes/Demo6ViewController.m index c94959f9..8dbff758 100644 --- a/HXPhotoPicker-Demo/Classes/Demo6ViewController.m +++ b/Objective-C/Classes/Demo6ViewController.m @@ -1,6 +1,6 @@ // // Demo6ViewController.m -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2017/7/26. // Copyright © 2017年 洪欣. All rights reserved. @@ -57,6 +57,9 @@ - (HXPhotoManager *)manager { if (!_manager) { _manager = [[HXPhotoManager alloc] initWithType:HXPhotoManagerSelectedTypePhotoAndVideo]; _manager.configuration.type = HXConfigurationTypeWXMoment; + _manager.configuration.photoEditConfigur.onlyCliping = YES; + _manager.configuration.photoEditConfigur.aspectRatio = HXPhotoEditAspectRatioType_1x1; + _manager.configuration.photoEditConfigur.isRoundCliping = YES; } return _manager; } diff --git a/HXPhotoPicker-Demo/Classes/Demo7ViewController.h b/Objective-C/Classes/Demo7ViewController.h similarity index 89% rename from HXPhotoPicker-Demo/Classes/Demo7ViewController.h rename to Objective-C/Classes/Demo7ViewController.h index b9124574..b1490393 100644 --- a/HXPhotoPicker-Demo/Classes/Demo7ViewController.h +++ b/Objective-C/Classes/Demo7ViewController.h @@ -1,6 +1,6 @@ // // Demo7ViewController.h -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2017/9/2. // Copyright © 2017年 洪欣. All rights reserved. diff --git a/HXPhotoPicker-Demo/Classes/Demo7ViewController.m b/Objective-C/Classes/Demo7ViewController.m similarity index 99% rename from HXPhotoPicker-Demo/Classes/Demo7ViewController.m rename to Objective-C/Classes/Demo7ViewController.m index 094186d5..c454398d 100644 --- a/HXPhotoPicker-Demo/Classes/Demo7ViewController.m +++ b/Objective-C/Classes/Demo7ViewController.m @@ -1,6 +1,6 @@ // // Demo7ViewController.m -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2017/9/2. // Copyright © 2017年 洪欣. All rights reserved. diff --git a/HXPhotoPicker-Demo/Classes/Demo8ViewController.h b/Objective-C/Classes/Demo8ViewController.h similarity index 89% rename from HXPhotoPicker-Demo/Classes/Demo8ViewController.h rename to Objective-C/Classes/Demo8ViewController.h index 2326a296..062c8c2a 100644 --- a/HXPhotoPicker-Demo/Classes/Demo8ViewController.h +++ b/Objective-C/Classes/Demo8ViewController.h @@ -1,6 +1,6 @@ // // Demo8ViewController.h -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2017/9/14. // Copyright © 2017年 洪欣. All rights reserved. diff --git a/HXPhotoPicker-Demo/Classes/Demo8ViewController.m b/Objective-C/Classes/Demo8ViewController.m similarity index 99% rename from HXPhotoPicker-Demo/Classes/Demo8ViewController.m rename to Objective-C/Classes/Demo8ViewController.m index 99a94a45..12a8a27b 100644 --- a/HXPhotoPicker-Demo/Classes/Demo8ViewController.m +++ b/Objective-C/Classes/Demo8ViewController.m @@ -1,6 +1,6 @@ // // Demo8ViewController.m -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2017/9/14. // Copyright © 2017年 洪欣. All rights reserved. diff --git a/HXPhotoPicker-Demo/Classes/Demo9Model.h b/Objective-C/Classes/Demo9Model.h similarity index 98% rename from HXPhotoPicker-Demo/Classes/Demo9Model.h rename to Objective-C/Classes/Demo9Model.h index ced83e6f..48d41101 100644 --- a/HXPhotoPicker-Demo/Classes/Demo9Model.h +++ b/Objective-C/Classes/Demo9Model.h @@ -1,6 +1,6 @@ // // Demo9Model.h -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2018/2/14. // Copyright © 2018年 洪欣. All rights reserved. diff --git a/HXPhotoPicker-Demo/Classes/Demo9Model.m b/Objective-C/Classes/Demo9Model.m similarity index 98% rename from HXPhotoPicker-Demo/Classes/Demo9Model.m rename to Objective-C/Classes/Demo9Model.m index 61864979..c34a074c 100644 --- a/HXPhotoPicker-Demo/Classes/Demo9Model.m +++ b/Objective-C/Classes/Demo9Model.m @@ -1,6 +1,6 @@ // // Demo9Model.m -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2018/2/14. // Copyright © 2018年 洪欣. All rights reserved. diff --git a/HXPhotoPicker-Demo/Classes/Demo9ViewCell.h b/Objective-C/Classes/Demo9ViewCell.h similarity index 94% rename from HXPhotoPicker-Demo/Classes/Demo9ViewCell.h rename to Objective-C/Classes/Demo9ViewCell.h index a0d0dd59..925089a4 100644 --- a/HXPhotoPicker-Demo/Classes/Demo9ViewCell.h +++ b/Objective-C/Classes/Demo9ViewCell.h @@ -1,6 +1,6 @@ // // Demo9ViewCell.h -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2018/2/14. // Copyright © 2018年 洪欣. All rights reserved. diff --git a/HXPhotoPicker-Demo/Classes/Demo9ViewCell.m b/Objective-C/Classes/Demo9ViewCell.m similarity index 99% rename from HXPhotoPicker-Demo/Classes/Demo9ViewCell.m rename to Objective-C/Classes/Demo9ViewCell.m index 6bb395e8..d39d6961 100644 --- a/HXPhotoPicker-Demo/Classes/Demo9ViewCell.m +++ b/Objective-C/Classes/Demo9ViewCell.m @@ -1,6 +1,6 @@ // // Demo9ViewCell.m -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2018/2/14. // Copyright © 2018年 洪欣. All rights reserved. diff --git a/HXPhotoPicker-Demo/Classes/Demo9ViewController.h b/Objective-C/Classes/Demo9ViewController.h similarity index 89% rename from HXPhotoPicker-Demo/Classes/Demo9ViewController.h rename to Objective-C/Classes/Demo9ViewController.h index 7411b412..ded2f52d 100644 --- a/HXPhotoPicker-Demo/Classes/Demo9ViewController.h +++ b/Objective-C/Classes/Demo9ViewController.h @@ -1,6 +1,6 @@ // // Demo9ViewController.h -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2018/2/14. // Copyright © 2018年 洪欣. All rights reserved. diff --git a/HXPhotoPicker-Demo/Classes/Demo9ViewController.m b/Objective-C/Classes/Demo9ViewController.m similarity index 99% rename from HXPhotoPicker-Demo/Classes/Demo9ViewController.m rename to Objective-C/Classes/Demo9ViewController.m index 7cc47d76..ba48da35 100644 --- a/HXPhotoPicker-Demo/Classes/Demo9ViewController.m +++ b/Objective-C/Classes/Demo9ViewController.m @@ -1,6 +1,6 @@ // // Demo9ViewController.m -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2018/2/14. // Copyright © 2018年 洪欣. All rights reserved. diff --git a/HXPhotoPicker-Demo/Classes/SettingViewController.h b/Objective-C/Classes/SettingViewController.h similarity index 94% rename from HXPhotoPicker-Demo/Classes/SettingViewController.h rename to Objective-C/Classes/SettingViewController.h index 735b4541..8d825af3 100644 --- a/HXPhotoPicker-Demo/Classes/SettingViewController.h +++ b/Objective-C/Classes/SettingViewController.h @@ -1,6 +1,6 @@ // // SettingViewController.h -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2019/2/2. // Copyright © 2019年 洪欣. All rights reserved. diff --git a/HXPhotoPicker-Demo/Classes/SettingViewController.m b/Objective-C/Classes/SettingViewController.m similarity index 99% rename from HXPhotoPicker-Demo/Classes/SettingViewController.m rename to Objective-C/Classes/SettingViewController.m index 1de71bea..e10766c8 100644 --- a/HXPhotoPicker-Demo/Classes/SettingViewController.m +++ b/Objective-C/Classes/SettingViewController.m @@ -1,6 +1,6 @@ // // SettingViewController.m -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2019/2/2. // Copyright © 2019年 洪欣. All rights reserved. diff --git a/HXPhotoPicker-Demo/Classes/SettingViewController.xib b/Objective-C/Classes/SettingViewController.xib similarity index 100% rename from HXPhotoPicker-Demo/Classes/SettingViewController.xib rename to Objective-C/Classes/SettingViewController.xib diff --git a/HXPhotoPicker-Demo/Classes/UITextView+Placeholder.h b/Objective-C/Classes/UITextView+Placeholder.h similarity index 100% rename from HXPhotoPicker-Demo/Classes/UITextView+Placeholder.h rename to Objective-C/Classes/UITextView+Placeholder.h diff --git a/HXPhotoPicker-Demo/Classes/UITextView+Placeholder.m b/Objective-C/Classes/UITextView+Placeholder.m similarity index 100% rename from HXPhotoPicker-Demo/Classes/UITextView+Placeholder.m rename to Objective-C/Classes/UITextView+Placeholder.m diff --git a/HXPhotoPicker-Demo/Classes/ViewController.h b/Objective-C/Classes/ViewController.h similarity index 88% rename from HXPhotoPicker-Demo/Classes/ViewController.h rename to Objective-C/Classes/ViewController.h index b155952f..466bc5b4 100644 --- a/HXPhotoPicker-Demo/Classes/ViewController.h +++ b/Objective-C/Classes/ViewController.h @@ -1,6 +1,6 @@ // // ViewController.h -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 17/2/8. // Copyright © 2017年 洪欣. All rights reserved. diff --git a/HXPhotoPicker-Demo/Classes/ViewController.m b/Objective-C/Classes/ViewController.m similarity index 99% rename from HXPhotoPicker-Demo/Classes/ViewController.m rename to Objective-C/Classes/ViewController.m index eab4a65a..1ef739eb 100644 --- a/HXPhotoPicker-Demo/Classes/ViewController.m +++ b/Objective-C/Classes/ViewController.m @@ -1,6 +1,6 @@ // // ViewController.m -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 17/2/8. // Copyright © 2017年 洪欣. All rights reserved. diff --git a/HXPhotoPicker-Demo/Classes/WxMomentHeaderView.h b/Objective-C/Classes/WxMomentHeaderView.h similarity index 93% rename from HXPhotoPicker-Demo/Classes/WxMomentHeaderView.h rename to Objective-C/Classes/WxMomentHeaderView.h index 1fee3695..97e524b0 100644 --- a/HXPhotoPicker-Demo/Classes/WxMomentHeaderView.h +++ b/Objective-C/Classes/WxMomentHeaderView.h @@ -1,6 +1,6 @@ // // WxMomentHeaderView.h -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2020/8/4. // Copyright © 2020 洪欣. All rights reserved. diff --git a/HXPhotoPicker-Demo/Classes/WxMomentHeaderView.m b/Objective-C/Classes/WxMomentHeaderView.m similarity index 99% rename from HXPhotoPicker-Demo/Classes/WxMomentHeaderView.m rename to Objective-C/Classes/WxMomentHeaderView.m index b07deda3..459941a4 100644 --- a/HXPhotoPicker-Demo/Classes/WxMomentHeaderView.m +++ b/Objective-C/Classes/WxMomentHeaderView.m @@ -1,6 +1,6 @@ // // WxMomentHeaderView.m -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2020/8/4. // Copyright © 2020 洪欣. All rights reserved. diff --git a/HXPhotoPicker-Demo/Classes/WxMomentHeaderView.xib b/Objective-C/Classes/WxMomentHeaderView.xib similarity index 100% rename from HXPhotoPicker-Demo/Classes/WxMomentHeaderView.xib rename to Objective-C/Classes/WxMomentHeaderView.xib diff --git a/HXPhotoPicker-Demo/Classes/WxMomentPublishViewController.h b/Objective-C/Classes/WxMomentPublishViewController.h similarity index 93% rename from HXPhotoPicker-Demo/Classes/WxMomentPublishViewController.h rename to Objective-C/Classes/WxMomentPublishViewController.h index e813799b..78d0b481 100644 --- a/HXPhotoPicker-Demo/Classes/WxMomentPublishViewController.h +++ b/Objective-C/Classes/WxMomentPublishViewController.h @@ -1,6 +1,6 @@ // // WxMomentPublishViewController.h -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2020/8/4. // Copyright © 2020 洪欣. All rights reserved. diff --git a/HXPhotoPicker-Demo/Classes/WxMomentPublishViewController.m b/Objective-C/Classes/WxMomentPublishViewController.m similarity index 99% rename from HXPhotoPicker-Demo/Classes/WxMomentPublishViewController.m rename to Objective-C/Classes/WxMomentPublishViewController.m index a1f4a398..2ea2af4d 100644 --- a/HXPhotoPicker-Demo/Classes/WxMomentPublishViewController.m +++ b/Objective-C/Classes/WxMomentPublishViewController.m @@ -1,6 +1,6 @@ // // WxMomentPublishViewController.m -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2020/8/4. // Copyright © 2020 洪欣. All rights reserved. diff --git a/HXPhotoPicker-Demo/Classes/WxMomentPublishViewController.xib b/Objective-C/Classes/WxMomentPublishViewController.xib similarity index 100% rename from HXPhotoPicker-Demo/Classes/WxMomentPublishViewController.xib rename to Objective-C/Classes/WxMomentPublishViewController.xib diff --git a/HXPhotoPicker-Demo/Classes/WxMomentViewCell.h b/Objective-C/Classes/WxMomentViewCell.h similarity index 90% rename from HXPhotoPicker-Demo/Classes/WxMomentViewCell.h rename to Objective-C/Classes/WxMomentViewCell.h index 5d4ffe6e..e66b6d7b 100644 --- a/HXPhotoPicker-Demo/Classes/WxMomentViewCell.h +++ b/Objective-C/Classes/WxMomentViewCell.h @@ -1,6 +1,6 @@ // // WxMomentViewCell.h -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2020/8/4. // Copyright © 2020 洪欣. All rights reserved. diff --git a/HXPhotoPicker-Demo/Classes/WxMomentViewCell.m b/Objective-C/Classes/WxMomentViewCell.m similarity index 94% rename from HXPhotoPicker-Demo/Classes/WxMomentViewCell.m rename to Objective-C/Classes/WxMomentViewCell.m index b962e40c..2105a138 100644 --- a/HXPhotoPicker-Demo/Classes/WxMomentViewCell.m +++ b/Objective-C/Classes/WxMomentViewCell.m @@ -1,6 +1,6 @@ // // WxMomentViewCell.m -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2020/8/4. // Copyright © 2020 洪欣. All rights reserved. diff --git a/HXPhotoPicker-Demo/Classes/WxMomentViewCell.xib b/Objective-C/Classes/WxMomentViewCell.xib similarity index 100% rename from HXPhotoPicker-Demo/Classes/WxMomentViewCell.xib rename to Objective-C/Classes/WxMomentViewCell.xib diff --git a/HXPhotoPicker-Demo/Classes/WxMomentViewController.h b/Objective-C/Classes/WxMomentViewController.h similarity index 91% rename from HXPhotoPicker-Demo/Classes/WxMomentViewController.h rename to Objective-C/Classes/WxMomentViewController.h index 2769cbef..ca1e11a8 100644 --- a/HXPhotoPicker-Demo/Classes/WxMomentViewController.h +++ b/Objective-C/Classes/WxMomentViewController.h @@ -1,6 +1,6 @@ // // WxMomentViewController.h -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2020/8/4. // Copyright © 2020 洪欣. All rights reserved. diff --git a/HXPhotoPicker-Demo/Classes/WxMomentViewController.m b/Objective-C/Classes/WxMomentViewController.m similarity index 99% rename from HXPhotoPicker-Demo/Classes/WxMomentViewController.m rename to Objective-C/Classes/WxMomentViewController.m index 0f5afe4c..80bcebeb 100644 --- a/HXPhotoPicker-Demo/Classes/WxMomentViewController.m +++ b/Objective-C/Classes/WxMomentViewController.m @@ -1,6 +1,6 @@ // // WxMomentViewController.m -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 2020/8/4. // Copyright © 2020 洪欣. All rights reserved. diff --git a/HXPhotoPicker-Demo/Classes/WxMomentViewController.xib b/Objective-C/Classes/WxMomentViewController.xib similarity index 100% rename from HXPhotoPicker-Demo/Classes/WxMomentViewController.xib rename to Objective-C/Classes/WxMomentViewController.xib diff --git a/HXPhotoPicker-Demo/Classes/YYFPSLabel.h b/Objective-C/Classes/YYFPSLabel.h similarity index 100% rename from HXPhotoPicker-Demo/Classes/YYFPSLabel.h rename to Objective-C/Classes/YYFPSLabel.h diff --git a/HXPhotoPicker-Demo/Classes/YYFPSLabel.m b/Objective-C/Classes/YYFPSLabel.m similarity index 100% rename from HXPhotoPicker-Demo/Classes/YYFPSLabel.m rename to Objective-C/Classes/YYFPSLabel.m diff --git a/HXPhotoPicker-Demo/Classes/YYWeakProxy.h b/Objective-C/Classes/YYWeakProxy.h similarity index 100% rename from HXPhotoPicker-Demo/Classes/YYWeakProxy.h rename to Objective-C/Classes/YYWeakProxy.h diff --git a/HXPhotoPicker-Demo/Classes/YYWeakProxy.m b/Objective-C/Classes/YYWeakProxy.m similarity index 100% rename from HXPhotoPicker-Demo/Classes/YYWeakProxy.m rename to Objective-C/Classes/YYWeakProxy.m diff --git a/HXPhotoPicker-Demo/Classes/assets/0AA996F1-6566-4CA3-845F-5698DD9726A0.jpg b/Objective-C/Classes/assets/0AA996F1-6566-4CA3-845F-5698DD9726A0.jpg similarity index 100% rename from HXPhotoPicker-Demo/Classes/assets/0AA996F1-6566-4CA3-845F-5698DD9726A0.jpg rename to Objective-C/Classes/assets/0AA996F1-6566-4CA3-845F-5698DD9726A0.jpg diff --git a/HXPhotoPicker-Demo/Classes/assets/9f2f070828381f30ed5bacf8ab014c086e06f024.jpg b/Objective-C/Classes/assets/9f2f070828381f30ed5bacf8ab014c086e06f024.jpg similarity index 100% rename from HXPhotoPicker-Demo/Classes/assets/9f2f070828381f30ed5bacf8ab014c086e06f024.jpg rename to Objective-C/Classes/assets/9f2f070828381f30ed5bacf8ab014c086e06f024.jpg diff --git a/HXPhotoPicker-Demo/Classes/assets/HXCameraBottomView.xib b/Objective-C/Classes/assets/HXCameraBottomView.xib similarity index 100% rename from HXPhotoPicker-Demo/Classes/assets/HXCameraBottomView.xib rename to Objective-C/Classes/assets/HXCameraBottomView.xib diff --git a/HXPhotoPicker-Demo/Classes/assets/HXPhotoEditChartletContentViewCell.xib b/Objective-C/Classes/assets/HXPhotoEditChartletContentViewCell.xib similarity index 100% rename from HXPhotoPicker-Demo/Classes/assets/HXPhotoEditChartletContentViewCell.xib rename to Objective-C/Classes/assets/HXPhotoEditChartletContentViewCell.xib diff --git a/HXPhotoPicker-Demo/Classes/assets/HXPhotoEditChartletListView.xib b/Objective-C/Classes/assets/HXPhotoEditChartletListView.xib similarity index 100% rename from HXPhotoPicker-Demo/Classes/assets/HXPhotoEditChartletListView.xib rename to Objective-C/Classes/assets/HXPhotoEditChartletListView.xib diff --git a/HXPhotoPicker-Demo/Classes/assets/HXPhotoEditChartletPreviewView.xib b/Objective-C/Classes/assets/HXPhotoEditChartletPreviewView.xib similarity index 100% rename from HXPhotoPicker-Demo/Classes/assets/HXPhotoEditChartletPreviewView.xib rename to Objective-C/Classes/assets/HXPhotoEditChartletPreviewView.xib diff --git a/HXPhotoPicker-Demo/Classes/assets/HXPhotoEditClippingToolBar.xib b/Objective-C/Classes/assets/HXPhotoEditClippingToolBar.xib similarity index 100% rename from HXPhotoPicker-Demo/Classes/assets/HXPhotoEditClippingToolBar.xib rename to Objective-C/Classes/assets/HXPhotoEditClippingToolBar.xib diff --git a/HXPhotoPicker-Demo/Classes/assets/HXPhotoEditGraffitiColorSizeView.xib b/Objective-C/Classes/assets/HXPhotoEditGraffitiColorSizeView.xib similarity index 100% rename from HXPhotoPicker-Demo/Classes/assets/HXPhotoEditGraffitiColorSizeView.xib rename to Objective-C/Classes/assets/HXPhotoEditGraffitiColorSizeView.xib diff --git a/HXPhotoPicker-Demo/Classes/assets/HXPhotoEditGraffitiColorView.xib b/Objective-C/Classes/assets/HXPhotoEditGraffitiColorView.xib similarity index 100% rename from HXPhotoPicker-Demo/Classes/assets/HXPhotoEditGraffitiColorView.xib rename to Objective-C/Classes/assets/HXPhotoEditGraffitiColorView.xib diff --git a/HXPhotoPicker-Demo/Classes/assets/HXPhotoEditGraffitiColorViewCell.xib b/Objective-C/Classes/assets/HXPhotoEditGraffitiColorViewCell.xib similarity index 100% rename from HXPhotoPicker-Demo/Classes/assets/HXPhotoEditGraffitiColorViewCell.xib rename to Objective-C/Classes/assets/HXPhotoEditGraffitiColorViewCell.xib diff --git a/HXPhotoPicker-Demo/Classes/assets/HXPhotoEditMosaicView.xib b/Objective-C/Classes/assets/HXPhotoEditMosaicView.xib similarity index 100% rename from HXPhotoPicker-Demo/Classes/assets/HXPhotoEditMosaicView.xib rename to Objective-C/Classes/assets/HXPhotoEditMosaicView.xib diff --git a/HXPhotoPicker-Demo/Classes/assets/HXPhotoEditStickerTrashView.xib b/Objective-C/Classes/assets/HXPhotoEditStickerTrashView.xib similarity index 100% rename from HXPhotoPicker-Demo/Classes/assets/HXPhotoEditStickerTrashView.xib rename to Objective-C/Classes/assets/HXPhotoEditStickerTrashView.xib diff --git a/HXPhotoPicker-Demo/Classes/assets/HXPhotoEditTextView.xib b/Objective-C/Classes/assets/HXPhotoEditTextView.xib similarity index 100% rename from HXPhotoPicker-Demo/Classes/assets/HXPhotoEditTextView.xib rename to Objective-C/Classes/assets/HXPhotoEditTextView.xib diff --git a/HXPhotoPicker-Demo/Classes/assets/HX_PhotoEditBottomView.xib b/Objective-C/Classes/assets/HX_PhotoEditBottomView.xib similarity index 100% rename from HXPhotoPicker-Demo/Classes/assets/HX_PhotoEditBottomView.xib rename to Objective-C/Classes/assets/HX_PhotoEditBottomView.xib diff --git a/HXPhotoPicker-Demo/Classes/assets/IMG_0168.GIF b/Objective-C/Classes/assets/IMG_0168.GIF similarity index 100% rename from HXPhotoPicker-Demo/Classes/assets/IMG_0168.GIF rename to Objective-C/Classes/assets/IMG_0168.GIF diff --git a/HXPhotoPicker-Demo/Classes/assets/LocalSampleVideo.mp4 b/Objective-C/Classes/assets/LocalSampleVideo.mp4 similarity index 100% rename from HXPhotoPicker-Demo/Classes/assets/LocalSampleVideo.mp4 rename to Objective-C/Classes/assets/LocalSampleVideo.mp4 diff --git a/HXPhotoPicker-Demo/Classes/assets/c81.mp4 b/Objective-C/Classes/assets/c81.mp4 similarity index 100% rename from HXPhotoPicker-Demo/Classes/assets/c81.mp4 rename to Objective-C/Classes/assets/c81.mp4 diff --git a/HXPhotoPicker-Demo/Classes/assets/d87.jpeg b/Objective-C/Classes/assets/d87.jpeg similarity index 100% rename from HXPhotoPicker-Demo/Classes/assets/d87.jpeg rename to Objective-C/Classes/assets/d87.jpeg diff --git a/HXPhotoPicker-Demo/Info.plist b/Objective-C/Info.plist similarity index 100% rename from HXPhotoPicker-Demo/Info.plist rename to Objective-C/Info.plist diff --git a/HXPhotoPicker-Demo/main.m b/Objective-C/main.m similarity index 92% rename from HXPhotoPicker-Demo/main.m rename to Objective-C/main.m index 63d4858f..a3099f3b 100644 --- a/HXPhotoPicker-Demo/main.m +++ b/Objective-C/main.m @@ -1,6 +1,6 @@ // // main.m -// HXPhotoPicker-Demo +// HXPhotoPickerExample // // Created by 洪欣 on 17/2/8. // Copyright © 2017年 洪欣. All rights reserved. diff --git a/Podfile b/Podfile index 85d2c661..21e1eb4c 100644 --- a/Podfile +++ b/Podfile @@ -1,6 +1,6 @@ source 'https://github.com/CocoaPods/Specs.git' platform:ios,'8.0' -target "HXPhotoPicker-Demo" do +target "HXPhotoPickerExample" do #ios14下出现显示空白需要将SDWebImage升级到最新版,YYWebImage由于没人维护所以需要替换成SDWebImage pod 'SDWebImage' pod 'AFNetworking' diff --git a/Podfile.lock b/Podfile.lock index 0d5fc1a2..57292b70 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -35,6 +35,6 @@ SPEC CHECKSUMS: Masonry: 678fab65091a9290e40e2832a55e7ab731aad201 SDWebImage: 0b42b8719ab0c5257177d5894306e8a336b21cbb -PODFILE CHECKSUM: 617e1a56912251549edd513d7d9a7e4fd384a9b4 +PODFILE CHECKSUM: f52e65093523abc9a79ffc212d4bb37e27096887 COCOAPODS: 1.9.1 diff --git a/Pods/Manifest.lock b/Pods/Manifest.lock index 0d5fc1a2..57292b70 100644 --- a/Pods/Manifest.lock +++ b/Pods/Manifest.lock @@ -35,6 +35,6 @@ SPEC CHECKSUMS: Masonry: 678fab65091a9290e40e2832a55e7ab731aad201 SDWebImage: 0b42b8719ab0c5257177d5894306e8a336b21cbb -PODFILE CHECKSUM: 617e1a56912251549edd513d7d9a7e4fd384a9b4 +PODFILE CHECKSUM: f52e65093523abc9a79ffc212d4bb37e27096887 COCOAPODS: 1.9.1 diff --git a/Pods/Pods.xcodeproj/project.pbxproj b/Pods/Pods.xcodeproj/project.pbxproj index 16e6240b..df2c85cc 100644 --- a/Pods/Pods.xcodeproj/project.pbxproj +++ b/Pods/Pods.xcodeproj/project.pbxproj @@ -109,8 +109,8 @@ 757EBD77D300E8FAF251BF89058A0063 /* SDWebImageOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 6537BFFC56F7E8F7BE89C49BF733AFCF /* SDWebImageOperation.h */; settings = {ATTRIBUTES = (Project, ); }; }; 759335CEF832A5F72222213C7AC7FFEA /* SDAsyncBlockOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = B05699FCB7BABF634770691B55AE5168 /* SDAsyncBlockOperation.h */; settings = {ATTRIBUTES = (Project, ); }; }; 787AE202E71EF711783ABDEAA6D52204 /* SDImageAPNGCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 07E3814F1103F47907F878ED48B197CC /* SDImageAPNGCoder.m */; }; + 78F72C32BF287269D91D2ABA8267DF5A /* Pods-HXPhotoPickerExample-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 5742B6BAE980582B8893E0BC9AF5ED94 /* Pods-HXPhotoPickerExample-dummy.m */; }; 7CF2AC7A3B3ED03B30C1E4ED662B0551 /* MASLayoutConstraint.h in Headers */ = {isa = PBXBuildFile; fileRef = 31C4D1BD07088BD50F491ACEC77FBB0D /* MASLayoutConstraint.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7F432AB8243A5C1341631177297DB205 /* Pods-HXPhotoPicker-Demo-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = D2FC40E69BF17726FF80D4F13855910F /* Pods-HXPhotoPicker-Demo-dummy.m */; }; 80B7FBA8291E76D74A651249A0E211FC /* SDMemoryCache.m in Sources */ = {isa = PBXBuildFile; fileRef = DE2D9AAF7FE0EFFABA65D763F2DF541D /* SDMemoryCache.m */; }; 81F811A56B6724F7E8E2D25364E595E3 /* NSArray+MASShorthandAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 53C603440637E006422B6A09F7FA0EBC /* NSArray+MASShorthandAdditions.h */; settings = {ATTRIBUTES = (Project, ); }; }; 8231FDD98A7D1659F4FA5788AFEEE6DF /* AFHTTPSessionManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 02C99D6C6F46E7599C5CEF0125324CF7 /* AFHTTPSessionManager.m */; }; @@ -215,32 +215,33 @@ /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ - 1E506C1B1B6D1516D7A7482C37CC275A /* PBXContainerItemProxy */ = { + 2EBEB7B6FFBEDBFEEB76187D419FD20E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; remoteGlobalIDString = 55AF53E6C77A10ED4985E04D74A8878E; remoteInfo = Masonry; }; - 2E5750E566F44C1FE96B1BCD04202316 /* PBXContainerItemProxy */ = { + 982DBCE866CCF7676D2910524B381F51 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 0130B3724283586C0E9D2A112D4F2AA1; - remoteInfo = AFNetworking; + remoteGlobalIDString = 3847153A6E5EEFB86565BA840768F429; + remoteInfo = SDWebImage; }; - 69E4F936D18AB2AC264CED14AABF0B56 /* PBXContainerItemProxy */ = { + B6C3D58D800432AC1FF2BA72A41A2657 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 3847153A6E5EEFB86565BA840768F429; - remoteInfo = SDWebImage; + remoteGlobalIDString = 0130B3724283586C0E9D2A112D4F2AA1; + remoteInfo = AFNetworking; }; /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ 00197B51ECC6BD3BFC5D448DCB16DB24 /* AFNetworking-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "AFNetworking-prefix.pch"; sourceTree = ""; }; 0133C557D78312856E2ABFD3AC598C92 /* AFCompatibilityMacros.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFCompatibilityMacros.h; path = AFNetworking/AFCompatibilityMacros.h; sourceTree = ""; }; + 01A31513A870508886C637E7445D78F5 /* Pods-HXPhotoPickerExample.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-HXPhotoPickerExample.release.xcconfig"; sourceTree = ""; }; 02C99D6C6F46E7599C5CEF0125324CF7 /* AFHTTPSessionManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFHTTPSessionManager.m; path = AFNetworking/AFHTTPSessionManager.m; sourceTree = ""; }; 043A7FA41B5FED4B8EADC046BDB71277 /* SDImageLoadersManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageLoadersManager.m; path = SDWebImage/Core/SDImageLoadersManager.m; sourceTree = ""; }; 049D153784628198BFD163BAC151B2B4 /* UIImage+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+AFNetworking.h"; path = "UIKit+AFNetworking/UIImage+AFNetworking.h"; sourceTree = ""; }; @@ -256,6 +257,7 @@ 102832D20950596140FD90E604592489 /* SDWebImageDownloaderResponseModifier.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDownloaderResponseModifier.h; path = SDWebImage/Core/SDWebImageDownloaderResponseModifier.h; sourceTree = ""; }; 11F6693B0B8148D439064AB4A6003AA0 /* SDImageCoderHelper.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageCoderHelper.m; path = SDWebImage/Core/SDImageCoderHelper.m; sourceTree = ""; }; 13A1F45002BCDD56FAB0CC103D0992D3 /* AFURLSessionManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFURLSessionManager.m; path = AFNetworking/AFURLSessionManager.m; sourceTree = ""; }; + 1487CBC234378493AED9BADE98D51AE4 /* Pods-HXPhotoPickerExample-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-HXPhotoPickerExample-acknowledgements.plist"; sourceTree = ""; }; 17C2B2B69743FACFBBA502AAB7754EA3 /* SDImageAWebPCoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageAWebPCoder.h; path = SDWebImage/Core/SDImageAWebPCoder.h; sourceTree = ""; }; 17EFABD07C2702A0ACF7E2C207D23714 /* UIImage+GIF.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+GIF.h"; path = "SDWebImage/Core/UIImage+GIF.h"; sourceTree = ""; }; 1977D50F229D29DE5CE1F4C214737000 /* SDWebImageDownloader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDownloader.m; path = SDWebImage/Core/SDWebImageDownloader.m; sourceTree = ""; }; @@ -312,6 +314,7 @@ 53C603440637E006422B6A09F7FA0EBC /* NSArray+MASShorthandAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSArray+MASShorthandAdditions.h"; path = "Masonry/NSArray+MASShorthandAdditions.h"; sourceTree = ""; }; 53E3C6E2967FC31148C5F3D3128E5D89 /* SDDisplayLink.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDDisplayLink.h; path = SDWebImage/Private/SDDisplayLink.h; sourceTree = ""; }; 564B2A071E42DB2C3926BBB7AC5D2751 /* NSImage+Compatibility.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSImage+Compatibility.h"; path = "SDWebImage/Core/NSImage+Compatibility.h"; sourceTree = ""; }; + 5742B6BAE980582B8893E0BC9AF5ED94 /* Pods-HXPhotoPickerExample-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-HXPhotoPickerExample-dummy.m"; sourceTree = ""; }; 57ECBB99AC8DEB24DB96FEE7E28C8383 /* SDWebImageDownloaderOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDownloaderOperation.h; path = SDWebImage/Core/SDWebImageDownloaderOperation.h; sourceTree = ""; }; 59FF948DEA5D99637271067396EE10FA /* SDWebImageDownloaderRequestModifier.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDownloaderRequestModifier.m; path = SDWebImage/Core/SDWebImageDownloaderRequestModifier.m; sourceTree = ""; }; 5B93239215164F796A0F447EAE75992D /* UIProgressView+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIProgressView+AFNetworking.h"; path = "UIKit+AFNetworking/UIProgressView+AFNetworking.h"; sourceTree = ""; }; @@ -341,6 +344,7 @@ 756D245450F443CCECE6F3B44C25DF44 /* AFURLRequestSerialization.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFURLRequestSerialization.h; path = AFNetworking/AFURLRequestSerialization.h; sourceTree = ""; }; 76207F760D33180302EE9BC0126D0E4F /* SDFileAttributeHelper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDFileAttributeHelper.h; path = SDWebImage/Private/SDFileAttributeHelper.h; sourceTree = ""; }; 7752B1A4A1D5BA41B88BB71837E40A9D /* NSLayoutConstraint+MASDebugAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSLayoutConstraint+MASDebugAdditions.h"; path = "Masonry/NSLayoutConstraint+MASDebugAdditions.h"; sourceTree = ""; }; + 77DE95D52455539E87518B28C811417B /* Pods-HXPhotoPickerExample-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-HXPhotoPickerExample-acknowledgements.markdown"; sourceTree = ""; }; 78FBCE16EFAA14631A0A8EBDA7B34CA5 /* Masonry.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Masonry.release.xcconfig; sourceTree = ""; }; 7A034B1D388D38BC67150D0528937C2D /* SDAnimatedImagePlayer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDAnimatedImagePlayer.h; path = SDWebImage/Core/SDAnimatedImagePlayer.h; sourceTree = ""; }; 7AC6CBDDF60CE8432F2D42A404EFD010 /* UIView+WebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+WebCache.h"; path = "SDWebImage/Core/UIView+WebCache.h"; sourceTree = ""; }; @@ -380,7 +384,6 @@ 9F7C2B08065EA79ADC99DC562ACD4BE7 /* SDWebImageManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageManager.m; path = SDWebImage/Core/SDWebImageManager.m; sourceTree = ""; }; 9F9194C11CB993049C624881E3FAC198 /* SDImageAssetManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageAssetManager.m; path = SDWebImage/Private/SDImageAssetManager.m; sourceTree = ""; }; A207E5AB19D940ACE41F06A3BBC84B78 /* SDWebImageOptionsProcessor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageOptionsProcessor.m; path = SDWebImage/Core/SDWebImageOptionsProcessor.m; sourceTree = ""; }; - A287B06C6AC26719CF1CEC851E493254 /* Pods-HXPhotoPicker-Demo-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-HXPhotoPicker-Demo-acknowledgements.markdown"; sourceTree = ""; }; A2DF4F8CE438C27F6E90D3C4F1122A22 /* NSBezierPath+SDRoundedCorners.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSBezierPath+SDRoundedCorners.h"; path = "SDWebImage/Private/NSBezierPath+SDRoundedCorners.h"; sourceTree = ""; }; A3777E8227AAF1DC3B488F70DC3F1412 /* SDImageCachesManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageCachesManager.m; path = SDWebImage/Core/SDImageCachesManager.m; sourceTree = ""; }; A4FA15D44DF6BAC7550EDEED10862AA3 /* libAFNetworking.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libAFNetworking.a; path = libAFNetworking.a; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -395,7 +398,6 @@ AA5F48E28F6527629331ED946A87D04A /* SDWebImage.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SDWebImage.release.xcconfig; sourceTree = ""; }; AAF4EDBB614164B0B9F34225878F2699 /* AFNetworking.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = AFNetworking.release.xcconfig; sourceTree = ""; }; AC7493D7A06747B038AA6BBAC2D2A5A0 /* SDImageFrame.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageFrame.h; path = SDWebImage/Core/SDImageFrame.h; sourceTree = ""; }; - AC8C6280DA088CC7CE34E0F42C6FA063 /* Pods-HXPhotoPicker-Demo.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-HXPhotoPicker-Demo.release.xcconfig"; sourceTree = ""; }; AD604124C0E87585D5D97F8C3C3FA951 /* SDImageHEICCoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageHEICCoder.m; path = SDWebImage/Core/SDImageHEICCoder.m; sourceTree = ""; }; AE56C455295218924F5847EDE515F01B /* UIColor+SDHexString.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIColor+SDHexString.m"; path = "SDWebImage/Private/UIColor+SDHexString.m"; sourceTree = ""; }; AFC1EBA76CF0A548DAF4BD2312A634F7 /* SDWebImageCompat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageCompat.h; path = SDWebImage/Core/SDWebImageCompat.h; sourceTree = ""; }; @@ -432,22 +434,20 @@ D137BA31966EABC1C7EA30006FB3F810 /* UIRefreshControl+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIRefreshControl+AFNetworking.h"; path = "UIKit+AFNetworking/UIRefreshControl+AFNetworking.h"; sourceTree = ""; }; D1C5B724A2DC66F711BF280B3F9C1BA9 /* SDDeviceHelper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDDeviceHelper.h; path = SDWebImage/Private/SDDeviceHelper.h; sourceTree = ""; }; D2F7723854F89DC9E59BA2BF72789A72 /* Masonry.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Masonry.h; path = Masonry/Masonry.h; sourceTree = ""; }; - D2FC40E69BF17726FF80D4F13855910F /* Pods-HXPhotoPicker-Demo-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-HXPhotoPicker-Demo-dummy.m"; sourceTree = ""; }; - D37B78F337C88A2DD8B6B9A32616CC3C /* Pods-HXPhotoPicker-Demo-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-HXPhotoPicker-Demo-acknowledgements.plist"; sourceTree = ""; }; D632D60F66BC939F66241337EB5B87BF /* SDAnimatedImage.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDAnimatedImage.m; path = SDWebImage/Core/SDAnimatedImage.m; sourceTree = ""; }; D656972EC843F56441EDB1B63DD23872 /* AFNetworkReachabilityManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFNetworkReachabilityManager.m; path = AFNetworking/AFNetworkReachabilityManager.m; sourceTree = ""; }; D762969CAC59B2B644E87D69FD5CF72D /* SDImageLoader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageLoader.h; path = SDWebImage/Core/SDImageLoader.h; sourceTree = ""; }; D967EAB1ED49111A501C638B72D22F86 /* SDAnimatedImageRep.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDAnimatedImageRep.m; path = SDWebImage/Core/SDAnimatedImageRep.m; sourceTree = ""; }; - DB5763CD05F5B33A7D7610E2E867DD09 /* Pods-HXPhotoPicker-Demo.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-HXPhotoPicker-Demo.debug.xcconfig"; sourceTree = ""; }; DC70E6F53AF3C07E3DDA1B895836939D /* UIView+WebCacheOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+WebCacheOperation.h"; path = "SDWebImage/Core/UIView+WebCacheOperation.h"; sourceTree = ""; }; DE2D9AAF7FE0EFFABA65D763F2DF541D /* SDMemoryCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDMemoryCache.m; path = SDWebImage/Core/SDMemoryCache.m; sourceTree = ""; }; DED5F8BF61C617E1ADAB9A87AEB9AF55 /* SDAnimatedImagePlayer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDAnimatedImagePlayer.m; path = SDWebImage/Core/SDAnimatedImagePlayer.m; sourceTree = ""; }; E014B3A843686358A04FF9B7FFC78E33 /* Masonry-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Masonry-prefix.pch"; sourceTree = ""; }; - E2C39974F069A7FD86D5479EAD0683E6 /* libPods-HXPhotoPicker-Demo.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = "libPods-HXPhotoPicker-Demo.a"; path = "libPods-HXPhotoPicker-Demo.a"; sourceTree = BUILT_PRODUCTS_DIR; }; E4F13D24941EF85C46C15EC5F11B8359 /* UIImage+ExtendedCacheData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+ExtendedCacheData.h"; path = "SDWebImage/Core/UIImage+ExtendedCacheData.h"; sourceTree = ""; }; E554C3BE1B41878706C506399BEF7A0D /* SDFileAttributeHelper.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDFileAttributeHelper.m; path = SDWebImage/Private/SDFileAttributeHelper.m; sourceTree = ""; }; E5A2D0C75EC74552142D6C094D7EB26C /* SDAssociatedObject.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDAssociatedObject.m; path = SDWebImage/Private/SDAssociatedObject.m; sourceTree = ""; }; E744994421BFF3340E21DD3B563CEC43 /* SDImageIOCoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageIOCoder.h; path = SDWebImage/Core/SDImageIOCoder.h; sourceTree = ""; }; + E7FACF0656056AFACF2C82D01BD89750 /* libPods-HXPhotoPickerExample.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = "libPods-HXPhotoPickerExample.a"; path = "libPods-HXPhotoPickerExample.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + E8C65A000081A804C15BCA84FA8CD24B /* Pods-HXPhotoPickerExample.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-HXPhotoPickerExample.debug.xcconfig"; sourceTree = ""; }; E929681DE99DB055B7F4086852E1D6D7 /* SDWebImageDefine.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDefine.m; path = SDWebImage/Core/SDWebImageDefine.m; sourceTree = ""; }; ED446BC7D3E898662F1A68EB63EC80CD /* SDAsyncBlockOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDAsyncBlockOperation.m; path = SDWebImage/Private/SDAsyncBlockOperation.m; sourceTree = ""; }; EDB7472A985AEB59B97AD3F428E81C06 /* MASConstraint.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MASConstraint.h; path = Masonry/MASConstraint.h; sourceTree = ""; }; @@ -486,7 +486,7 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 9DF87687B85E728D106522F393A38E82 /* Frameworks */ = { + F83098D7261392EF91C21D3A2F787B10 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( @@ -594,30 +594,6 @@ path = Masonry; sourceTree = ""; }; - 6C0F69FA6D106E806802E5AA7173F009 /* Products */ = { - isa = PBXGroup; - children = ( - A4FA15D44DF6BAC7550EDEED10862AA3 /* libAFNetworking.a */, - 1FFED36A657123030ABB700256D73F15 /* libMasonry.a */, - E2C39974F069A7FD86D5479EAD0683E6 /* libPods-HXPhotoPicker-Demo.a */, - B0B214D775196BA7CA8E17E53048A493 /* libSDWebImage.a */, - ); - name = Products; - sourceTree = ""; - }; - 72C8489C305D88796BB630308BD29824 /* Pods-HXPhotoPicker-Demo */ = { - isa = PBXGroup; - children = ( - A287B06C6AC26719CF1CEC851E493254 /* Pods-HXPhotoPicker-Demo-acknowledgements.markdown */, - D37B78F337C88A2DD8B6B9A32616CC3C /* Pods-HXPhotoPicker-Demo-acknowledgements.plist */, - D2FC40E69BF17726FF80D4F13855910F /* Pods-HXPhotoPicker-Demo-dummy.m */, - DB5763CD05F5B33A7D7610E2E867DD09 /* Pods-HXPhotoPicker-Demo.debug.xcconfig */, - AC8C6280DA088CC7CE34E0F42C6FA063 /* Pods-HXPhotoPicker-Demo.release.xcconfig */, - ); - name = "Pods-HXPhotoPicker-Demo"; - path = "Target Support Files/Pods-HXPhotoPicker-Demo"; - sourceTree = ""; - }; 73B169F258778839382110D7F828AA0C /* NSURLSession */ = { isa = PBXGroup; children = ( @@ -800,6 +776,17 @@ name = Core; sourceTree = ""; }; + 97CD5420F829B86686CDBC3410FA96AB /* Products */ = { + isa = PBXGroup; + children = ( + A4FA15D44DF6BAC7550EDEED10862AA3 /* libAFNetworking.a */, + 1FFED36A657123030ABB700256D73F15 /* libMasonry.a */, + E7FACF0656056AFACF2C82D01BD89750 /* libPods-HXPhotoPickerExample.a */, + B0B214D775196BA7CA8E17E53048A493 /* libSDWebImage.a */, + ); + name = Products; + sourceTree = ""; + }; B638CB34C0259FCF4209A16CE09BD15D /* AFNetworking */ = { isa = PBXGroup; children = ( @@ -815,6 +802,19 @@ path = AFNetworking; sourceTree = ""; }; + BB0B8DA68B76354FAF16080A6F447254 /* Pods-HXPhotoPickerExample */ = { + isa = PBXGroup; + children = ( + 77DE95D52455539E87518B28C811417B /* Pods-HXPhotoPickerExample-acknowledgements.markdown */, + 1487CBC234378493AED9BADE98D51AE4 /* Pods-HXPhotoPickerExample-acknowledgements.plist */, + 5742B6BAE980582B8893E0BC9AF5ED94 /* Pods-HXPhotoPickerExample-dummy.m */, + E8C65A000081A804C15BCA84FA8CD24B /* Pods-HXPhotoPickerExample.debug.xcconfig */, + 01A31513A870508886C637E7445D78F5 /* Pods-HXPhotoPickerExample.release.xcconfig */, + ); + name = "Pods-HXPhotoPickerExample"; + path = "Target Support Files/Pods-HXPhotoPickerExample"; + sourceTree = ""; + }; C722FFB2FB407D34720D57727B27D482 /* UIKit */ = { isa = PBXGroup; children = ( @@ -842,22 +842,14 @@ name = UIKit; sourceTree = ""; }; - C80585B7C333BA8AFB97A6B18BADA3C0 /* Targets Support Files */ = { - isa = PBXGroup; - children = ( - 72C8489C305D88796BB630308BD29824 /* Pods-HXPhotoPicker-Demo */, - ); - name = "Targets Support Files"; - sourceTree = ""; - }; CF1408CF629C7361332E53B88F7BD30C = { isa = PBXGroup; children = ( 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */, D89477F20FB1DE18A04690586D7808C4 /* Frameworks */, 2CC129490CFDD30B5D0B061225724B69 /* Pods */, - 6C0F69FA6D106E806802E5AA7173F009 /* Products */, - C80585B7C333BA8AFB97A6B18BADA3C0 /* Targets Support Files */, + 97CD5420F829B86686CDBC3410FA96AB /* Products */, + E06EA0D780F64CD5D3804ECAA548AF66 /* Targets Support Files */, ); sourceTree = ""; }; @@ -868,16 +860,17 @@ name = Frameworks; sourceTree = ""; }; + E06EA0D780F64CD5D3804ECAA548AF66 /* Targets Support Files */ = { + isa = PBXGroup; + children = ( + BB0B8DA68B76354FAF16080A6F447254 /* Pods-HXPhotoPickerExample */, + ); + name = "Targets Support Files"; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ - 004BED2D6B7D99043321CFE4114C82ED /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; 1719BD8C8C5FB63E8E3A195F3CF29331 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; @@ -1006,6 +999,13 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + C2407B9A6B0A9AA66B1B4F3FDF2228AD /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXHeadersBuildPhase section */ /* Begin PBXNativeTarget section */ @@ -1026,26 +1026,6 @@ productReference = A4FA15D44DF6BAC7550EDEED10862AA3 /* libAFNetworking.a */; productType = "com.apple.product-type.library.static"; }; - 32727823F487C847FB252A5FB158A11A /* Pods-HXPhotoPicker-Demo */ = { - isa = PBXNativeTarget; - buildConfigurationList = BCEBF67888B33C35C64AA37A89D66873 /* Build configuration list for PBXNativeTarget "Pods-HXPhotoPicker-Demo" */; - buildPhases = ( - 004BED2D6B7D99043321CFE4114C82ED /* Headers */, - FE33DB94D22B8508D37EA7E76745F6D5 /* Sources */, - 9DF87687B85E728D106522F393A38E82 /* Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - 9D063B6B12DA561B8849DBCA85565275 /* PBXTargetDependency */, - 013B38358F6A2AD9D06828AC2DBF08BE /* PBXTargetDependency */, - E21BC8DB83082400FF8FCDC4AC9DCB88 /* PBXTargetDependency */, - ); - name = "Pods-HXPhotoPicker-Demo"; - productName = "Pods-HXPhotoPicker-Demo"; - productReference = E2C39974F069A7FD86D5479EAD0683E6 /* libPods-HXPhotoPicker-Demo.a */; - productType = "com.apple.product-type.library.static"; - }; 3847153A6E5EEFB86565BA840768F429 /* SDWebImage */ = { isa = PBXNativeTarget; buildConfigurationList = B1FA491365904802AD9D5BF4683066A6 /* Build configuration list for PBXNativeTarget "SDWebImage" */; @@ -1080,6 +1060,26 @@ productReference = 1FFED36A657123030ABB700256D73F15 /* libMasonry.a */; productType = "com.apple.product-type.library.static"; }; + D1D724522871333DBFA94E79471AC4FE /* Pods-HXPhotoPickerExample */ = { + isa = PBXNativeTarget; + buildConfigurationList = 1F52B3F70DC9935ADF4A76C908EAD3E2 /* Build configuration list for PBXNativeTarget "Pods-HXPhotoPickerExample" */; + buildPhases = ( + C2407B9A6B0A9AA66B1B4F3FDF2228AD /* Headers */, + 40011648948ADBC3C1DE5FC8FD5B2645 /* Sources */, + F83098D7261392EF91C21D3A2F787B10 /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + 29B374E55CB4F5209B90D691C544F999 /* PBXTargetDependency */, + 151B15FC7071A8407DAA0680A8307AD0 /* PBXTargetDependency */, + DFB9E324F1E27F00CF31BC1CFF9BE64F /* PBXTargetDependency */, + ); + name = "Pods-HXPhotoPickerExample"; + productName = "Pods-HXPhotoPickerExample"; + productReference = E7FACF0656056AFACF2C82D01BD89750 /* libPods-HXPhotoPickerExample.a */; + productType = "com.apple.product-type.library.static"; + }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ @@ -1098,13 +1098,13 @@ Base, ); mainGroup = CF1408CF629C7361332E53B88F7BD30C; - productRefGroup = 6C0F69FA6D106E806802E5AA7173F009 /* Products */; + productRefGroup = 97CD5420F829B86686CDBC3410FA96AB /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( 0130B3724283586C0E9D2A112D4F2AA1 /* AFNetworking */, 55AF53E6C77A10ED4985E04D74A8878E /* Masonry */, - 32727823F487C847FB252A5FB158A11A /* Pods-HXPhotoPicker-Demo */, + D1D724522871333DBFA94E79471AC4FE /* Pods-HXPhotoPickerExample */, 3847153A6E5EEFB86565BA840768F429 /* SDWebImage */, ); }; @@ -1134,6 +1134,14 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 40011648948ADBC3C1DE5FC8FD5B2645 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 78F72C32BF287269D91D2ABA8267DF5A /* Pods-HXPhotoPickerExample-dummy.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 811E255F9DA765E3FED6313B480D487A /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -1229,34 +1237,26 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - FE33DB94D22B8508D37EA7E76745F6D5 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 7F432AB8243A5C1341631177297DB205 /* Pods-HXPhotoPicker-Demo-dummy.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ - 013B38358F6A2AD9D06828AC2DBF08BE /* PBXTargetDependency */ = { + 151B15FC7071A8407DAA0680A8307AD0 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = Masonry; target = 55AF53E6C77A10ED4985E04D74A8878E /* Masonry */; - targetProxy = 1E506C1B1B6D1516D7A7482C37CC275A /* PBXContainerItemProxy */; + targetProxy = 2EBEB7B6FFBEDBFEEB76187D419FD20E /* PBXContainerItemProxy */; }; - 9D063B6B12DA561B8849DBCA85565275 /* PBXTargetDependency */ = { + 29B374E55CB4F5209B90D691C544F999 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = AFNetworking; target = 0130B3724283586C0E9D2A112D4F2AA1 /* AFNetworking */; - targetProxy = 2E5750E566F44C1FE96B1BCD04202316 /* PBXContainerItemProxy */; + targetProxy = B6C3D58D800432AC1FF2BA72A41A2657 /* PBXContainerItemProxy */; }; - E21BC8DB83082400FF8FCDC4AC9DCB88 /* PBXTargetDependency */ = { + DFB9E324F1E27F00CF31BC1CFF9BE64F /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = SDWebImage; target = 3847153A6E5EEFB86565BA840768F429 /* SDWebImage */; - targetProxy = 69E4F936D18AB2AC264CED14AABF0B56 /* PBXContainerItemProxy */; + targetProxy = 982DBCE866CCF7676D2910524B381F51 /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ @@ -1285,6 +1285,51 @@ }; name = Debug; }; + 13DA88666CF53B09B2AFB8BEEB333A26 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = E8C65A000081A804C15BCA84FA8CD24B /* Pods-HXPhotoPickerExample.debug.xcconfig */; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; + ARCHS = "$(ARCHS_STANDARD)"; + CODE_SIGN_IDENTITY = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MACH_O_TYPE = staticlib; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 2A6BE2EFB24163F8760F7FDFBD9E8D96 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 01A31513A870508886C637E7445D78F5 /* Pods-HXPhotoPickerExample.release.xcconfig */; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; + ARCHS = "$(ARCHS_STANDARD)"; + CODE_SIGN_IDENTITY = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MACH_O_TYPE = staticlib; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; 4BE66A09A74FD25164AAB3C2645B9B93 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { @@ -1369,29 +1414,6 @@ }; name = Debug; }; - 5AF5911D6BFDD7C66EF6A9AADA29A97C /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = AC8C6280DA088CC7CE34E0F42C6FA063 /* Pods-HXPhotoPicker-Demo.release.xcconfig */; - buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; - ARCHS = "$(ARCHS_STANDARD)"; - CODE_SIGN_IDENTITY = "iPhone Developer"; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - MACH_O_TYPE = staticlib; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; 7353D52D6880D22B810A9AFFE8474018 /* Debug */ = { isa = XCBuildConfiguration; baseConfigurationReference = BEA01A425AB4602985E07E2B38874079 /* AFNetworking.debug.xcconfig */; @@ -1480,28 +1502,6 @@ }; name = Debug; }; - 97715D95FA379355B65C9CD8DD3BEC6E /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = DB5763CD05F5B33A7D7610E2E867DD09 /* Pods-HXPhotoPicker-Demo.debug.xcconfig */; - buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; - ARCHS = "$(ARCHS_STANDARD)"; - CODE_SIGN_IDENTITY = "iPhone Developer"; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - MACH_O_TYPE = staticlib; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; BBC96101FAB84DBB4D79AD0C0B4D5576 /* Release */ = { isa = XCBuildConfiguration; baseConfigurationReference = 78FBCE16EFAA14631A0A8EBDA7B34CA5 /* Masonry.release.xcconfig */; @@ -1589,29 +1589,29 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */ = { + 1F52B3F70DC9935ADF4A76C908EAD3E2 /* Build configuration list for PBXNativeTarget "Pods-HXPhotoPickerExample" */ = { isa = XCConfigurationList; buildConfigurations = ( - 7EF7227D9B20A1D549000096ACCB23D7 /* Debug */, - 4BE66A09A74FD25164AAB3C2645B9B93 /* Release */, + 13DA88666CF53B09B2AFB8BEEB333A26 /* Debug */, + 2A6BE2EFB24163F8760F7FDFBD9E8D96 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - B1FA491365904802AD9D5BF4683066A6 /* Build configuration list for PBXNativeTarget "SDWebImage" */ = { + 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */ = { isa = XCConfigurationList; buildConfigurations = ( - 4FF00C2A785B420048917CEE6BA6F10A /* Debug */, - D87A66F163EC214EE369973C052B5D94 /* Release */, + 7EF7227D9B20A1D549000096ACCB23D7 /* Debug */, + 4BE66A09A74FD25164AAB3C2645B9B93 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - BCEBF67888B33C35C64AA37A89D66873 /* Build configuration list for PBXNativeTarget "Pods-HXPhotoPicker-Demo" */ = { + B1FA491365904802AD9D5BF4683066A6 /* Build configuration list for PBXNativeTarget "SDWebImage" */ = { isa = XCConfigurationList; buildConfigurations = ( - 97715D95FA379355B65C9CD8DD3BEC6E /* Debug */, - 5AF5911D6BFDD7C66EF6A9AADA29A97C /* Release */, + 4FF00C2A785B420048917CEE6BA6F10A /* Debug */, + D87A66F163EC214EE369973C052B5D94 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; diff --git a/Pods/Target Support Files/Pods-HXPhotoPicker-Demo/Pods-HXPhotoPicker-Demo-dummy.m b/Pods/Target Support Files/Pods-HXPhotoPicker-Demo/Pods-HXPhotoPicker-Demo-dummy.m deleted file mode 100644 index c0daf640..00000000 --- a/Pods/Target Support Files/Pods-HXPhotoPicker-Demo/Pods-HXPhotoPicker-Demo-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import -@interface PodsDummy_Pods_HXPhotoPicker_Demo : NSObject -@end -@implementation PodsDummy_Pods_HXPhotoPicker_Demo -@end diff --git a/Pods/Target Support Files/Pods-HXPhotoPicker-Demo/Pods-HXPhotoPicker-Demo-acknowledgements.markdown b/Pods/Target Support Files/Pods-HXPhotoPickerExample/Pods-HXPhotoPickerExample-acknowledgements.markdown similarity index 100% rename from Pods/Target Support Files/Pods-HXPhotoPicker-Demo/Pods-HXPhotoPicker-Demo-acknowledgements.markdown rename to Pods/Target Support Files/Pods-HXPhotoPickerExample/Pods-HXPhotoPickerExample-acknowledgements.markdown diff --git a/Pods/Target Support Files/Pods-HXPhotoPicker-Demo/Pods-HXPhotoPicker-Demo-acknowledgements.plist b/Pods/Target Support Files/Pods-HXPhotoPickerExample/Pods-HXPhotoPickerExample-acknowledgements.plist similarity index 100% rename from Pods/Target Support Files/Pods-HXPhotoPicker-Demo/Pods-HXPhotoPicker-Demo-acknowledgements.plist rename to Pods/Target Support Files/Pods-HXPhotoPickerExample/Pods-HXPhotoPickerExample-acknowledgements.plist diff --git a/Pods/Target Support Files/Pods-HXPhotoPickerExample/Pods-HXPhotoPickerExample-dummy.m b/Pods/Target Support Files/Pods-HXPhotoPickerExample/Pods-HXPhotoPickerExample-dummy.m new file mode 100644 index 00000000..7f54018e --- /dev/null +++ b/Pods/Target Support Files/Pods-HXPhotoPickerExample/Pods-HXPhotoPickerExample-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_Pods_HXPhotoPickerExample : NSObject +@end +@implementation PodsDummy_Pods_HXPhotoPickerExample +@end diff --git a/Pods/Target Support Files/Pods-HXPhotoPicker-Demo/Pods-HXPhotoPicker-Demo.debug.xcconfig b/Pods/Target Support Files/Pods-HXPhotoPickerExample/Pods-HXPhotoPickerExample.debug.xcconfig similarity index 100% rename from Pods/Target Support Files/Pods-HXPhotoPicker-Demo/Pods-HXPhotoPicker-Demo.debug.xcconfig rename to Pods/Target Support Files/Pods-HXPhotoPickerExample/Pods-HXPhotoPickerExample.debug.xcconfig diff --git a/Pods/Target Support Files/Pods-HXPhotoPicker-Demo/Pods-HXPhotoPicker-Demo.release.xcconfig b/Pods/Target Support Files/Pods-HXPhotoPickerExample/Pods-HXPhotoPickerExample.release.xcconfig similarity index 100% rename from Pods/Target Support Files/Pods-HXPhotoPicker-Demo/Pods-HXPhotoPicker-Demo.release.xcconfig rename to Pods/Target Support Files/Pods-HXPhotoPickerExample/Pods-HXPhotoPickerExample.release.xcconfig diff --git a/Swift/AppDelegate.swift b/Swift/AppDelegate.swift new file mode 100644 index 00000000..7764f769 --- /dev/null +++ b/Swift/AppDelegate.swift @@ -0,0 +1,29 @@ +// +// AppDelegate.swift +// HXPhotoPickerSwift +// +// Created by 洪欣 on 2020/11/12. +// Copyright © 2020 洪欣. All rights reserved. +// + +import UIKit + +@main +class AppDelegate: UIResponder, UIApplicationDelegate { + + var window: UIWindow? + + func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { + // Override point for customization after application launch. + window = UIWindow.init(frame: UIScreen.main.bounds) + + let vc = ViewController.init() + let nav = UINavigationController.init(rootViewController: vc) + + window?.rootViewController = nav + window?.makeKeyAndVisible() + return true + } + +} + diff --git a/Swift/Assets.xcassets/AccentColor.colorset/Contents.json b/Swift/Assets.xcassets/AccentColor.colorset/Contents.json new file mode 100644 index 00000000..eb878970 --- /dev/null +++ b/Swift/Assets.xcassets/AccentColor.colorset/Contents.json @@ -0,0 +1,11 @@ +{ + "colors" : [ + { + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Swift/Assets.xcassets/AppIcon.appiconset/Contents.json b/Swift/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 00000000..3ac36510 --- /dev/null +++ b/Swift/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,123 @@ +{ + "images" : [ + { + "filename" : "Icon-Notify@2x.png", + "idiom" : "iphone", + "scale" : "2x", + "size" : "20x20" + }, + { + "filename" : "Icon-Notify@3x.png", + "idiom" : "iphone", + "scale" : "3x", + "size" : "20x20" + }, + { + "idiom" : "iphone", + "scale" : "1x", + "size" : "29x29" + }, + { + "filename" : "Icon-Small@2x.png", + "idiom" : "iphone", + "scale" : "2x", + "size" : "29x29" + }, + { + "filename" : "Icon-Small@3x.png", + "idiom" : "iphone", + "scale" : "3x", + "size" : "29x29" + }, + { + "filename" : "Icon-Small-40@2x.png", + "idiom" : "iphone", + "scale" : "2x", + "size" : "40x40" + }, + { + "filename" : "Icon-Small-40@3x.png", + "idiom" : "iphone", + "scale" : "3x", + "size" : "40x40" + }, + { + "idiom" : "iphone", + "scale" : "1x", + "size" : "57x57" + }, + { + "filename" : "HXPhotoPicker_Icon@2x.png", + "idiom" : "iphone", + "scale" : "2x", + "size" : "57x57" + }, + { + "filename" : "Icon-60@2x.png", + "idiom" : "iphone", + "scale" : "2x", + "size" : "60x60" + }, + { + "filename" : "Icon-60@3x.png", + "idiom" : "iphone", + "scale" : "3x", + "size" : "60x60" + }, + { + "idiom" : "ipad", + "scale" : "1x", + "size" : "20x20" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "20x20" + }, + { + "idiom" : "ipad", + "scale" : "1x", + "size" : "29x29" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "29x29" + }, + { + "idiom" : "ipad", + "scale" : "1x", + "size" : "40x40" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "40x40" + }, + { + "idiom" : "ipad", + "scale" : "1x", + "size" : "76x76" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "76x76" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "83.5x83.5" + }, + { + "filename" : "Icon-1024.png", + "idiom" : "ios-marketing", + "scale" : "1x", + "size" : "1024x1024" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Swift/Assets.xcassets/AppIcon.appiconset/HXPhotoPicker_Icon@2x.png b/Swift/Assets.xcassets/AppIcon.appiconset/HXPhotoPicker_Icon@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..6362a2c962afba2e20e98af8b71aded0cda182cc GIT binary patch literal 2691 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.l)f#19@&y+nP9Do3=2BKC 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%0A)5F5i*4?&iYUckxS&--qYvB$d*g1) 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 literal 0 HcmV?d00001 diff --git a/Swift/Assets.xcassets/AppIcon.appiconset/Icon-60@2x.png b/Swift/Assets.xcassets/AppIcon.appiconset/Icon-60@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..0538753168b8db111f5871bb606b02120ac02635 GIT binary patch literal 11976 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 KsTv8B(EkNB1qJp1 literal 0 HcmV?d00001 diff --git a/Swift/Assets.xcassets/AppIcon.appiconset/Icon-60@3x.png b/Swift/Assets.xcassets/AppIcon.appiconset/Icon-60@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..a5c0d715a00fe8b8e1e1fdcce5684b810776423c GIT binary patch literal 19398 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

xyiYE^T>JW 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 RRN4Rl002ovPDHLkV1kw6Lks`_ literal 0 HcmV?d00001 diff --git a/Swift/Assets.xcassets/AppIcon.appiconset/Icon-Notify@2x.png b/Swift/Assets.xcassets/AppIcon.appiconset/Icon-Notify@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..9175f36b50a0751cf74f30b9b76655fd490f701a GIT binary patch literal 5718 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

xyiYE^T>JW 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 IM6N<$f=HyPT>t<8 literal 0 HcmV?d00001 diff --git a/Swift/Assets.xcassets/AppIcon.appiconset/Icon-Notify@3x.png b/Swift/Assets.xcassets/AppIcon.appiconset/Icon-Notify@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..8c6b5177388d27a066ce27ca91c2dd920fa42336 GIT binary patch literal 7449 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 SyxRWn79cC7Bv~VF9P&S5)c4>3 literal 0 HcmV?d00001 diff --git a/Swift/Assets.xcassets/AppIcon.appiconset/Icon-Small-40@2x.png b/Swift/Assets.xcassets/AppIcon.appiconset/Icon-Small-40@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..c431ff04e3871404d2c17782cf6438a40fd298be GIT binary patch literal 9004 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 literal 0 HcmV?d00001 diff --git a/Swift/Assets.xcassets/AppIcon.appiconset/Icon-Small-40@3x.png b/Swift/Assets.xcassets/AppIcon.appiconset/Icon-Small-40@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..0538753168b8db111f5871bb606b02120ac02635 GIT binary patch literal 11976 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 KsTv8B(EkNB1qJp1 literal 0 HcmV?d00001 diff --git a/Swift/Assets.xcassets/AppIcon.appiconset/Icon-Small@2x.png b/Swift/Assets.xcassets/AppIcon.appiconset/Icon-Small@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..b7d481fc1bee152d93bdce02704b0752d1a868b7 GIT binary patch literal 7218 zcmYM31ydXfu%!ogcMqSxH{!A4UHYD)PU+*`~q*0AO0#%gJde%gMdd@^H1W zcd`Zmlpq;dDEjY*i9_}>Kj0g_gV&LDEmp#M#~48@BVF;1jTVg|ofJPTHqXldX`YkL zOim9(=;MWC1&nE)1J&O3hsD-$5<7iwM?b&fD=xn*#8_VX~gO06;A%ti!n=*}p zyx@k?h=;a&!VS`NbPT>lhoF8A6?8*<3<#ASfFvZq*I+gTbGiP6m!CE9&|ZABeG3LY z%BIKy0IA3#a^G=xWL)3?T*N~=NB~^9!WFPWs9L|p5VFVqyB!fWn9dbCk?nWClJp?JBSd3Lp7l@vWJVktgK61iW3-L9C0X}xq zy*s>vP78InAgbiB3}cA$7)VK(f?bpOaskb+krMRdD+^k5ZO2mhyW)ejt0{m2xoUi>e=?I(+~Kos#$w_Xu7( zsyp#C(uhH*dNnMgYZSVA5-rphM2>4>qv!whb_?+H8?6*diTp|2p}D#c@T}l1cdPO| z@qYP!fPhq-jZ}d(kjI(Jm}LdQ(5Jj7!mahy>E74o5YiLU1AJH~ym34v@;o;R<(_zE z9Cd~3DkDU%e@(rpf)l<+1q|f=wwmMGybU>f>?J`|@hdWn`az9&FZd@^Y=ra+g5w5& z-UGp;3kNY&i<`PH1Th)Dv`0K{6Py`NW`?bgsv=FM4>uR4QiJA%B-Tw`gTo&tw?TSO z1Vtk0B67p{S-^RYc^xKHNF#%bFRMrz!($P;KnIJV=uv=A)?z@1$mt}1X23|HQ?bIn z#L|hXlx0f+DgiGEJa9##pbDbN6hjijzf$t!t4o&^8rVr1 zMsUhz6%pBCwNf}sCl%RFvfD8~VxIH@N+WrARL77kEsZ&lRr`5)L51QS|5X#vyy#SLY?ZjGY9oUCZaH_Y&01Kz1Na6~qv~3dxYj zP|6{1suDn#P$WIpmsJuLw4NgF~>?=WE7<+ol*096(dZf}8AG3$aah z*0QM?EL<&|*INJ6%RTH?YM!xa-mAeh@XPY@OUu~qSm4-?F&z3a1viBl1r9Q8sjaP; zCI$M0uy}ce5(WQ+pQM4@He}J{d!*I;F8rOAVY$NDYW&&eb(1?0$`eZADM9o|^s0)d z6n@i$0$#ice0k2Tv)54jg6tN9=Ik-2jz#x+YR^)?WWUA-@+1`VRfxb!)ZfpO|}`| zU@7cxDX>4&nZ5Cot^d?*RbI!Zx>XW+t@URa;DX$i1rv>J{a*wKNA1w!yfYi(4w;yUMV=I!G_$bd7&UDx_Z!P)Qr-+UoN$<#F>g?xW_lWFt`e5Hm& zl}LX{?DGt!q>V3*`%xd0bKpqgK4%_{=8Za|b<6h1smLwK-N+HhvCExB8AMt~&PLuu z`A1D)yF%W{%PUmIHxKY_qxm+puU)Kd?RW*5643M~B;*qK@aE%50fY3Ob0an)cF~&fsqix( zRm!5u_R0;)u4!_qdW=3AQf-0;wGsr2BDRQ#pbj*UAc`p#1YWw&X>KN2odH}cGeVSGXA zy=&>`zbytD^_gQ}W5SQuy-op*X5L4Xqaql4E4icDZPwJhT$UzB0Y?vUe|>W&8->2Gjy#T2i4o`z8kLq0tJzPB{J>ySg%^rJf9lD?&)Rp-)t>##c z>IXUVj%8I6pH8(q?Ww%-JU-ciK7gjdxi{={!Igx1CgtcqmyDbZJH9=hAa6#+QG^T5 zx$-W5Xguh(8UA}@)YHU2voM?P%IE@Id9*W{YD|-=3I4w7QrF@1R7N#Ll_$3C-8c)L zpF8DUZD_}?dOzoNrm-Aot~r!n3eI{2`e*x(1|dqZ1qVF7f7H~w1D!gqPOO=})t^kv zqL8AfP$WkgV09#H4Zup%OB2JlaT*1m1ZeK9uerpq4X7(boqT;C@D5WzipYt?R40xp z4cC;TqPK-!hDTM~X^EyTxeIeabeDbQroBNDL8+dX`>b#8qcxuLC4Hj;OD`(t7o$A$ z_pqP;J}ifNSKmfmt?lJ<-W%JUlFqyDSZwrLX328CfU|ubjx+Yzsq_e{O@3#3S6#K9 zKc-Q%2$`&Kv@Zrbc02c+Oo_GnjGX1HRXwa;+;!xcPqeXyVBTdaT0PnEiU{T_6B{=6p@{wh8%R^D_J`P|<% zT2dWvdg6O>(b~Y(cy^lGF7)E6x=!|c`62)1btifUC+W#HfFZE*e&@dY!E!lh7ZNo&17coW@O;sAhUNp-CIaqiSGdTBmi8b z2^I?ThDf#Ws>AR3xQJRlcbgTgv1&d-4M6ht3*0p<%ywRckQvM_=7%onx2Vui&GW?A zRX`!5Y2f?^BD!`8CvTm}2loMtEbrfbE}01t7wa1CahXxPOv_qxfI10LKDA_&;-a03g~PfcXD18vpoTCI8cZJO7vP zh4BBI5G_Rb|Ng(|aH#C%KcKlO8F&H!#Ekz5PFaWH900(6R+g9fV23noWFK#(OZ0mB zQ(|>`nomN4Ue)a#H!ev$KAfdI-D?*RS^2s^HlAmI=qnGoTo{iwL4N{` zN*I1bVI2#(mNarUs4FzT#NP&-eR^17QgJx@13Z7$UU3-Ipn>JBC^CEkK6BX%xP$t` zTAC_|43p=;G3sa5Es?t_nZl!Q^d+n_R~&b>;>GEr(`rh(rph5`bE_~9_EDBm3W$cz zLP32%QV59=x<>Moe!ivO*EF*Q62#WhNtIp%rxl{(bL1dNjYTQxacV+LNv$wK&%pRy z^zxO@Y$DPubq7vE8-P(SivgR++~Z+&lyc^R$h$GFkZZEz&B`CY}-32z(G8h`P7|)rbsHc&!(?TK+#*`8%QagrgZdF%$-ZBstM8Ap1u1pn;Gv4wbuL;>Z1MLi1^*nhwp7AiHUOH;c24mzkZreJojy9!_c6 z(RsInZZ26(8f<>2`|ard&x~tMD!hdgl=25_%ONZH;~COMcmh>XobvnIzY&i^KX$z4 zKK|mkI6^Lu11W{xl1I8_Zb*1AC+~_jBCyhrb6;m?X@j?Z4)|3F_V!?czVPxDbVWl!Y*Ofr)xX0U1?F3FX^De?FnM+dYovYe{Gv)vULc^oFo zBp&9biRT@RUHcO$7_M)nAv2Gl5O=*StBBd@d&i7Pc>;EwCLD~`!6(=(Y%a+QYUqCA1u{({KKe#~a7M7HR#lZvPCJ zBL7NivvkSl(YePcZ@$^vjH=_a-lfARq1)->GS%xL4kE5!YY7;PIdd9#*#vlF9gPGo zwTj*@g*ee2vQ>Yrz2<&U6u?`OQ#d+^B3G!TJ>`?B*S7?^@iPv{(UXVIiUIuROZJx< za16)!T-}9|ON?YrLh| zUiYy$1gFu}1tVGY=ot|$4Lj#mw#z5-DU+0?*doWf-F>Py^ptzlP)He}t4cRZHfIK| z`l-CrjzwkXV>^vE`HqEy-5t=~Fq$4-%Q_f#38?AQB5;NO&?v1mwE)|H4&f#HV{AY9 z;cg*gf7u_4u0yV`k4j-<$&;c*hoJUV+bXH!&mSgYs?%*_NIkwY`Ebcc&7VC=9;1lB zVLdJa%(%E^;R^e4Ke&YWq+aR{(u=ri5QoU$+%&r?;Ds>pYGbaldf(lO<6qU}RDpg) z;$|#Q<1QvTj7O07OkFS|Qe`qnqktMg8i9@NOf4V0-nzrH^Q@P`1)KRL=r6*oB~gnCeAmyz?|y@imWkI>%$yxhw*fBNxA^iD)w&g*H|CYy zt{CmiplDlYtUSk>X?m|HiR7DNn0lSGIo2ElV^L$8`be9!sHiecmU?zD%Y1&zT7cKB;e>=D%@~giuHDk2czbTSb`}iz%@deL;K! z$Trh6HTIvkV}YiFnftS$nU|LDr)NEX{Nd6{v*1#fR>@H03$!aivAsfPV*ds!cJq5o zM1d{cYnRfn=F?!o3vezj5q^s)R9M5YOlD42iXy=Mro;f~56BJSn1o!ELY`TSLehB; zxU$@Zy+|$@A5%pg5ZShq#xAd=Z4js9BZjrPqDZoO#bai92{D8W?zU1R&$t-eImVnE zepN5>A9>aKXoV7%bRSguluH8LE;8Re)oTleJF}k>YE(UUE(M;{JNM6R>y86tuourGl4E@4oPVYg|&zAR(b_zQD6gWQR(0kM3u~Tf5F;6p87f*;Zw69buTe=;PWjZ zb%gP$>{Hk zqQlkWzmAwv^%_br4#7+pW6A9V_LQGWF!0OSjTwKE_`*!$!Q6&oa<@&~TB3*@zFcrN zFM*`H4+4r}BAYKvR3v))eScOKlu|irUenU;En$dP9*2P;@{X zM3fN;%3=8+W8P}){q_(T?5a=Nl>*&H-NFMY0mzClJuI3&Qw^aUn^jESrv2nzfUF!s zXz=Dy8l&o4(&HIJlgs#bcyoz0`->HeSUUQq(o#vb=Q3_H=#{hDnMqH>-1Y2qBOO>U zfwA9{>f18V!k>iKF^!2PMpQ@mt%79T5$x#(O(SdUg%UX3Bv8q0ES+$N17 z(sAexrv@DsL4@AnU}siJTYFy&PtVwu%|QLrCd0VS()HRq4Y0{ltP?PZF)5c-#&rqV z$=S*gEjG;wF9{IaI;DPi4i)djah{670-Z9c)DvmhOg+jaf_OmVnQ$K!)1{E?O1lU& zqj##cnFATeTB>mPgWv^xRcLiQe{E%{S5Rm?^R-j7Mu?4?GcTN~v}wLuQh`MODRr%8=>4vKB&@TXhMt+ooHGwxZ6 zH-o5$5#6ei;gx)q>~S=kGltE0Ct1CmTI&v18}ZZv9sO!Pr8m3?ci72Z#MgG}5lti^ zAs2o)wvnfERn*%QLGCHLUryNm?DBjW>;5q>`j7PhdN>cYr0BPt2C4Zk9bXgtIfNBp zFl`5~7%jBTCgN|VLbZlzv(#~3h*YPTBZvV4Vid_aZ~`{(un zsvP)Y*Yy2j1OlI^PE?c19-YflP2XRMg0Hspq~6ztB@P|m{J~6|z4S0OtNH$lv(>5; zQ_N~>(7&~I*|6Wh7LQqv$z4<|93%{IGy#DMcamgVtzicVd3|J61O!nyNk?t)9 zInzaHVtZ%8Iwxa+5 literal 0 HcmV?d00001 diff --git a/Swift/Assets.xcassets/AppIcon.appiconset/Icon-Small@3x.png b/Swift/Assets.xcassets/AppIcon.appiconset/Icon-Small@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..361f6b7fe25fcde15530a3ac678970bb493fbcc0 GIT binary patch literal 9733 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 P0D!!-id2JyY54yFz^z~^ literal 0 HcmV?d00001 diff --git a/Swift/Assets.xcassets/Contents.json b/Swift/Assets.xcassets/Contents.json new file mode 100644 index 00000000..73c00596 --- /dev/null +++ b/Swift/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Swift/Assets.xcassets/wx_head_icon.imageset/Contents.json b/Swift/Assets.xcassets/wx_head_icon.imageset/Contents.json new file mode 100644 index 00000000..6053ae17 --- /dev/null +++ b/Swift/Assets.xcassets/wx_head_icon.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "wx_head_icon@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Swift/Assets.xcassets/wx_head_icon.imageset/wx_head_icon@2x.png b/Swift/Assets.xcassets/wx_head_icon.imageset/wx_head_icon@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..b2615329da252544c2d499573934f1fff2cc6cd1 GIT binary patch literal 166052 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 goSk& + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Swift/Base.lproj/Main.storyboard b/Swift/Base.lproj/Main.storyboard new file mode 100644 index 00000000..25a76385 --- /dev/null +++ b/Swift/Base.lproj/Main.storyboard @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Swift/Info.plist b/Swift/Info.plist new file mode 100644 index 00000000..e93aad4b --- /dev/null +++ b/Swift/Info.plist @@ -0,0 +1,69 @@ + + + + + UIViewControllerBasedStatusBarAppearance + + NSAppTransportSecurity + + NSAllowsArbitraryLoads + + + PHPhotoLibraryPreventAutomaticLimitedAccessAlert + + NSPhotoLibraryUsageDescription + 是否允许此App访问你的媒体资料库 + NSMicrophoneUsageDescription + 是否允许此App使用你的麦克风 + NSLocationWhenInUseUsageDescription + 是否允许此App获取定位信息 + NSLocationAlwaysUsageDescription + 是否允许此App后台获取定位信息 + NSCameraUsageDescription + 是否允许此App使用你的相机 + CFBundleDevelopmentRegion + zh_CN + CFBundleDisplayName + 照片(Swift) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + $(PRODUCT_BUNDLE_PACKAGE_TYPE) + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1 + LSRequiresIPhoneOS + + UIApplicationSupportsIndirectInputEvents + + UILaunchStoryboardName + LaunchScreen + UIMainStoryboardFile + Main + UIRequiredDeviceCapabilities + + armv7 + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + UIInterfaceOrientationPortraitUpsideDown + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + + diff --git a/Swift/ViewController.swift b/Swift/ViewController.swift new file mode 100644 index 00000000..733fc5bc --- /dev/null +++ b/Swift/ViewController.swift @@ -0,0 +1,61 @@ +// +// ViewController.swift +// HXPhotoPickerSwift +// +// Created by 洪欣 on 2020/11/12. +// Copyright © 2020 洪欣. All rights reserved. +// + +import UIKit +import Photos + +class ViewController: UIViewController , UITableViewDataSource, UITableViewDelegate, HXPHPickerControllerDelegate { + + var tableView : UITableView? + + var selectedAssets: [HXPHAsset] = [] + var isOriginal: Bool = false + override func viewDidLoad() { + super.viewDidLoad() + // Do any additional setup after loading the view, typically from a nib. + title = "swift" + view.backgroundColor = UIColor.white + + tableView = UITableView.init(frame: CGRect.init(x: 0, y: 0, width: UIScreen.main.bounds.width, height: UIScreen.main.bounds.height), style: UITableView.Style.plain) + tableView?.dataSource = self + tableView?.delegate = self + + tableView?.register(UITableViewCell.classForCoder(), forCellReuseIdentifier: "cellId") + + view.addSubview(tableView!) + +// UINavigationBar.appearance().isTranslucent = false + } + + func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + return 10 + } + func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + let cell = tableView.dequeueReusableCell(withIdentifier: "cellId") + cell?.textLabel?.text = "\( indexPath.row)" + return cell! + } + + func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { + tableView.deselectRow(at: indexPath, animated: true) + let config = HXPHConfiguration.init() +// config.selectType = HXPHSelectType.video + let nav = HXPHPickerController.init(config: config) + nav.pickerContollerDelegate = self + nav.selectedAssetArray = selectedAssets + nav.isOriginal = isOriginal +// nav.modalPresentationStyle = UIModalPresentationStyle.fullScreen + present(nav, animated: true, completion: nil) + } + func pickerContollerDidFinish(_ pickerController: HXPHPickerController, with selectedAssetArray: [HXPHAsset], isOriginal: Bool) { + self.selectedAssets = selectedAssetArray + self.isOriginal = isOriginal + } + +} +