teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

2

ソース掲載

2017/07/03 05:08

投稿

wakuwakuWTP
wakuwakuWTP

スコア17

title CHANGED
File without changes
body CHANGED
@@ -6,7 +6,17 @@
6
6
  アルバムを指定して画像を取得するにはどうすればよいでしょうか?
7
7
  アドバイスをお願い致します。
8
8
 
9
+ **[追記]**
10
+ 質問に対して、ご指摘ありがとうございます。
11
+ また、投げやりな質問で大変失礼致しました。気をつけたいと思います。
9
12
 
13
+ やりたいことは指定のアルバム(MyCollection)から画像を取得してCollectionViewに表示したいです。
14
+ 色々自分なりに調べ、なんとかアルバムの写真のデータを取得できました。
15
+ しかし、CollectionViewで表示すると最後の1枚しか表示されませんでした。
16
+ (アルバム「MyCollection」には3枚写真があります)
17
+
18
+ 配列の入れ方に問題があるのでしょうか。
19
+
10
20
  ###該当のソースコード
11
21
  ```
12
22
  var photoAssets = [PHAsset]()
@@ -30,10 +40,127 @@
30
40
  options: nil) { (image, info) -> Void in
31
41
  imageView.image = image
32
42
  }
43
+ ```
33
44
 
34
45
 
35
46
 
47
+ [**修正**]
36
48
  ```
49
+ class PhotoViewController : UIViewController,UICollectionViewDataSource, UICollectionViewDelegate,UICollectionViewDelegateFlowLayout{
50
+
51
+
52
+ var dataArray :[String] = []
53
+
54
+ // var key : String = ""
55
+ // var value2 :String = ""
56
+
57
+ var photosImg:[UIImage] = []
58
+ var cellImage:UIImage?
59
+
60
+ override func viewDidLoad() {
61
+ super.viewDidLoad()
62
+
63
+ var albumName = "MyCollection"
64
+ var assetCollection = PHAssetCollection()
65
+ var albumFound = Bool()
66
+ var photoAssets = PHFetchResult<AnyObject>()
67
+ let fetchOptions = PHFetchOptions()
68
+
69
+ fetchOptions.predicate = NSPredicate(format: "title = %@", albumName)
70
+ let collection:PHFetchResult = PHAssetCollection.fetchAssetCollections(with: .album, subtype: .any, options: fetchOptions)
71
+
72
+ if let first_Obj:AnyObject = collection.firstObject{
73
+
74
+ assetCollection = collection.firstObject as! PHAssetCollection
75
+ albumFound = true
76
+ print("アルバムみつかった")
77
+ }else {
78
+ albumFound = false
79
+ print("アルバムみつからない")
80
+ }
81
+
82
+ var i = collection.count
83
+ photoAssets = PHAsset.fetchAssets(in: assetCollection, options: nil) as! PHFetchResult<AnyObject>
84
+ let imageManager = PHCachingImageManager()
85
+
86
+ photoAssets.enumerateObjects({(object: AnyObject!,
87
+ count: Int,
88
+ stop: UnsafeMutablePointer<ObjCBool>) in
89
+
90
+ if object is PHAsset{
91
+ let asset = object as! PHAsset
92
+
93
+ let imageSize = CGSize(width: asset.pixelWidth,
94
+ height: asset.pixelHeight)
95
+
96
+ let options = PHImageRequestOptions()
97
+ options.deliveryMode = .fastFormat
98
+ options.isSynchronous = true
99
+
100
+ imageManager.requestImage(
101
+ for: asset,
102
+ targetSize: imageSize,
103
+ contentMode: .aspectFill,
104
+ options: options,
105
+ resultHandler: {(image, info) -> Void in
106
+ //CollectionView用に配列に入れる!
107
+ self.photosImg = [image!]
108
+
109
+ }
110
+ )
111
+
112
+ }
113
+
114
+ })
115
+
116
+ }
117
+
118
+
119
+
120
+ func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell{
121
+
122
+ // Cell はストーリーボードで設定したセルのID
123
+ let testCell:UICollectionViewCell = collectionView.dequeueReusableCell(withReuseIdentifier: "Cell", for: indexPath)
124
+
125
+ // Tag番号を使ってImageViewのインスタンス生成
126
+ let imageView = testCell.contentView.viewWithTag(1) as! UIImageView
127
+
128
+ // 画像配列の番号で指定された要素の名前の画像をUIImageとする
129
+ //cellImage = UIImage(named: photosImg[(indexPath as NSIndexPath).row])
130
+ cellImage = photosImg[(indexPath as NSIndexPath).row]
131
+
132
+ // UIImageをUIImageViewのimageとして設定
133
+ imageView.image = cellImage
134
+
135
+ // Tag番号を使ってLabelのインスタンス生成
136
+ let label = testCell.contentView.viewWithTag(2) as! UILabel
137
+ label.text = "a"
138
+
139
+
140
+ return testCell
141
+ }
142
+ func numberOfSections(in collectionView: UICollectionView) -> Int {
143
+
144
+ // section数は1つ
145
+ return 1
146
+ }
147
+
148
+ func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
149
+ // 要素数を入れる、要素以上の数字を入れると表示でエラーとなる
150
+ return photosImg.count;
151
+
152
+ }
153
+ // Screenサイズに応じたセルサイズを返す
154
+ // UICollectionViewDelegateFlowLayoutの設定が必要
155
+ func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
156
+ let cellSize:CGFloat = self.view.frame.size.width/2-2
157
+ // 正方形で返すためにwidth,heightを同じにする
158
+ return CGSize(width: cellSize, height: cellSize)
159
+ }
160
+ ```
161
+
162
+
163
+
37
164
  ###補足情報(言語/FW/ツール等のバージョンなど)
38
165
  Xcode 8.3
39
166
  swift 3.1

1

ソース

2017/07/03 05:08

投稿

wakuwakuWTP
wakuwakuWTP

スコア17

title CHANGED
File without changes
body CHANGED
@@ -20,6 +20,19 @@
20
20
  }
21
21
  println(photoAssets)
22
22
  }
23
+
24
+ ・・・・・・・・
25
+
26
+ let manager: PHImageManager = PHImageManager()
27
+ manager.requestImageForAsset(asset,
28
+ targetSize: CGSizeMake(70, 70),
29
+ contentMode: .AspectFill,
30
+ options: nil) { (image, info) -> Void in
31
+ imageView.image = image
32
+ }
33
+
34
+
35
+
23
36
  ```
24
37
  ###補足情報(言語/FW/ツール等のバージョンなど)
25
38
  Xcode 8.3