ไธญๆ | English
photo/video selector-supports LivePhoto, GIF selection, iCloud resource online download, photo/video editing
- UI Appearance supports light/dark/auto/custom
- Support multiple selection/mixed content selection
- Supported media types๏ผ
- Photo
- GIF
- Live Photo
- Video
- Supported local media types๏ผ
- Photo
- Video
- GIF
- Live Photo
- Supported network media types๏ผ
- Photo
- Video
- Support downloading assets on iCloud
- Support gesture back
- Support sliding selection
- Edit pictures (support animated pictures, network pictures)
- Graffiti
- Sticker
- Text
- Crop
- Mosaic
- Filter
- Edit video (support network video)
- Graffiti
- Stickers (support GIF)
- Text
- Soundtrack (support lyrics and subtitles)
- Crop duration
- Crop Size
- Filter
- Album display mode
- Separate list
- Pop-ups
- Multi-platform support
- iOS
- iPadOS
- Internationalization support
- ๐จ๐ณ Chinese, Simplified (zh-Hans)
- ๐ฌ๐ง English (en)
- ๐จ๐ณ Chinese, traditional (zh-Hant)
- ๐ฏ๐ต Japanese (ja)
- ๐ฐ๐ท Korean (ko)
- ๐น๐ญ Thai (th)
- ๐ฎ๐ณ Indonesian (id)
- ๐ป๐ณ Vietnamese (vi)
- ๐ท๐บ russian (ru)
- ๐ฉ๐ช german (de)
- ๐ซ๐ท french (fr)
- ๐ธ๐ฆ arabic (ar)
- โ๏ธ Custom language (custom)
- ๐ค More support... (Pull requests welcome)
- iOS 12.0+
- Xcode 12.5+
- Swift 5.4+
dependencies: [
.package(url: "https://github.com/SilenceLove/HXPHPicker.git", .upToNextMajor(from: "2.0.0"))
]
Add this to Podfile, and then update dependency:
iOS 12.0+
pod 'HXPHPicker'
/// No Kingfisher
pod `HXPHPicker/Lite`
/// Only Picker
pod `HXPHPicker/Picker`
pod `HXPHPicker/Picker/Lite`
/// Only Editor
pod `HXPHPicker/Editor`
pod `HXPHPicker/Editor/Lite`
/// Only Camera
pod `HXPHPicker/Camera`
/// Does not include location functionality
pod `HXPHPicker/Camera/Lite`
iOS 10.0+
pod 'HXPHPicker-Lite'
pod 'HXPHPicker-Lite/Picker'
pod 'HXPHPicker-Lite/Editor'
pod 'HXPHPicker-Lite/Camera'
Add the following content to Cartfile
and perform dependency update.
github "SilenceLove/HXPHPicker"
Add these keys to your Info.plist when needed:
Key | Module | Info |
---|---|---|
NSPhotoLibraryUsageDescription | Picker | Allow access to album |
NSPhotoLibraryAddUsageDescription | Picker | Allow to save pictures to album |
PHPhotoLibraryPreventAutomaticLimitedAccessAlert | Picker | Set YES to prevent automatic limited access alert in iOS 14+ (Picker has been adapted with Limited features that can be triggered by the user to enhance the user experience) |
NSCameraUsageDescription | Camera | Allow camera |
NSMicrophoneUsageDescription | Camera | Allow microphone |
import HXPHPicker
class ViewController: UIViewController {
func presentPickerController() {
// Set the configuration consistent with the WeChat theme
let config = PickerConfiguration.default
// Method 1๏ผ
let pickerController = PhotoPickerController(picker: config)
pickerController.pickerDelegate = self
// The array of PhotoAsset objects corresponding to the currently selected asset
pickerController.selectedAssetArray = selectedAssets
// Whether to select the original image
pickerController.isOriginal = isOriginal
present(pickerController, animated: true, completion: nil)
// Method 2๏ผ
Photo.picker(
config
) { result, pickerController in
// Select completion callback
// result Select result
// .photoAssets Currently selected data
// .isOriginal Whether the original image is selected
// photoPickerController Corresponding photo selection controller
} cancel: { pickerController in
// Cancelled callback
// photoPickerController Corresponding photo selection controller
}
}
}
extension ViewController: PhotoPickerControllerDelegate {
/// Called after the selection is complete
/// - Parameters:
/// - pickerController: corresponding PhotoPickerController
/// - result: Selected result
/// result.photoAssets Selected asset array
/// result.isOriginal Whether to select the original image
func pickerController(_ pickerController: PhotoPickerController,
didFinishSelection result: PickerResult) {
result.getImage { (image, photoAsset, index) in
if let image = image {
print("success", image)
}else {
print("failed")
}
} completionHandler: { (images) in
print(images)
}
}
/// Called when cancel is clicked
/// - Parameter pickerController: Corresponding PhotoPickerController
func pickerController(didCancel pickerController: PhotoPickerController) {
}
}
/// If it is a video, get the cover of the video
/// compressionQuality: Compress parameters, if not passed, no compression
photoAsset.getImage(compressionQuality: compressionQuality) { image in
print(image)
}
/// compression: Compress parameters, if not passed, no compression
photoAsset.getURL(compression: compression) { result in
switch result {
case .success(let urlResult):
switch urlResult.mediaType {
case .photo:
case .video:
}
switch urlResult.urlType {
case .local:
case .network:
}
print(urlResult.url)
// Image and video urls contained in LivePhoto
print(urlResult.livePhoto)
case .failure(let error):
print(error)
}
}
Version | Release Date | Xcode | Swift | iOS |
---|---|---|---|---|
v2.0.0 | 2023-06-14 | 14.3.0 | 5.7.0 | 12.0+ |
v1.4.6 | 2022-11-20 | 14.0.0 | 5.7.0 | 12.0+ |
HXPHPicker is released under the MIT license. See LICENSE for details.
- โ Star this repo.
- Support with