質問編集履歴

2 ソース掲載

wakuwakuWTP

wakuwakuWTP score 13

2017/07/03 14:08  投稿

※至急※ swiftで指定したアルバムから画像を取得したい
###前提・実現したいこと
撮った写真を自分で作成したアルバムに保存することはできましたが、
逆に指定のアルバムから画像を取得することができなくてこまっています。
以下のソースでは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
  • iOS

    5436 questions

    iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

  • Xcode

    5899 questions

    Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

  • Swift

    10443 questions

    Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

1 ソース

wakuwakuWTP

wakuwakuWTP score 13

2017/07/02 18:43  投稿

※至急※ swiftで指定したアルバムから画像を取得したい
###前提・実現したいこと
撮った写真を自分で作成したアルバムに保存することはできましたが、
逆に指定のアルバムから画像を取得することができなくてこまっています。
以下のソースではiPnoheのカメラロールの画像すべてが取得できてしまいます。
アルバムを指定して画像を取得するにはどうすればよいでしょうか?
アドバイスをお願い致します。
###該当のソースコード
```
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  
   }  
 
 
 
```
###補足情報(言語/FW/ツール等のバージョンなど)
Xcode 8.3
swift 3.1
  • iOS

    5436 questions

    iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

  • Xcode

    5899 questions

    Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

  • Swift

    10443 questions

    Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る