2014-12-02 12 views
1

사진 섹션과 컬렉션보기가있는 앱으로 작업하고 있습니다. 세포의 이미지가 흐릿합니다. 전체 화면으로 볼 때 날카 롭고 테이블보기의 축소판으로 다른 화면에 나타납니다. Photo를 가져오고, PHAssets를 참조하며, getAsset() 및 getImage (size)라는 메서드를 포함하는 Photo라는 NSManagedObject 하위 클래스가 있습니다. 내 UICollectionView 서브 클래스의 cellForItemAtIndex에서사진 키트와 스위프트를 사용하여 UICollectionViewCell의 이미지가 흐림

class PhotoCollectionViewCell: UICollectionViewCell { 

@IBOutlet weak var imageForCell: UIImageView! 
@IBOutlet weak var labelForCell: UILabel! 

func setImage (photo: Photo?, size: CGSize) -> Bool { 

    if photo != nil { 
     if let image = photo?.getImage(size) { 
      var label = photo?.getLabel() 

      imageForCell.contentMode = UIViewContentMode.ScaleAspectFit 
      imageForCell.image = image 
      labelForCell.text = label 
      return true 
     } 
    } 
    return false 
} 

:

if let photo: Photo = listOfPhotos[indexPath.item] as? Photo { 

     var size: CGSize = CGSizeMake(500, 350) 

     if !cell.setImage(photo, size: size) { 
      // Handles a missing photo. 
     } 
    } 

이 생성 날짜에 따라 사진을 찾아 사진 NSManagedObject 하위 클래스에서 방법 :

여기

는 내 UICollectionViewCell 서브 클래스에 코드입니다
func getAsset() -> PHAsset? { 

    let fetchOptions = PHFetchOptions() 
    fetchOptions.predicate = NSPredicate(format: "creationDate = %@", photoDate) 
    let assets = PHAsset.fetchAssetsInAssetCollection(assetCollection, options: fetchOptions) 
    var asset: PHAsset? 
    if assets.count == 1 { 
     asset = assets.lastObject as? PHAsset 
    } 
    else { 
     // Handles invalid result 
    } 
    return asset 
} 

func getImage(size: CGSize) -> UIImage? { 

    var image: UIImage? 

    if let asset = getAsset() { 
     PHImageManager.defaultManager().requestImageForAsset(asset, targetSize: size, contentMode: PHImageContentMode.AspectFit , options: nil) { (result, info) -> Void in 

      image = result 
      println("P gI: Image gotten. Image Size: \(image?.size), Size: \(size), Date: \(asset.creationDate)") 
     } 
    } 
    else { 
    } 
    return image 
} 

getI의 println() 문 mage는 이것이 각기 다른 크기의 이미지를 두 번씩 가져 왔음을 보여 주었고 어느 ​​쪽도 지정된 크기가 아닙니다. 각 셀의 작은 크기가 먼저 가져오고 각 셀의 크기가 커집니다. 나는 더 작은 이미지가 내 세포를 채우기 위해 날아가 버렸다고 생각한다. (나는 그것이 흐릿해질 것이라고 생각한다.) 더 큰 크기로 로딩하지는 않는다. 로깅 출력 : 내 스토리 보드에서

P gI: Image gotten. Image Size: Optional((64.0,48.0)), Size: (500.0,350.0), Date: 2014-12-04 18:56:20 +0000 
P gI: Image gotten. Image Size: Optional((64.0,48.0)), Size: (500.0,350.0), Date: 2014-12-04 18:56:36 +0000 
P gI: Image gotten. Image Size: Optional((2048.0,1530.0)), Size: (500.0,350.0), Date: 2014-12-04 18:56:20 +0000 
P gI: Image gotten. Image Size: Optional((2048.0,1530.0)), Size: (500.0,350.0), Date: 2014-12-04 18:56:36 +0000 

, 내 이미지 뷰 세포 모두 250 X 175 내 이미지 뷰가 관리자의 화면 맞춤으로 설정되어 설정됩니다.

답변

1

Photos 프레임 워크는 속도를 위해 더 작은 크기를 먼저 가져온 다음 더 큰 이미지 크기를 가져옵니다.
당신은 요청 옵션을 설정하여 오직 큰 이미지를 가져올 수를 알 수 있습니다 :

let requestOptions = PHImageRequestOptions() 
requestOptions.deliveryMode = .HighQualityFormat 
PHImageManager.defaultManager().requestImageForAsset(asset, targetSize: size, contentMode: PHImageContentMode.AspectFit , options: requestOptions) { (result, info) in 
    // ... 
} 

더 많은 옵션에 대한 PHImageRequestOptionsDeliveryMode을 참조하십시오.