SwiftUI封装完相册后当用户手机内相册存储的照片视频达到一定的数量及(例如150G以上,两万张照片视频左右),LazyVGrid就会陷入一个运算艰难的境地,CPU占用居高不下,暂时没找到很好的优化办法,所以就用UIKit又封装了一遍,看实际需求酌情使用,UIKit封装地址Demo.
可选相册,可预览编辑Gif Video Image Live Photo,透明图片可调整背景色方便编辑
打开使用SwiftUI封装的相册
Button {
isPresentedGallery.toggle()
} label: {
Text("打开自定义相册SwiftUI")
.foregroundColor(Color.red)
.frame(height: 50)
}
.galleryPicker(isPresented: $isPresentedGallery,
maxSelectionCount: 7,
selectTitle: "Videos",
autoCrop: true,
cropRatio: .init(width: 1, height: 1),
onlyImage: false,
selected: $selectItem.pictures)
打开系统相册
Button {
showPicker.toggle()
} label: {
Text("打开系统相册")
}
.photoPicker(isPresented: $showPicker,
selected: $selectedItems,
maxSelectionCount: 5,
matching: .any(of: [.images, .livePhotos, .videos]))
.onChange(of: selectedItems) { newItems in
var images = [UIImage]()
Task{
for item in newItems{
if let image = try await item.loadTransfer(type: UIImage.self){
images.append(image)
}
}
await MainActor.run {
selectedImages = images
}
}
}
进入照片视频编辑工具
.editPicker(isPresented: $isPresentedCrop,
cropRatio: .init(width: 10, height: 1),
asset: selectItem.selectedAsset) { asset in
selectItem.pictures.replaceSubrange(selectItem.selectedIndex...selectItem.selectedIndex, with: [asset])
}
在 Xcode 的菜单栏中选择 File > Swift Packages > Add Pacakage Dependency
,然后在搜索栏输入
https://github.com/jackiehu/PhotoPicker_SwiftUI
PhotoPicker_SwiftUI 也支持手动集成,只需把Sources文件夹中的PhotoPicker_SwiftUI文件夹拖进需要集成的项目即可
hu,
PhotoPicker_SwiftUI is available under the MIT license. See the LICENSE file for more info.