みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

Swiftについて教えてください

カメラロールにある写真をUICollectionViewCellに読み込んで表示させ、その写真をタッチしたときに、その写真のURL(保存されているカメラロールまでのパス?)を取得し、配列に格納しようと考えています。
「ALassetslibrary url 取得」というキーワードなどで調べてみたのですが、Objective-Cで書かれたものやimagePickerControllerを使ったもがほとんどでで、よくわかりませんでした。

http://tryworks-design.com/?p=2282

http://tech.camph.net/%E3%80%90ios%E3%80%91iphone%E3%81%AE%E3%82%AB%E3%83%A1%E3%83%A9%E3%83%AD%E3%83%BC%E3%83%AB%E3%81%AB%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9%E3%81%99%E3%82%8Bassetslibrary%E3%81%AB%E3%81%A4%E3%81%84/
ライブラリ内でのURL  [[asset defaultRepresentation] url] //AssetURL(NSURL*型)

Swiftでの情報で
http://qiita.com/BOPsemi/items/9a0338635647cd34c910
があったので、var library = ALAssetsLibrary()とし、
libraryのassetForURLというメソッドを使うのかなど調べてみたのですがよく分かりませんでした。

UICollectionViewCellに読み込んで表示させ、その写真をタッチしたときの
func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) {

}
の中でどのような処理をすれば良いのでしょうか?教えてください。よろしくお願いします。

投稿日時 - 2016-01-11 07:52:07

QNo.9109495

すぐに回答ほしいです

質問者が選んだベストアンサー

> URL(保存されているカメラロールまでのパス?)を取得し、配列に格納しようと考えています。

前回の
http://bekkoame.okwave.jp/qa9098020.html
の質問でassetsにALAssetオブジェクトの配列を取得できていますから、
カメラロールの画像を扱いたいなら、そのALAssetを使えばよいはずです。

なので、なぜURLを配列に格納したいのかわかりませんが、
どうしてもURLを取得したいなら、今回の質問にも書かれている
[[asset defaultRepresentation] url]
をswiftに変換して
asset.defaultRepresentation().url()
とすればよいです。

ちなみに、これで得られるURLは一般的な
「http://~」や「file://~」のスキームでなく
「assets-library://~」というスキームで表現されているため、
このURLを指定してカメラロールの画像を使用するには
結局AssetLibraryを使ってALAssetオブジェクトを得る必要があります。
このURLを指定してALAssetオブジェクトを得るメソッドが、
質問にも書かれている「assetForURL」ですが、面倒な非同期ブロックを
記述して取得する必要があります。そうすると、また前回の質問のような
取得タイミングの問題が出てきます。
なので、ALAssetオブジェクトを取得できているなら、わざわざURLに変換して
格納しなくても、ALAssetオブジェクトをそのまま使った方が簡単です。

AssetLibraryのURLを保存する必要があるケースは、
指定されたカメラロールの画像をアプリ再起動後も再読み込みして
表示する(このためにAssetLibraryのURLを外部のファイルやサーバーに
保存する)ケースくらいじゃないかなと思います。

投稿日時 - 2016-01-11 15:35:50

お礼

回答ありがとうございます。urlばかり考えていたのですが、取得しているassetを使うことで、やりたかったことが、スムーズにできました。ありがとうございました。

投稿日時 - 2016-01-17 10:18:39

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問