如何在不放大的情况下使图像具有良好的质量(swift)
编辑 我当前的代码:如何在不放大的情况下使图像具有良好的质量(swift),swift,image,phphotolibrary,cgsize,Swift,Image,Phphotolibrary,Cgsize,编辑 我当前的代码: import UIKit import Photos import PhotosUI import Foundation var selectedImage = UIImage() extension CGSize { static func *(lhs: CGSize, rhs: CGFloat) -> CGSize { .init(width: lhs.width * rhs, height: lhs.height * rhs)
import UIKit
import Photos
import PhotosUI
import Foundation
var selectedImage = UIImage()
extension CGSize {
static func *(lhs: CGSize, rhs: CGFloat) -> CGSize {
.init(width: lhs.width * rhs, height: lhs.height * rhs)
}
}
extension UIImageView {
func fetchImage(asset: PHAsset, contentMode: PHImageContentMode, targetSize: CGSize, version: PHImageRequestOptionsVersion = .current, deliveryMode: PHImageRequestOptionsDeliveryMode = .opportunistic) {
let options = PHImageRequestOptions()
options.version = version
options.deliveryMode = deliveryMode
PHImageManager.default().requestImage(for: asset, targetSize: targetSize, contentMode: contentMode, options: options) { image, _ in
guard let image = image else { return }
switch contentMode {
case .aspectFill: self.contentMode = .scaleAspectFill
case .aspectFit: self.contentMode = .scaleAspectFit
@unknown default: fatalError()
}
self.image = image
}
}
}
class CollectionVC: UICollectionViewController, UICollectionViewDelegateFlowLayout {
var fetchResult: PHFetchResult<PHAsset> = PHFetchResult()
func fetchAssets() {
let fetchOptions = PHFetchOptions()
fetchOptions.sortDescriptors = [NSSortDescriptor(key: "creationDate", ascending: false)]
fetchResult = PHAsset.fetchAssets(with: .image, options: fetchOptions)
}
override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "Cell", for: indexPath as IndexPath)
let asset = fetchResult.object(at: indexPath.row)
let imageView = cell.viewWithTag(1) as! UIImageView
imageView.fetchImage(asset: asset, contentMode: .aspectFill, targetSize: imageView.frame.size * UIScreen.main.scale )
return cell
}
override func viewDidLoad() {
super.viewDidLoad()
fetchAssets()
}
override func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return fetchResult.count
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
let width = collectionView.frame.width / 3 - 6
return CGSize(width: width, height: width)
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat {
return 6.0
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat {
return 6.0
}
}
导入UIKit
导入照片
导入PhotosUI
进口基金会
var selectedImage=UIImage()
扩展CGSize{
静态函数*(lhs:CGSize,rhs:CGFloat)->CGSize{
.init(宽度:lhs.width*rhs,高度:lhs.height*rhs)
}
}
扩展UIImageView{
func fetchImage(资产:PHAsset,contentMode:PHImageContentMode,targetSize:CGSize,版本:phimagerequestoptions版本=.current,deliveryMode:phimagerequestoptions deliveryMode=.opportunity){
let options=PHImageRequestOptions()
options.version=版本
options.deliveryMode=deliveryMode
PHImageManager.default().requestImage(for:asset,targetSize:targetSize,contentMode:contentMode,options:options){image,\uIn
guard let image=image else{return}
切换内容模式{
case.aspectFill:self.contentMode=.scaleAspectFill
case.aspectFit:self.contentMode=.scaleAspectFit
@未知默认值:fatalError()
}
self.image=image
}
}
}
类CollectionVC:UICollectionViewController,UICollectionViewDelegateFlowLayout{
var fetchResult:PHFetchResult=PHFetchResult()
func fetchAssets(){
让fetchOptions=PHFetchOptions()
fetchOptions.sortDescriptors=[NSSortDescriptor(键:“creationDate”,升序:false)]
fetchResult=PHAsset.fetchAssets(带:。图像,选项:fetchOptions)
}
重写func collectionView(collectionView:UICollectionView,cellForItemAt indexPath:indexPath)->UICollectionViewCell{
let cell=collectionView.dequeueReusableCell(withReuseIdentifier:“cell”,for:indepath作为indepath)
让asset=fetchResult.object(位于:indexPath.row)
让imageView=cell.viewWithTag(1)为!UIImageView
imageView.fetchImage(资产:资产,内容模式:.aspectFill,目标大小:imageView.frame.size*UIScreen.main.scale)
返回单元
}
重写func viewDidLoad(){
super.viewDidLoad()
获取资产()
}
重写func collectionView(collectionView:UICollectionView,numberOfItemsInSection:Int)->Int{
返回fetchResult.count
}
func collectionView(collectionView:UICollectionView,布局collectionViewLayout:UICollectionViewLayout,sizeForItemAt indexPath:indexPath)->CGSize{
let width=collectionView.frame.width/3-6
返回CGSize(宽度:宽度,高度:宽度)
}
func collectionView(collectionView:UICollectionView,布局collectionViewLayout:UICollectionViewLayout,MinimumLineSpacingforSection:Int)->CGFloat{
返回6.0
}
func collectionView(collectionView:UICollectionView,布局collectionViewLayout:UICollectionViewLayout,MinimumItemSpacingForSection:Int)->CGFloat{
返回6.0
}
}
这是我为集合视图控制器编写的所有代码。这是我得到的结果。
苹果图像选择器:
我的图像选择器:
我知道我的照片是从上到下的,但是你能看到的图像放大了很多。在故事板中,我有一个图像视图,标签为1,与单元格水平和垂直对齐。除此之外,我默认设置了所有图像属性。然后我有一个标识符为cell和默认属性的cell。这是我为集合视图控制器编写的所有代码和情节提要,但我仍然得到了这些结果。有什么想法吗?评论不可供进一步讨论;这段对话已经结束。