├── .github
└── ISSUE_TEMPLATE.MD
├── .gitignore
├── .swiftpm
└── xcode
│ └── package.xcworkspace
│ └── contents.xcworkspacedata
├── .travis.yml
├── CHANGELOG.md
├── Example
├── Example.xcodeproj
│ ├── project.pbxproj
│ └── project.xcworkspace
│ │ ├── contents.xcworkspacedata
│ │ └── xcshareddata
│ │ └── IDEWorkspaceChecks.plist
└── Example
│ ├── AppDelegate.swift
│ ├── Assets.xcassets
│ ├── AccentColor.colorset
│ │ └── Contents.json
│ ├── AppIcon.appiconset
│ │ └── Contents.json
│ ├── Contents.json
│ ├── addPhoto.imageset
│ │ ├── Contents.json
│ │ ├── addPhoto@2x.png
│ │ └── addPhoto@3x.png
│ ├── close.imageset
│ │ ├── Contents.json
│ │ ├── close@2x.png
│ │ └── close@3x.png
│ ├── image1.imageset
│ │ ├── Contents.json
│ │ └── image1.png
│ ├── image2.imageset
│ │ ├── Contents.json
│ │ └── image2.png
│ ├── image3.imageset
│ │ ├── Contents.json
│ │ └── image3.png
│ ├── imageSticker1.imageset
│ │ ├── Contents.json
│ │ └── imageSticker1.png
│ ├── imageSticker10.imageset
│ │ ├── Contents.json
│ │ └── imageSticker10.png
│ ├── imageSticker11.imageset
│ │ ├── Contents.json
│ │ └── imageSticker11.png
│ ├── imageSticker12.imageset
│ │ ├── Contents.json
│ │ └── imageSticker12.png
│ ├── imageSticker13.imageset
│ │ ├── Contents.json
│ │ └── imageSticker13.png
│ ├── imageSticker14.imageset
│ │ ├── Contents.json
│ │ └── imageSticker14.png
│ ├── imageSticker15.imageset
│ │ ├── Contents.json
│ │ └── imageSticker15.png
│ ├── imageSticker16.imageset
│ │ ├── Contents.json
│ │ └── imageSticker16.png
│ ├── imageSticker17.imageset
│ │ ├── Contents.json
│ │ └── imageSticker17.png
│ ├── imageSticker18.imageset
│ │ ├── Contents.json
│ │ └── imageSticker18.png
│ ├── imageSticker2.imageset
│ │ ├── Contents.json
│ │ └── imageSticker2.png
│ ├── imageSticker3.imageset
│ │ ├── Contents.json
│ │ └── imageSticker3.png
│ ├── imageSticker4.imageset
│ │ ├── Contents.json
│ │ └── imageSticker4.png
│ ├── imageSticker5.imageset
│ │ ├── Contents.json
│ │ └── imageSticker5.png
│ ├── imageSticker6.imageset
│ │ ├── Contents.json
│ │ └── imageSticker6.png
│ ├── imageSticker7.imageset
│ │ ├── Contents.json
│ │ └── imageSticker7.png
│ ├── imageSticker8.imageset
│ │ ├── Contents.json
│ │ └── imageSticker8.png
│ ├── imageSticker9.imageset
│ │ ├── Contents.json
│ │ └── imageSticker9.png
│ └── playVideo.imageset
│ │ ├── Contents.json
│ │ ├── playVideo@2x.png
│ │ └── playVideo@3x.png
│ ├── Base.lproj
│ ├── LaunchScreen.storyboard
│ └── Main.storyboard
│ ├── CustomAlert
│ ├── CustomAlertController.swift
│ ├── CustomAlertControllerTransitionAnimation.swift
│ └── ZLCustomAlertAction+Color.swift
│ ├── Example-Bridging-Header.h
│ ├── Extension
│ └── UIColor+Hex.swift
│ ├── FLAnimatedImage
│ ├── FLAnimatedImage.h
│ ├── FLAnimatedImage.m
│ ├── FLAnimatedImageView.h
│ └── FLAnimatedImageView.m
│ ├── ImageCell.swift
│ ├── ImageStickerContainerView.swift
│ ├── Info.plist
│ ├── Kingfisher
│ ├── Cache
│ │ ├── CacheSerializer.swift
│ │ ├── DiskStorage.swift
│ │ ├── FormatIndicatedCacheSerializer.swift
│ │ ├── ImageCache.swift
│ │ ├── MemoryStorage.swift
│ │ └── Storage.swift
│ ├── Extensions
│ │ ├── CPListItem+Kingfisher.swift
│ │ ├── ImageView+Kingfisher.swift
│ │ ├── NSButton+Kingfisher.swift
│ │ ├── NSTextAttachment+Kingfisher.swift
│ │ ├── TVMonogramView+Kingfisher.swift
│ │ ├── UIButton+Kingfisher.swift
│ │ └── WKInterfaceImage+Kingfisher.swift
│ ├── General
│ │ ├── ImageSource
│ │ │ ├── AVAssetImageDataProvider.swift
│ │ │ ├── ImageDataProvider.swift
│ │ │ ├── Resource.swift
│ │ │ └── Source.swift
│ │ ├── KF.swift
│ │ ├── KFOptionsSetter.swift
│ │ ├── Kingfisher.swift
│ │ ├── KingfisherError.swift
│ │ ├── KingfisherManager.swift
│ │ └── KingfisherOptionsInfo.swift
│ ├── Image
│ │ ├── Filter.swift
│ │ ├── GIFAnimatedImage.swift
│ │ ├── GraphicsContext.swift
│ │ ├── Image.swift
│ │ ├── ImageDrawing.swift
│ │ ├── ImageFormat.swift
│ │ ├── ImageProcessor.swift
│ │ ├── ImageProgressive.swift
│ │ ├── ImageTransition.swift
│ │ └── Placeholder.swift
│ ├── Networking
│ │ ├── AuthenticationChallengeResponsable.swift
│ │ ├── ImageDataProcessor.swift
│ │ ├── ImageDownloader.swift
│ │ ├── ImageDownloaderDelegate.swift
│ │ ├── ImageModifier.swift
│ │ ├── ImagePrefetcher.swift
│ │ ├── RedirectHandler.swift
│ │ ├── RequestModifier.swift
│ │ ├── RetryStrategy.swift
│ │ ├── SessionDataTask.swift
│ │ └── SessionDelegate.swift
│ ├── Utility
│ │ ├── Box.swift
│ │ ├── CallbackQueue.swift
│ │ ├── Delegate.swift
│ │ ├── ExtensionHelpers.swift
│ │ ├── Result.swift
│ │ ├── Runtime.swift
│ │ ├── SizeExtensions.swift
│ │ └── String+MD5.swift
│ └── Views
│ │ ├── AnimatedImageView.swift
│ │ └── Indicator.swift
│ ├── LanguagePickerView.swift
│ ├── PhotoConfigureCNViewController.swift
│ ├── PhotoConfigureViewController.swift
│ ├── SnapKit
│ ├── Constraint.swift
│ ├── ConstraintAttributes.swift
│ ├── ConstraintConfig.swift
│ ├── ConstraintConstantTarget.swift
│ ├── ConstraintDSL.swift
│ ├── ConstraintDescription.swift
│ ├── ConstraintDirectionalInsetTarget.swift
│ ├── ConstraintDirectionalInsets.swift
│ ├── ConstraintInsetTarget.swift
│ ├── ConstraintInsets.swift
│ ├── ConstraintItem.swift
│ ├── ConstraintLayoutGuide+Extensions.swift
│ ├── ConstraintLayoutGuide.swift
│ ├── ConstraintLayoutGuideDSL.swift
│ ├── ConstraintLayoutSupport.swift
│ ├── ConstraintLayoutSupportDSL.swift
│ ├── ConstraintMaker.swift
│ ├── ConstraintMakerEditable.swift
│ ├── ConstraintMakerExtendable.swift
│ ├── ConstraintMakerFinalizable.swift
│ ├── ConstraintMakerPriortizable.swift
│ ├── ConstraintMakerRelatable+Extensions.swift
│ ├── ConstraintMakerRelatable.swift
│ ├── ConstraintMultiplierTarget.swift
│ ├── ConstraintOffsetTarget.swift
│ ├── ConstraintPriority.swift
│ ├── ConstraintPriorityTarget.swift
│ ├── ConstraintRelatableTarget.swift
│ ├── ConstraintRelation.swift
│ ├── ConstraintView+Extensions.swift
│ ├── ConstraintView.swift
│ ├── ConstraintViewDSL.swift
│ ├── Debugging.swift
│ ├── LayoutConstraint.swift
│ ├── LayoutConstraintItem.swift
│ ├── SnapKit.h
│ ├── Typealiases.swift
│ └── UILayoutSupport+Extensions.swift
│ ├── ViewController.swift
│ ├── WeChatMomentDemoViewController.swift
│ ├── ZLCustomFilter.swift
│ ├── ar.lproj
│ ├── LaunchScreen.strings
│ └── Main.strings
│ ├── de.lproj
│ ├── LaunchScreen.strings
│ └── Main.strings
│ ├── es-419.lproj
│ ├── LaunchScreen.strings
│ └── Main.strings
│ ├── fr.lproj
│ ├── LaunchScreen.strings
│ └── Main.strings
│ ├── id.lproj
│ ├── LaunchScreen.strings
│ └── Main.strings
│ ├── it.lproj
│ ├── LaunchScreen.strings
│ └── Main.strings
│ ├── ja.lproj
│ ├── LaunchScreen.strings
│ └── Main.strings
│ ├── ko.lproj
│ ├── LaunchScreen.strings
│ └── Main.strings
│ ├── ms.lproj
│ ├── LaunchScreen.strings
│ └── Main.strings
│ ├── nl.lproj
│ ├── LaunchScreen.strings
│ └── Main.strings
│ ├── pt-BR.lproj
│ ├── LaunchScreen.strings
│ └── Main.strings
│ ├── ru.lproj
│ ├── LaunchScreen.strings
│ └── Main.strings
│ ├── tr.lproj
│ ├── LaunchScreen.strings
│ └── Main.strings
│ ├── vi.lproj
│ ├── LaunchScreen.strings
│ └── Main.strings
│ ├── zh-Hans.lproj
│ ├── LaunchScreen.strings
│ └── Main.strings
│ └── zh-Hant.lproj
│ ├── LaunchScreen.strings
│ └── Main.strings
├── LICENSE
├── Package.swift
├── README.md
├── README_CN.md
├── Sources
├── Animation
│ ├── ZLClipImageDismissAnimatedTransition.swift
│ ├── ZLImagePreviewDismissInteractiveTransition.swift
│ ├── ZLPhotoPreviewAnimatedTransition.swift
│ └── ZLPhotoPreviewPopInteractiveTransition.swift
├── Camera
│ └── ZLCustomCamera.swift
├── Edit
│ ├── ZLAdjustSlider.swift
│ ├── ZLBaseStickerView.swift
│ ├── ZLBaseStickertState.swift
│ ├── ZLClipImageViewController.swift
│ ├── ZLClipOverlayView.swift
│ ├── ZLEditImageViewController.swift
│ ├── ZLEditToolCells.swift
│ ├── ZLEditVideoViewController.swift
│ ├── ZLEditorManager.swift
│ ├── ZLFilter.swift
│ ├── ZLImageStickerView.swift
│ ├── ZLInputTextViewController.swift
│ ├── ZLPaths.swift
│ └── ZLTextStickerView.swift
├── Extensions
│ ├── AVCaptureDevice+ZLPhotoBrowser.swift
│ ├── Array+ZLPhotoBrowser.swift
│ ├── Bool+ZLPhotoBrowser.swift
│ ├── Bundle+ZLPhotoBrowser.swift
│ ├── CGFloat+ZLPhotoBrowser.swift
│ ├── Cell+ZLPhotoBrowser.swift
│ ├── NSError+ZLPhotoBrowser.swift
│ ├── PHAsset+ZLPhotoBrowser.swift
│ ├── PHPhotoLibrary+ZLPhotoBrowser.swift
│ ├── Runtime+ZLPhotoBrowser.swift
│ ├── String+ZLPhotoBrowser.swift
│ ├── UIColor+ZLPhotoBrowser.swift
│ ├── UIFont+ZLPhotoBrowser.swift
│ ├── UIGraphicsImageRenderer+ZLPhotoBrowser.swift
│ ├── UIImage+ZLPhotoBrowser.swift
│ ├── UIScrollView+ZLPhotoBrowser.swift
│ ├── UIView+ZLPhotoBrowser.swift
│ └── UIViewController+ZLPhotoBrowser.swift
├── General
│ ├── ZLAddPhotoCell.swift
│ ├── ZLAlbumListCell.swift
│ ├── ZLAlbumListController.swift
│ ├── ZLAlbumListModel.swift
│ ├── ZLAnimationUtils.swift
│ ├── ZLCameraCell.swift
│ ├── ZLCameraConfiguration.swift
│ ├── ZLCollectionViewFlowLayout.swift
│ ├── ZLCustomAlertProtocol.swift
│ ├── ZLEditImageConfiguration.swift
│ ├── ZLEmbedAlbumListView.swift
│ ├── ZLEnlargeButton.swift
│ ├── ZLFetchImageOperation.swift
│ ├── ZLGeneralDefine.swift
│ ├── ZLImageNavController.swift
│ ├── ZLImagePreviewController.swift
│ ├── ZLLanguageDefine.swift
│ ├── ZLNoAuthTipsView.swift
│ ├── ZLPhotoBrowser.swift
│ ├── ZLPhotoConfiguration+Chaining.swift
│ ├── ZLPhotoConfiguration.swift
│ ├── ZLPhotoManager.swift
│ ├── ZLPhotoModel.swift
│ ├── ZLPhotoPicker.swift
│ ├── ZLPhotoPreviewCell.swift
│ ├── ZLPhotoPreviewController.swift
│ ├── ZLPhotoPreviewSheet.swift
│ ├── ZLPhotoUIConfiguration+Chaining.swift
│ ├── ZLPhotoUIConfiguration.swift
│ ├── ZLProgressHUD.swift
│ ├── ZLProgressView.swift
│ ├── ZLResultModel.swift
│ ├── ZLThumbnailPhotoCell.swift
│ ├── ZLThumbnailViewController.swift
│ ├── ZLVideoManager.swift
│ ├── ZLWeakProxy.h
│ ├── ZLWeakProxy.m
│ └── ZLWeakProxy.swift
├── Info.plist
├── PrivacyInfo.xcprivacy
├── ZLPhotoBrowser.bundle
│ ├── ar.lproj
│ │ └── Localizable.strings
│ ├── de.lproj
│ │ └── Localizable.strings
│ ├── en.lproj
│ │ └── Localizable.strings
│ ├── es-419.lproj
│ │ └── Localizable.strings
│ ├── fr.lproj
│ │ └── Localizable.strings
│ ├── id.lproj
│ │ └── Localizable.strings
│ ├── it.lproj
│ │ └── Localizable.strings
│ ├── ja-US.lproj
│ │ └── Localizable.strings
│ ├── ko.lproj
│ │ └── Localizable.strings
│ ├── ms.lproj
│ │ └── Localizable.strings
│ ├── nl.lproj
│ │ └── Localizable.strings
│ ├── pt-BR.lproj
│ │ └── Localizable.strings
│ ├── ru.lproj
│ │ └── Localizable.strings
│ ├── tr.lproj
│ │ └── Localizable.strings
│ ├── vi.lproj
│ │ └── Localizable.strings
│ ├── zh-Hans.lproj
│ │ └── Localizable.strings
│ ├── zh-Hant.lproj
│ │ └── Localizable.strings
│ ├── zl_ablumList_arrow@2x.png
│ ├── zl_ablumList_arrow@3x.png
│ ├── zl_addPhoto@2x.png
│ ├── zl_addPhoto@3x.png
│ ├── zl_adjust@2x.png
│ ├── zl_adjust@3x.png
│ ├── zl_adjust_selected@2x.png
│ ├── zl_adjust_selected@3x.png
│ ├── zl_albumSelect@2x.png
│ ├── zl_albumSelect@3x.png
│ ├── zl_arrow_down@2x.png
│ ├── zl_arrow_down@3x.png
│ ├── zl_ashbin@2x.png
│ ├── zl_ashbin@3x.png
│ ├── zl_ashbin_open@2x.png
│ ├── zl_ashbin_open@3x.png
│ ├── zl_brightness@2x.png
│ ├── zl_brightness@3x.png
│ ├── zl_brightness_selected@2x.png
│ ├── zl_brightness_selected@3x.png
│ ├── zl_btn_original_circle@2x.png
│ ├── zl_btn_original_circle@3x.png
│ ├── zl_btn_original_selected@2x.png
│ ├── zl_btn_original_selected@3x.png
│ ├── zl_btn_selected@2x.png
│ ├── zl_btn_selected@3x.png
│ ├── zl_btn_unselected@2x.png
│ ├── zl_btn_unselected@3x.png
│ ├── zl_btn_unselected_with_check@2x.png
│ ├── zl_btn_unselected_with_check@3x.png
│ ├── zl_camera_close@2x.png
│ ├── zl_camera_close@3x.png
│ ├── zl_clip@2x.png
│ ├── zl_clip@3x.png
│ ├── zl_close@2x.png
│ ├── zl_close@3x.png
│ ├── zl_contrast@2x.png
│ ├── zl_contrast@3x.png
│ ├── zl_contrast_selected@2x.png
│ ├── zl_contrast_selected@3x.png
│ ├── zl_defaultphoto.png
│ ├── zl_downArrow@2x.png
│ ├── zl_downArrow@3x.png
│ ├── zl_drawLine@2x.png
│ ├── zl_drawLine@3x.png
│ ├── zl_drawLine_selected@2x.png
│ ├── zl_drawLine_selected@3x.png
│ ├── zl_editImage_tag@2x.png
│ ├── zl_editImage_tag@3x.png
│ ├── zl_eraser@2x.png
│ ├── zl_eraser@3x.png
│ ├── zl_eraser_circle@2x.png
│ ├── zl_eraser_circle@3x.png
│ ├── zl_filter@2x.png
│ ├── zl_filter@3x.png
│ ├── zl_filter_selected@2x.png
│ ├── zl_filter_selected@3x.png
│ ├── zl_flash_off@2x.png
│ ├── zl_flash_off@3x.png
│ ├── zl_flash_on@2x.png
│ ├── zl_flash_on@3x.png
│ ├── zl_focus@2x.png
│ ├── zl_focus@3x.png
│ ├── zl_ic_left@2x.png
│ ├── zl_ic_left@3x.png
│ ├── zl_ic_right@2x.png
│ ├── zl_ic_right@3x.png
│ ├── zl_imageSticker@2x.png
│ ├── zl_imageSticker@3x.png
│ ├── zl_input_font@2x.png
│ ├── zl_input_font@3x.png
│ ├── zl_input_font_bg@2x.png
│ ├── zl_input_font_bg@3x.png
│ ├── zl_input_font_shadow@2x.png
│ ├── zl_input_font_shadow@3x.png
│ ├── zl_input_font_stroke@2x.png
│ ├── zl_input_font_stroke@3x.png
│ ├── zl_livePhoto@2x.png
│ ├── zl_livePhoto@3x.png
│ ├── zl_loading_dark@2x.png
│ ├── zl_loading_dark@3x.png
│ ├── zl_loading_light@2x.png
│ ├── zl_loading_light@3x.png
│ ├── zl_mosaic@2x.png
│ ├── zl_mosaic@3x.png
│ ├── zl_mosaic_selected@2x.png
│ ├── zl_mosaic_selected@3x.png
│ ├── zl_navBack@2x.png
│ ├── zl_navBack@3x.png
│ ├── zl_navClose@2x.png
│ ├── zl_navClose@3x.png
│ ├── zl_pauseButtonWhite@2x.png
│ ├── zl_pauseButtonWhite@3x.png
│ ├── zl_playButtonWhite@2x.png
│ ├── zl_playButtonWhite@3x.png
│ ├── zl_playVideo@2x.png
│ ├── zl_playVideo@3x.png
│ ├── zl_redo@2x.png
│ ├── zl_redo@3x.png
│ ├── zl_redo_disable@2x.png
│ ├── zl_redo_disable@3x.png
│ ├── zl_retake@2x.png
│ ├── zl_retake@3x.png
│ ├── zl_right@2x.png
│ ├── zl_right@3x.png
│ ├── zl_right_arrow@2x.png
│ ├── zl_right_arrow@3x.png
│ ├── zl_rotateimage@2x.png
│ ├── zl_rotateimage@3x.png
│ ├── zl_saturation@2x.png
│ ├── zl_saturation@3x.png
│ ├── zl_saturation_selected@2x.png
│ ├── zl_saturation_selected@3x.png
│ ├── zl_shadow@2x.png
│ ├── zl_shadow@3x.png
│ ├── zl_takePhoto@2x.png
│ ├── zl_takePhoto@3x.png
│ ├── zl_textSticker@2x.png
│ ├── zl_textSticker@3x.png
│ ├── zl_toggle_camera@2x.png
│ ├── zl_toggle_camera@3x.png
│ ├── zl_undo@2x.png
│ ├── zl_undo@3x.png
│ ├── zl_undo_disable@2x.png
│ ├── zl_undo_disable@3x.png
│ ├── zl_video@2x.png
│ ├── zl_video@3x.png
│ ├── zl_videoLoadFailed@2x.png
│ ├── zl_videoLoadFailed@3x.png
│ ├── zl_warning@2x.png
│ └── zl_warning@3x.png
└── ZLPhotoBrowser.h
├── SwiftUIExample
├── SwiftUIExample.xcodeproj
│ ├── project.pbxproj
│ └── project.xcworkspace
│ │ └── contents.xcworkspacedata
└── SwiftUIExample
│ ├── Assets.xcassets
│ ├── AccentColor.colorset
│ │ └── Contents.json
│ ├── AppIcon.appiconset
│ │ └── Contents.json
│ └── Contents.json
│ ├── ContentView.swift
│ ├── Info.plist
│ ├── PhotoPicker.swift
│ ├── Preview Content
│ └── Preview Assets.xcassets
│ │ └── Contents.json
│ └── SwiftUIExampleApp.swift
├── Tests
├── LinuxMain.swift
└── ZLPhotoBrowserTests
│ ├── XCTestManifests.swift
│ └── ZLPhotoBrowserTests.swift
├── ZLPhotoBrowser.podspec
├── ZLPhotoBrowser.xcodeproj
├── project.pbxproj
├── project.xcworkspace
│ ├── contents.xcworkspacedata
│ └── xcshareddata
│ │ └── IDEWorkspaceChecks.plist
└── xcshareddata
│ └── xcschemes
│ └── ZLPhotoBrowser.xcscheme
└── ZLPhotoBrowser.xcworkspace
├── contents.xcworkspacedata
└── xcshareddata
└── IDEWorkspaceChecks.plist
/.github/ISSUE_TEMPLATE.MD:
--------------------------------------------------------------------------------
1 | ### Issue Description
2 |
3 | #### Description and Steps
4 |
5 | Please fill in the detailed description of the issue (full output of any stack trace, compiler error, ...) and the steps to reproduce the issue.
6 |
7 | #### Info
8 | ZLPhotoBrowser version: e.g. 4.6.0.1
9 | Device: e.g. iPhone 14 Pro
10 | Device version: e.g. iOS 16.0
11 | Xcode version: e.g. Xcode 14.0
12 |
13 | #### Configuration code of `ZLPhotoConfiguration`
14 |
15 | ```
16 | Paste your code here.
17 | ```
18 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 |
2 | # Created by https://www.gitignore.io/api/cocoapods,swift
3 |
4 | ### CocoaPods ###
5 | ## CocoaPods GitIgnore Template
6 |
7 | # CocoaPods - Only use to conserve bandwidth / Save time on Pushing
8 | # - Also handy if you have a large number of dependant pods
9 | # - AS PER https://guides.cocoapods.org/using/using-cocoapods.html NEVER IGNORE THE LOCK FILE
10 | Pods/
11 |
12 | ### Swift ###
13 | # Xcode
14 | #
15 | # gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore
16 |
17 | ## Build generated
18 | build/
19 | DerivedData/
20 |
21 | ## Various settings
22 | *.pbxuser
23 | !default.pbxuser
24 | *.mode1v3
25 | !default.mode1v3
26 | *.mode2v3
27 | !default.mode2v3
28 | *.perspectivev3
29 | !default.perspectivev3
30 | xcuserdata/
31 | *.xcscheme
32 |
33 | ## Other
34 | *.moved-aside
35 | *.xccheckout
36 | *.xcscmblueprint
37 |
38 | ## Obj-C/Swift specific
39 | *.hmap
40 | *.ipa
41 | *.dSYM.zip
42 | *.dSYM
43 | *.sketch
44 |
45 | build_new_release.py
46 |
47 | # CocoaPods - Refactored to standalone file
48 |
49 |
50 | # Carthage - Refactored to standalone file
51 |
52 | # fastlane
53 | #
54 | # It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the
55 | # screenshots whenever they are needed.
56 | # For more information about the recommended setup visit:
57 | # https://docs.fastlane.tools/best-practices/source-control/#source-control
58 |
59 | fastlane/report.xml
60 | fastlane/Preview.html
61 | fastlane/screenshots
62 | fastlane/test_output
63 |
64 | # Code Injection
65 | #
66 | # After new code Injection tools there's a generated folder /iOSInjectionProject
67 | # https://github.com/johnno1962/injectionforxcode
68 |
69 | iOSInjectionProject/
70 |
71 | ### Objective-C Patch ###
72 |
73 | Carthage/Build
74 | Carthage/Checkouts
75 |
76 | ### FLEX
77 | Example/Example/Sources
78 |
79 | # End of https://www.gitignore.io/api/cocoapods,objective-c
80 | Sources/.DS_Store
81 | .DS_Store
82 |
--------------------------------------------------------------------------------
/.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/.travis.yml:
--------------------------------------------------------------------------------
1 | language: Swift
2 | osx_image: xcode10.1
3 | xcode_workspace: ZLPhotoBrowser
4 | xcode_scheme: ZLPhotoBrowser
5 | xcode_sdk: iphonesimulator12.1
6 | before_install:
7 | - xcodebuild -showsdks
8 | - brew update
9 | - brew outdated carthage || brew upgrade carthage
10 | before_script:
11 | - carthage bootstrap
12 | before_deploy:
13 | - carthage build --no-skip-current
14 | - carthage archive $FRAMEWORK_NAME
15 | script:
16 | - xcodebuild clean build -sdk iphonesimulator12.1 -workspace ZLPhotoBrowser.xcworkspace -scheme ZLPhotoBrowser CODE_SIGNING_REQUIRED=NO
17 |
--------------------------------------------------------------------------------
/Example/Example.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/Example/Example.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/Example/Example/AppDelegate.swift:
--------------------------------------------------------------------------------
1 | //
2 | // AppDelegate.swift
3 | // Example
4 | //
5 | // Created by long on 2020/8/11.
6 | //
7 |
8 | import UIKit
9 |
10 | @UIApplicationMain
11 | class AppDelegate: UIResponder, UIApplicationDelegate {
12 |
13 | var window: UIWindow?
14 |
15 | func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
16 | self.window = UIWindow(frame: UIScreen.main.bounds)
17 |
18 | let nav = UINavigationController(rootViewController: ViewController())
19 | self.window?.rootViewController = nav
20 |
21 | self.window?.makeKeyAndVisible()
22 |
23 | return true
24 | }
25 |
26 | }
27 |
28 |
--------------------------------------------------------------------------------
/Example/Example/Assets.xcassets/AccentColor.colorset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "colors" : [
3 | {
4 | "idiom" : "universal"
5 | }
6 | ],
7 | "info" : {
8 | "author" : "xcode",
9 | "version" : 1
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/Example/Example/Assets.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "iphone",
5 | "scale" : "2x",
6 | "size" : "20x20"
7 | },
8 | {
9 | "idiom" : "iphone",
10 | "scale" : "3x",
11 | "size" : "20x20"
12 | },
13 | {
14 | "idiom" : "iphone",
15 | "scale" : "2x",
16 | "size" : "29x29"
17 | },
18 | {
19 | "idiom" : "iphone",
20 | "scale" : "3x",
21 | "size" : "29x29"
22 | },
23 | {
24 | "idiom" : "iphone",
25 | "scale" : "2x",
26 | "size" : "40x40"
27 | },
28 | {
29 | "idiom" : "iphone",
30 | "scale" : "3x",
31 | "size" : "40x40"
32 | },
33 | {
34 | "idiom" : "iphone",
35 | "scale" : "2x",
36 | "size" : "60x60"
37 | },
38 | {
39 | "idiom" : "iphone",
40 | "scale" : "3x",
41 | "size" : "60x60"
42 | },
43 | {
44 | "idiom" : "ipad",
45 | "scale" : "1x",
46 | "size" : "20x20"
47 | },
48 | {
49 | "idiom" : "ipad",
50 | "scale" : "2x",
51 | "size" : "20x20"
52 | },
53 | {
54 | "idiom" : "ipad",
55 | "scale" : "1x",
56 | "size" : "29x29"
57 | },
58 | {
59 | "idiom" : "ipad",
60 | "scale" : "2x",
61 | "size" : "29x29"
62 | },
63 | {
64 | "idiom" : "ipad",
65 | "scale" : "1x",
66 | "size" : "40x40"
67 | },
68 | {
69 | "idiom" : "ipad",
70 | "scale" : "2x",
71 | "size" : "40x40"
72 | },
73 | {
74 | "idiom" : "ipad",
75 | "scale" : "1x",
76 | "size" : "76x76"
77 | },
78 | {
79 | "idiom" : "ipad",
80 | "scale" : "2x",
81 | "size" : "76x76"
82 | },
83 | {
84 | "idiom" : "ipad",
85 | "scale" : "2x",
86 | "size" : "83.5x83.5"
87 | },
88 | {
89 | "idiom" : "ios-marketing",
90 | "scale" : "1x",
91 | "size" : "1024x1024"
92 | }
93 | ],
94 | "info" : {
95 | "author" : "xcode",
96 | "version" : 1
97 | }
98 | }
99 |
--------------------------------------------------------------------------------
/Example/Example/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/Example/Example/Assets.xcassets/addPhoto.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "filename" : "addPhoto@2x.png",
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "filename" : "addPhoto@3x.png",
14 | "idiom" : "universal",
15 | "scale" : "3x"
16 | }
17 | ],
18 | "info" : {
19 | "author" : "xcode",
20 | "version" : 1
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/Example/Example/Assets.xcassets/addPhoto.imageset/addPhoto@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/longitachi/ZLPhotoBrowser/acf3a522e3c5adce10bf013967ddc92f33aad290/Example/Example/Assets.xcassets/addPhoto.imageset/addPhoto@2x.png
--------------------------------------------------------------------------------
/Example/Example/Assets.xcassets/addPhoto.imageset/addPhoto@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/longitachi/ZLPhotoBrowser/acf3a522e3c5adce10bf013967ddc92f33aad290/Example/Example/Assets.xcassets/addPhoto.imageset/addPhoto@3x.png
--------------------------------------------------------------------------------
/Example/Example/Assets.xcassets/close.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "filename" : "close@2x.png",
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "filename" : "close@3x.png",
14 | "idiom" : "universal",
15 | "scale" : "3x"
16 | }
17 | ],
18 | "info" : {
19 | "author" : "xcode",
20 | "version" : 1
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/Example/Example/Assets.xcassets/close.imageset/close@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/longitachi/ZLPhotoBrowser/acf3a522e3c5adce10bf013967ddc92f33aad290/Example/Example/Assets.xcassets/close.imageset/close@2x.png
--------------------------------------------------------------------------------
/Example/Example/Assets.xcassets/close.imageset/close@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/longitachi/ZLPhotoBrowser/acf3a522e3c5adce10bf013967ddc92f33aad290/Example/Example/Assets.xcassets/close.imageset/close@3x.png
--------------------------------------------------------------------------------
/Example/Example/Assets.xcassets/image1.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "image1.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/Example/Example/Assets.xcassets/image1.imageset/image1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/longitachi/ZLPhotoBrowser/acf3a522e3c5adce10bf013967ddc92f33aad290/Example/Example/Assets.xcassets/image1.imageset/image1.png
--------------------------------------------------------------------------------
/Example/Example/Assets.xcassets/image2.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "image2.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/Example/Example/Assets.xcassets/image2.imageset/image2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/longitachi/ZLPhotoBrowser/acf3a522e3c5adce10bf013967ddc92f33aad290/Example/Example/Assets.xcassets/image2.imageset/image2.png
--------------------------------------------------------------------------------
/Example/Example/Assets.xcassets/image3.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "image3.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/Example/Example/Assets.xcassets/image3.imageset/image3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/longitachi/ZLPhotoBrowser/acf3a522e3c5adce10bf013967ddc92f33aad290/Example/Example/Assets.xcassets/image3.imageset/image3.png
--------------------------------------------------------------------------------
/Example/Example/Assets.xcassets/imageSticker1.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "imageSticker1.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/Example/Example/Assets.xcassets/imageSticker1.imageset/imageSticker1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/longitachi/ZLPhotoBrowser/acf3a522e3c5adce10bf013967ddc92f33aad290/Example/Example/Assets.xcassets/imageSticker1.imageset/imageSticker1.png
--------------------------------------------------------------------------------
/Example/Example/Assets.xcassets/imageSticker10.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "imageSticker10.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/Example/Example/Assets.xcassets/imageSticker10.imageset/imageSticker10.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/longitachi/ZLPhotoBrowser/acf3a522e3c5adce10bf013967ddc92f33aad290/Example/Example/Assets.xcassets/imageSticker10.imageset/imageSticker10.png
--------------------------------------------------------------------------------
/Example/Example/Assets.xcassets/imageSticker11.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "imageSticker11.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/Example/Example/Assets.xcassets/imageSticker11.imageset/imageSticker11.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/longitachi/ZLPhotoBrowser/acf3a522e3c5adce10bf013967ddc92f33aad290/Example/Example/Assets.xcassets/imageSticker11.imageset/imageSticker11.png
--------------------------------------------------------------------------------
/Example/Example/Assets.xcassets/imageSticker12.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "imageSticker12.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/Example/Example/Assets.xcassets/imageSticker12.imageset/imageSticker12.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/longitachi/ZLPhotoBrowser/acf3a522e3c5adce10bf013967ddc92f33aad290/Example/Example/Assets.xcassets/imageSticker12.imageset/imageSticker12.png
--------------------------------------------------------------------------------
/Example/Example/Assets.xcassets/imageSticker13.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "imageSticker13.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/Example/Example/Assets.xcassets/imageSticker13.imageset/imageSticker13.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/longitachi/ZLPhotoBrowser/acf3a522e3c5adce10bf013967ddc92f33aad290/Example/Example/Assets.xcassets/imageSticker13.imageset/imageSticker13.png
--------------------------------------------------------------------------------
/Example/Example/Assets.xcassets/imageSticker14.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "imageSticker14.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/Example/Example/Assets.xcassets/imageSticker14.imageset/imageSticker14.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/longitachi/ZLPhotoBrowser/acf3a522e3c5adce10bf013967ddc92f33aad290/Example/Example/Assets.xcassets/imageSticker14.imageset/imageSticker14.png
--------------------------------------------------------------------------------
/Example/Example/Assets.xcassets/imageSticker15.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "imageSticker15.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/Example/Example/Assets.xcassets/imageSticker15.imageset/imageSticker15.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/longitachi/ZLPhotoBrowser/acf3a522e3c5adce10bf013967ddc92f33aad290/Example/Example/Assets.xcassets/imageSticker15.imageset/imageSticker15.png
--------------------------------------------------------------------------------
/Example/Example/Assets.xcassets/imageSticker16.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "imageSticker16.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/Example/Example/Assets.xcassets/imageSticker16.imageset/imageSticker16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/longitachi/ZLPhotoBrowser/acf3a522e3c5adce10bf013967ddc92f33aad290/Example/Example/Assets.xcassets/imageSticker16.imageset/imageSticker16.png
--------------------------------------------------------------------------------
/Example/Example/Assets.xcassets/imageSticker17.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "imageSticker17.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/Example/Example/Assets.xcassets/imageSticker17.imageset/imageSticker17.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/longitachi/ZLPhotoBrowser/acf3a522e3c5adce10bf013967ddc92f33aad290/Example/Example/Assets.xcassets/imageSticker17.imageset/imageSticker17.png
--------------------------------------------------------------------------------
/Example/Example/Assets.xcassets/imageSticker18.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "imageSticker18.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/Example/Example/Assets.xcassets/imageSticker18.imageset/imageSticker18.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/longitachi/ZLPhotoBrowser/acf3a522e3c5adce10bf013967ddc92f33aad290/Example/Example/Assets.xcassets/imageSticker18.imageset/imageSticker18.png
--------------------------------------------------------------------------------
/Example/Example/Assets.xcassets/imageSticker2.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "imageSticker2.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/Example/Example/Assets.xcassets/imageSticker2.imageset/imageSticker2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/longitachi/ZLPhotoBrowser/acf3a522e3c5adce10bf013967ddc92f33aad290/Example/Example/Assets.xcassets/imageSticker2.imageset/imageSticker2.png
--------------------------------------------------------------------------------
/Example/Example/Assets.xcassets/imageSticker3.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "imageSticker3.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/Example/Example/Assets.xcassets/imageSticker3.imageset/imageSticker3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/longitachi/ZLPhotoBrowser/acf3a522e3c5adce10bf013967ddc92f33aad290/Example/Example/Assets.xcassets/imageSticker3.imageset/imageSticker3.png
--------------------------------------------------------------------------------
/Example/Example/Assets.xcassets/imageSticker4.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "imageSticker4.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/Example/Example/Assets.xcassets/imageSticker4.imageset/imageSticker4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/longitachi/ZLPhotoBrowser/acf3a522e3c5adce10bf013967ddc92f33aad290/Example/Example/Assets.xcassets/imageSticker4.imageset/imageSticker4.png
--------------------------------------------------------------------------------
/Example/Example/Assets.xcassets/imageSticker5.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "imageSticker5.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/Example/Example/Assets.xcassets/imageSticker5.imageset/imageSticker5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/longitachi/ZLPhotoBrowser/acf3a522e3c5adce10bf013967ddc92f33aad290/Example/Example/Assets.xcassets/imageSticker5.imageset/imageSticker5.png
--------------------------------------------------------------------------------
/Example/Example/Assets.xcassets/imageSticker6.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "imageSticker6.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/Example/Example/Assets.xcassets/imageSticker6.imageset/imageSticker6.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/longitachi/ZLPhotoBrowser/acf3a522e3c5adce10bf013967ddc92f33aad290/Example/Example/Assets.xcassets/imageSticker6.imageset/imageSticker6.png
--------------------------------------------------------------------------------
/Example/Example/Assets.xcassets/imageSticker7.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "imageSticker7.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/Example/Example/Assets.xcassets/imageSticker7.imageset/imageSticker7.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/longitachi/ZLPhotoBrowser/acf3a522e3c5adce10bf013967ddc92f33aad290/Example/Example/Assets.xcassets/imageSticker7.imageset/imageSticker7.png
--------------------------------------------------------------------------------
/Example/Example/Assets.xcassets/imageSticker8.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "imageSticker8.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/Example/Example/Assets.xcassets/imageSticker8.imageset/imageSticker8.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/longitachi/ZLPhotoBrowser/acf3a522e3c5adce10bf013967ddc92f33aad290/Example/Example/Assets.xcassets/imageSticker8.imageset/imageSticker8.png
--------------------------------------------------------------------------------
/Example/Example/Assets.xcassets/imageSticker9.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "imageSticker9.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/Example/Example/Assets.xcassets/imageSticker9.imageset/imageSticker9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/longitachi/ZLPhotoBrowser/acf3a522e3c5adce10bf013967ddc92f33aad290/Example/Example/Assets.xcassets/imageSticker9.imageset/imageSticker9.png
--------------------------------------------------------------------------------
/Example/Example/Assets.xcassets/playVideo.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "filename" : "playVideo@2x.png",
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "filename" : "playVideo@3x.png",
14 | "idiom" : "universal",
15 | "scale" : "3x"
16 | }
17 | ],
18 | "info" : {
19 | "author" : "xcode",
20 | "version" : 1
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/Example/Example/Assets.xcassets/playVideo.imageset/playVideo@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/longitachi/ZLPhotoBrowser/acf3a522e3c5adce10bf013967ddc92f33aad290/Example/Example/Assets.xcassets/playVideo.imageset/playVideo@2x.png
--------------------------------------------------------------------------------
/Example/Example/Assets.xcassets/playVideo.imageset/playVideo@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/longitachi/ZLPhotoBrowser/acf3a522e3c5adce10bf013967ddc92f33aad290/Example/Example/Assets.xcassets/playVideo.imageset/playVideo@3x.png
--------------------------------------------------------------------------------
/Example/Example/Base.lproj/LaunchScreen.storyboard:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
--------------------------------------------------------------------------------
/Example/Example/Base.lproj/Main.storyboard:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/Example/Example/CustomAlert/ZLCustomAlertAction+Color.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ZLCustomAlertAction+Color.swift
3 | // Example
4 | //
5 | // Created by long on 2022/7/1.
6 | //
7 |
8 | import ZLPhotoBrowser
9 | import UIKit
10 |
11 | extension ZLCustomAlertAction.Style {
12 | var color: UIColor {
13 | switch self {
14 | case .default, .cancel:
15 | return UIColor.color(hexRGB: 0x171717)
16 | case .tint:
17 | return UIColor.color(hexRGB: 0x4F638E)
18 | case .destructive:
19 | return UIColor.color(hexRGB: 0xEB2F58)
20 | }
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/Example/Example/Example-Bridging-Header.h:
--------------------------------------------------------------------------------
1 | //
2 | // Use this file to import your target's public headers that you would like to expose to Swift.
3 | //
4 |
5 | #import "FLAnimatedImageView.h"
6 | #import "FLAnimatedImage.h"
7 | //#import "FLEXManager.h"
8 |
--------------------------------------------------------------------------------
/Example/Example/Extension/UIColor+Hex.swift:
--------------------------------------------------------------------------------
1 | //
2 | // UIColor+Hex.swift
3 | // Example
4 | //
5 | // Created by long on 2022/7/1.
6 | //
7 |
8 | import UIKit
9 |
10 | extension UIColor {
11 | class func color(hexRGB: Int64, alpha: CGFloat = 1.0) -> UIColor {
12 | let r: Int64 = (hexRGB & 0xFF0000) >> 16
13 | let g: Int64 = (hexRGB & 0xFF00) >> 8
14 | let b: Int64 = (hexRGB & 0xFF)
15 |
16 | let color = UIColor(
17 | red: CGFloat(r) / 255.0,
18 | green: CGFloat(g) / 255.0,
19 | blue: CGFloat(b) / 255.0,
20 | alpha: alpha
21 | )
22 |
23 | return color
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/Example/Example/FLAnimatedImage/FLAnimatedImageView.h:
--------------------------------------------------------------------------------
1 | //
2 | // FLAnimatedImageView.h
3 | // Flipboard
4 | //
5 | // Created by Raphael Schaad on 7/8/13.
6 | // Copyright (c) Flipboard. All rights reserved.
7 | //
8 |
9 |
10 | #import
11 |
12 | @class FLAnimatedImage;
13 | @protocol FLAnimatedImageViewDebugDelegate;
14 |
15 |
16 | //
17 | // An `FLAnimatedImageView` can take an `FLAnimatedImage` and plays it automatically when in view hierarchy and stops when removed.
18 | // The animation can also be controlled with the `UIImageView` methods `-start/stop/isAnimating`.
19 | // It is a fully compatible `UIImageView` subclass and can be used as a drop-in component to work with existing code paths expecting to display a `UIImage`.
20 | // Under the hood it uses a `CADisplayLink` for playback, which can be inspected with `currentFrame` & `currentFrameIndex`.
21 | //
22 | @interface FLAnimatedImageView : UIImageView
23 |
24 | // Setting `[UIImageView.image]` to a non-`nil` value clears out existing `animatedImage`.
25 | // And vice versa, setting `animatedImage` will initially populate the `[UIImageView.image]` to its `posterImage` and then start animating and hold `currentFrame`.
26 | @property (nonatomic, strong) FLAnimatedImage *animatedImage;
27 | @property (nonatomic, copy) void(^loopCompletionBlock)(NSUInteger loopCountRemaining);
28 |
29 | @property (nonatomic, strong, readonly) UIImage *currentFrame;
30 | @property (nonatomic, assign, readonly) NSUInteger currentFrameIndex;
31 |
32 | // The animation runloop mode. Enables playback during scrolling by allowing timer events (i.e. animation) with NSRunLoopCommonModes.
33 | // To keep scrolling smooth on single-core devices such as iPhone 3GS/4 and iPod Touch 4th gen, the default run loop mode is NSDefaultRunLoopMode. Otherwise, the default is NSDefaultRunLoopMode.
34 | @property (nonatomic, copy) NSRunLoopMode runLoopMode;
35 |
36 | @end
37 |
--------------------------------------------------------------------------------
/Example/Example/ImageCell.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ImageCell.swift
3 | // Example
4 | //
5 | // Created by long on 2020/8/20.
6 | //
7 |
8 | import UIKit
9 |
10 | class ImageCell: UICollectionViewCell {
11 |
12 | var imageView: UIImageView!
13 |
14 | override init(frame: CGRect) {
15 | super.init(frame: frame)
16 |
17 | self.imageView = UIImageView()
18 | self.imageView.clipsToBounds = true
19 | self.imageView.contentMode = .scaleAspectFill
20 | self.contentView.addSubview(self.imageView)
21 | }
22 |
23 | required init?(coder: NSCoder) {
24 | fatalError("init(coder:) has not been implemented")
25 | }
26 |
27 | override func layoutSubviews() {
28 | super.layoutSubviews()
29 | self.imageView.frame = self.bounds
30 | }
31 |
32 | }
33 |
--------------------------------------------------------------------------------
/Example/Example/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleAllowMixedLocalizations
6 |
7 | CFBundleDevelopmentRegion
8 | $(DEVELOPMENT_LANGUAGE)
9 | CFBundleExecutable
10 | $(EXECUTABLE_NAME)
11 | CFBundleIdentifier
12 | $(PRODUCT_BUNDLE_IDENTIFIER)
13 | CFBundleInfoDictionaryVersion
14 | 6.0
15 | CFBundleName
16 | $(PRODUCT_NAME)
17 | CFBundlePackageType
18 | $(PRODUCT_BUNDLE_PACKAGE_TYPE)
19 | CFBundleShortVersionString
20 | 1.0
21 | CFBundleVersion
22 | 1
23 | LSRequiresIPhoneOS
24 |
25 | NSAppTransportSecurity
26 |
27 | NSAllowsArbitraryLoads
28 |
29 |
30 | NSCameraUsageDescription
31 | 需要相机权限
32 | NSMicrophoneUsageDescription
33 | 需要麦克风权限
34 | NSPhotoLibraryAddUsageDescription
35 | 需要写入相册权限
36 | NSPhotoLibraryUsageDescription
37 | 需要访问相册权限
38 | PHPhotoLibraryPreventAutomaticLimitedAccessAlert
39 |
40 | UIApplicationSupportsIndirectInputEvents
41 |
42 | UILaunchStoryboardName
43 | LaunchScreen
44 | UIMainStoryboardFile
45 | Main
46 | UIRequiredDeviceCapabilities
47 |
48 | armv7
49 |
50 | UISupportedInterfaceOrientations
51 |
52 | UIInterfaceOrientationPortrait
53 | UIInterfaceOrientationLandscapeLeft
54 | UIInterfaceOrientationLandscapeRight
55 |
56 | UISupportedInterfaceOrientations~ipad
57 |
58 | UIInterfaceOrientationPortrait
59 | UIInterfaceOrientationPortraitUpsideDown
60 | UIInterfaceOrientationLandscapeLeft
61 | UIInterfaceOrientationLandscapeRight
62 |
63 |
64 |
65 |
--------------------------------------------------------------------------------
/Example/Example/Kingfisher/Utility/Box.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Box.swift
3 | // Kingfisher
4 | //
5 | // Created by Wei Wang on 2018/3/17.
6 | // Copyright (c) 2019 Wei Wang
7 | //
8 | // Permission is hereby granted, free of charge, to any person obtaining a copy
9 | // of this software and associated documentation files (the "Software"), to deal
10 | // in the Software without restriction, including without limitation the rights
11 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
12 | // copies of the Software, and to permit persons to whom the Software is
13 | // furnished to do so, subject to the following conditions:
14 | //
15 | // The above copyright notice and this permission notice shall be included in
16 | // all copies or substantial portions of the Software.
17 | //
18 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
21 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
22 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
23 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
24 | // THE SOFTWARE.
25 |
26 | import Foundation
27 |
28 | class Box {
29 | var value: T
30 |
31 | init(_ value: T) {
32 | self.value = value
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/Example/Example/Kingfisher/Utility/Result.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Result.swift
3 | // Kingfisher
4 | //
5 | // Created by onevcat on 2018/09/22.
6 | //
7 | // Copyright (c) 2019 Wei Wang
8 | //
9 | // Permission is hereby granted, free of charge, to any person obtaining a copy
10 | // of this software and associated documentation files (the "Software"), to deal
11 | // in the Software without restriction, including without limitation the rights
12 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
13 | // copies of the Software, and to permit persons to whom the Software is
14 | // furnished to do so, subject to the following conditions:
15 | //
16 | // The above copyright notice and this permission notice shall be included in
17 | // all copies or substantial portions of the Software.
18 | //
19 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
22 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
23 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
24 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
25 | // THE SOFTWARE.
26 |
27 | import Foundation
28 |
29 | // These helper methods are not public since we do not want them to be exposed or cause any conflicting.
30 | // However, they are just wrapper of `ResultUtil` static methods.
31 | extension Result where Failure: Error {
32 |
33 | /// Evaluates the given transform closures to create a single output value.
34 | ///
35 | /// - Parameters:
36 | /// - onSuccess: A closure that transforms the success value.
37 | /// - onFailure: A closure that transforms the error value.
38 | /// - Returns: A single `Output` value.
39 | func match