###前提・実現したいこと
撮った写真を自分で作成したアルバムに保存することはできましたが、
逆に指定のアルバムから画像を取得することができなくてこまっています。
以下のソースではiPnoheのカメラロールの画像すべてが取得できてしまいます。
アルバムを指定して画像を取得するにはどうすればよいでしょうか?
アドバイスをお願い致します。
[追記]
質問に対して、ご指摘ありがとうございます。
また、投げやりな質問で大変失礼致しました。気をつけたいと思います。
やりたいことは指定のアルバム(MyCollection)から画像を取得してCollectionViewに表示したいです。
色々自分なりに調べ、なんとかアルバムの写真のデータを取得できました。
しかし、CollectionViewで表示すると最後の1枚しか表示されませんでした。
(アルバム「MyCollection」には3枚写真があります)
配列の入れ方に問題があるのでしょうか。
###該当のソースコード
var photoAssets = [PHAsset]() func getPhotos() { photoAssets = [] var assets: PHFetchResult = PHAsset.fetchAssetsWithMediaType(.Image, options: nil) assets.enumerateObjectsUsingBlock { (asset, index, stop) -> Void in self.photoAssets.append(asset as PHAsset) } println(photoAssets) } ・・・・・・・・ let manager: PHImageManager = PHImageManager() manager.requestImageForAsset(asset, targetSize: CGSizeMake(70, 70), contentMode: .AspectFill, options: nil) { (image, info) -> Void in imageView.image = image }
[修正]
class PhotoViewController : UIViewController,UICollectionViewDataSource, UICollectionViewDelegate,UICollectionViewDelegateFlowLayout{ var dataArray :[String] = [] // var key : String = "" // var value2 :String = "" var photosImg:[UIImage] = [] var cellImage:UIImage? override func viewDidLoad() { super.viewDidLoad() var albumName = "MyCollection" var assetCollection = PHAssetCollection() var albumFound = Bool() var photoAssets = PHFetchResult<AnyObject>() let fetchOptions = PHFetchOptions() fetchOptions.predicate = NSPredicate(format: "title = %@", albumName) let collection:PHFetchResult = PHAssetCollection.fetchAssetCollections(with: .album, subtype: .any, options: fetchOptions) if let first_Obj:AnyObject = collection.firstObject{ assetCollection = collection.firstObject as! PHAssetCollection albumFound = true print("アルバムみつかった") }else { albumFound = false print("アルバムみつからない") } var i = collection.count photoAssets = PHAsset.fetchAssets(in: assetCollection, options: nil) as! PHFetchResult<AnyObject> let imageManager = PHCachingImageManager() photoAssets.enumerateObjects({(object: AnyObject!, count: Int, stop: UnsafeMutablePointer<ObjCBool>) in if object is PHAsset{ let asset = object as! PHAsset let imageSize = CGSize(width: asset.pixelWidth, height: asset.pixelHeight) let options = PHImageRequestOptions() options.deliveryMode = .fastFormat options.isSynchronous = true imageManager.requestImage( for: asset, targetSize: imageSize, contentMode: .aspectFill, options: options, resultHandler: {(image, info) -> Void in //CollectionView用に配列に入れる! self.photosImg = [image!] } ) } }) } func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell{ // Cell はストーリーボードで設定したセルのID let testCell:UICollectionViewCell = collectionView.dequeueReusableCell(withReuseIdentifier: "Cell", for: indexPath) // Tag番号を使ってImageViewのインスタンス生成 let imageView = testCell.contentView.viewWithTag(1) as! UIImageView // 画像配列の番号で指定された要素の名前の画像をUIImageとする //cellImage = UIImage(named: photosImg[(indexPath as NSIndexPath).row]) cellImage = photosImg[(indexPath as NSIndexPath).row] // UIImageをUIImageViewのimageとして設定 imageView.image = cellImage // Tag番号を使ってLabelのインスタンス生成 let label = testCell.contentView.viewWithTag(2) as! UILabel label.text = "a" return testCell } func numberOfSections(in collectionView: UICollectionView) -> Int { // section数は1つ return 1 } func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { // 要素数を入れる、要素以上の数字を入れると表示でエラーとなる return photosImg.count; } // Screenサイズに応じたセルサイズを返す // UICollectionViewDelegateFlowLayoutの設定が必要 func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { let cellSize:CGFloat = self.view.frame.size.width/2-2 // 正方形で返すためにwidth,heightを同じにする return CGSize(width: cellSize, height: cellSize) }
###補足情報(言語/FW/ツール等のバージョンなど)
Xcode 8.3
swift 3.1
回答2件
あなたの回答
tips
プレビュー