ストーリーボードを使用しない場合のUICollectionViewとPhotosの使用について
swiftで、PhotosとUICollectionViewを利用し、カメラロールにある写真全てを表示するプログラムを作成しているのですが、UICollectionViewの部分でうまくいかず困っています。
ストーリーボードを使用していないせいで、viewWithTag(1)がnilなっているというところまではわかったのですが、対処方法がわからない状態です。
できるだけ、ストーリーボードは使用せずに解決したいと思っています・・・。
お力添えいただけたら幸いです。よろしくお願いいたします。
import Foundation
import UIKit
import Photos
class AlbumView: UIViewController,UICollectionViewDelegate, UICollectionViewDataSource{
var photoAssets = [PHAsset]()
var collectionView: UICollectionView!
override func viewDidLoad() {
println("now I show you alubum view!")
super.viewDidLoad()
//background image
self.view.backgroundColor = UIColor(patternImage: UIImage(named: "cotton-a.png")!)
// レイアウト作成
let flowLayout = UICollectionViewFlowLayout()
flowLayout.scrollDirection = .Vertical
flowLayout.minimumInteritemSpacing = 5.0
flowLayout.minimumLineSpacing = 5.0
flowLayout.itemSize = CGSizeMake(100, 100)
getAllPhotosInfo()
// コレクションビュー作成
collectionView = UICollectionView(frame: view.frame, collectionViewLayout: flowLayout)
collectionView.registerClass(UICollectionViewCell.classForCoder(), forCellWithReuseIdentifier: "cell")
collectionView.dataSource = self
view.addSubview(collectionView)
}
func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return photoAssets.count
}
func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
let cell = self.collectionView.dequeueReusableCellWithReuseIdentifier("cell", forIndexPath: indexPath) as! UICollectionViewCell
let asset = photoAssets[indexPath.row]
var imageView = cell.viewWithTag(1) as! UIImageView //<-ここでnilになってしまい落ちてしまいます。
let manager: PHImageManager = PHImageManager()
manager.requestImageForAsset(asset,
targetSize: CGSizeMake(120, 120),
contentMode: .AspectFill,
options: nil) { (image, info) -> Void in
println("image is \(image)")
imageView.image = image
}
return cell
}
private func getAllPhotosInfo() {
photoAssets = []
var options = PHFetchOptions()
options.sortDescriptors = [
NSSortDescriptor(key: "creationDate", ascending: false)
]
//取得するタイプを選択。今回はimage.
var assets: PHFetchResult = PHAsset.fetchAssetsWithMediaType(.Image, options: nil)
assets.enumerateObjectsUsingBlock { (asset, index, stop) -> Void in
self.photoAssets.append(asset as! PHAsset)
}
}
}