質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
iOS

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

Xcode

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

Swift

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

Q&A

解決済

2回答

5731閲覧

※至急※ swiftで指定したアルバムから画像を取得したい

wakuwakuWTP

総合スコア17

iOS

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

Xcode

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

Swift

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

0グッド

1クリップ

投稿2017/07/02 09:38

編集2017/07/03 05:08

###前提・実現したいこと
撮った写真を自分で作成したアルバムに保存することはできましたが、
逆に指定のアルバムから画像を取得することができなくてこまっています。

以下のソースでは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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fuzzball

2017/07/03 02:38

質問が雑すぎ。これSwift3.1じゃないでしょ?
wakuwakuWTP

2017/07/03 05:08

大変失礼いたしました。追記いたしました。
fuzzball

2017/07/03 05:24

途中で質問内容を変えないで下さい。(今回はこのままでいいですが)で、photosImg.countは3になっているのでしょうか?
wakuwakuWTP

2017/07/03 05:34

すみません。photosImg.countは1になってしまいます。
fuzzball

2017/07/03 05:49

じゃあCollectionViewは関係ないですよね。なぜ話をややこしくするのか‥。
guest

回答2

0

至急ということなのでとりあえず。
(iOS8.1)PhotoKitで各種アルバムを取得する

参考になれば。

【追記】

swift

1let collections = PHAssetCollection.fetchAssetCollections(with: .album, subtype: .albumRegular, options: nil) 2collections.enumerateObjects { (collection: PHAssetCollection, index: Int, stop) in 3 print(index, collection) 4 if collection.localizedTitle == "hoge" { //アルバム名 5 let assets = PHAsset.fetchAssets(in: collection, options: nil) 6 assets.enumerateObjects({ (asset, index, stop) in 7 print(index, asset) 8 }) 9 //stop.pointee = true //同じ名前のアルバムが複数存在出来るようなのでstopしない 10 } else { 11 print(index, "skip") 12 } 13}

PHFetchOptionsを使ったら、もう少し効率良く出来るかもしれませんが。

質問編集後の回答

swift

1self.photosImg = [image!]

上書きになっているので、追加にして下さい。

投稿2017/07/02 23:56

編集2017/07/03 05:53
fuzzball

総合スコア16731

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

wakuwakuWTP

2017/07/03 01:33

参考となるサイトをありがとうございます。自分でも調べている際に、こちらのサイトを何度か拝見したのですが初心者の自分ではどのようにプログラミングしたらよいかわかりませんでした・・・。
fuzzball

2017/07/03 04:10

参考コードを追記しました。
wakuwakuWTP

2017/07/03 05:20

大変失礼いたしました。追記いたしました。
fuzzball

2017/07/03 05:53

回答に追記しました。
guest

0

自己解決

self.photosImg = [image!]
上書きになっているので、追加にして下さい。

気づきませんでした。
こちらを以下に修正したらうまくいきました。ありがとうございます。
self.photosImg.append(image!)

投稿2017/07/03 05:57

wakuwakuWTP

総合スコア17

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問