Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在不放大的情况下使图像具有良好的质量(swift)_Swift_Image_Phphotolibrary_Cgsize - Fatal编程技术网

如何在不放大的情况下使图像具有良好的质量(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。这是我为集合视图控制器编写的所有代码和情节提要,但我仍然得到了这些结果。有什么想法吗?

评论不可供进一步讨论;这段对话已经结束。