質問編集履歴

2

誤字

2021/03/01 08:38

投稿

konakizzi_mk
konakizzi_mk

スコア21

test CHANGED
@@ -1 +1 @@
1
- 【swift】タイムラインアプリを作りた
1
+ 【swift】DKAssetにつ
test CHANGED
File without changes

1

書式の改善

2021/03/01 08:38

投稿

konakizzi_mk
konakizzi_mk

スコア21

test CHANGED
File without changes
test CHANGED
@@ -1,217 +1,9 @@
1
- ##前提・実現したいこと
1
+ ##質問
2
2
 
3
- Twitterのようなタイムラインを作成したく、DKImagePickerControllerで複数選択た画像投稿たいと思ってい
3
+ DKImagePickerControllerライブラリを導入てアプリ作成しているのでが、```DKAsset
4
+
5
+ ```の```fetchImage```と```fetchFullScreenImage```の違いが理解し切れていません。
4
6
 
5
7
 
6
8
 
7
- DKImagePickerControllerライブラリを導入する前はテキスト+複数画像添付で投稿しタイムライン表示できていたのですが、ライブラリ導入後複数画像添付はできるものの投稿ボタンを押下してもタイムラインに表示されなくなってしまいました。
8
-
9
-
10
-
11
- ※必要な処理だけ抜粋します
12
-
13
- ライブラリ導入前
14
-
15
- ```swift
16
-
17
- func onPostPicture(comment: String, pictures: [UIImage]) {
18
-
19
- preconditionFailure("This method must be overridden")
20
-
21
- }
22
-
23
-
24
-
25
- //アルバムから画像選択できるようにする
26
-
27
- func commentFormViewDidTapAlbum() {
28
-
29
- let imagePicker = UIImagePickerController()
30
-
31
- imagePicker.sourceType = .photoLibrary
32
-
33
- imagePicker.delegate = self
34
-
35
- self.present(imagePicker, animated: true, completion: nil)
36
-
37
- }
38
-
39
- //選択ボタン押下後添付する
40
-
41
- func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey: Any]) {
42
-
43
- if let image = info[UIImagePickerController.InfoKey.originalImage] as? UIImage {
44
-
45
- // 画像選択
46
-
47
- dismiss(animated: true) {
48
-
49
- self.showShareImageForm(image: image)
50
-
51
- }
52
-
53
- }
54
-
55
- }
56
-
57
-
58
-
59
- //投稿ボタンを押下後タイムラインに投稿したものを表示する
60
-
61
- func commentShareViewControllerDidTapPost(comment: String, parentTalkId: TalkId?, attachment: TalkAttachment?) {
62
-
63
- guard let attachment = attachment else {
64
-
65
- self.onPostComment(comment: comment, parentTalkId: parentTalkId)
66
-
67
- return
68
-
69
- }
70
-
71
- if case .picture(let pictures) = attachment {
9
+ 2パターンコードを書いてビルドしてみましたが、違いがわからなかったので、ご教示いただきたいです。
72
-
73
- self.onPostPicture(comment: comment, pictures: pictures, parentTalkId: parentTalkId)
74
-
75
- }
76
-
77
-
78
-
79
- //省略
80
-
81
- }
82
-
83
- ```
84
-
85
-
86
-
87
- ライブラリ導入後
88
-
89
- ```swift
90
-
91
- func onPostPicture(comment: String, pictures: [UIImage]) {
92
-
93
- preconditionFailure("This method must be overridden")
94
-
95
- }
96
-
97
-
98
-
99
- //アルバムから画像選択できるようにする
100
-
101
- func commentFormViewDidTapAlbum() {
102
-
103
- let imagePicker = DKImagePickerController()
104
-
105
- imagePicker.allowMultipleTypes = false
106
-
107
- imagePicker.maxSelectableCount = 4
108
-
109
- imagePicker.assetType = .allPhotos
110
-
111
- imagePicker.sourceType = .photo
112
-
113
-  imagePicker.didSelectAssets = { [unowned self] (assets: [DKAsset]) in
114
-
115
- showShareImageForm(assets: assets)
116
-
117
-  }
118
-
119
-  self.present(imagePicker, animated: true, completion: nil)
120
-
121
- }
122
-
123
- //選択ボタン押下後添付する
124
-
125
- func showShareImageForm(assets: [DKAsset]) {
126
-
127
- let vc = UIStoryboard(name: "CommentForm", bundle: nil).instantiateInitialViewController() as! CommentShareViewController
128
-
129
- let dispatchGroup = DispatchGroup()
130
-
131
- let dispatchQueue = DispatchQueue(label: "updateImagesQueue", attributes: .concurrent)
132
-
133
- for asset in assets {
134
-
135
- dispatchGroup.enter()
136
-
137
- dispatchQueue.async(group: dispatchGroup) {
138
-
139
- asset.fetchFullScreenImage(completeBlock: { image, _ in
140
-
141
- if let picture = image {
142
-
143
- if vc.attachment == nil {
144
-
145
- vc.attachPicture(pictures: [picture])
146
-
147
- } else if case .picture(var pictures) = vc.attachment {
148
-
149
- pictures.append(picture)
150
-
151
- vc.attachPicture(pictures: pictures)
152
-
153
- }
154
-
155
- }
156
-
157
- dispatchGroup.leave()
158
-
159
- })
160
-
161
- }
162
-
163
- }
164
-
165
- // 全ての非同期処理完了後にメインスレッドで処理
166
-
167
- dispatchGroup.notify(queue: .main) {
168
-
169
- self.present(UINavigationController(rootViewController: vc), animated: true, completion: nil)
170
-
171
- }
172
-
173
- }
174
-
175
-
176
-
177
- //投稿ボタンを押下後タイムラインに投稿したものを表示する
178
-
179
- func commentShareViewControllerDidTapPost(comment: String, parentTalkId: TalkId?, attachment: TalkAttachment?) {
180
-
181
- guard let attachment = attachment else {
182
-
183
- self.onPostComment(comment: comment, parentTalkId: parentTalkId)
184
-
185
- return
186
-
187
- }
188
-
189
- if case .picture(let pictures) = attachment {
190
-
191
- self.onPostPicture(comment: comment, pictures: pictures, parentTalkId: parentTalkId)
192
-
193
- }
194
-
195
-
196
-
197
- //省略
198
-
199
- }
200
-
201
- ```
202
-
203
-
204
-
205
- ##試してみたこと
206
-
207
- `onPostPicture()`の引数`pictures: [UIImage]`を`pictures: [DKAsset]`に変更しましたが、
208
-
209
- `commentShareViewControllerDidTapPost()`内で使用している`onPostPicture()`の引数`pictures: pictures`で、
210
-
211
- Cannot convert value of type '[UIImage]' to expected argument type '[DKAsset]'
212
-
213
- とエラーが表示されます。
214
-
215
-
216
-
217
- ライブラリ導入前は複数枚の画像を添付し、投稿できていたのに画像複数選択→複数画像添付で投稿できなくなってしまったのは何故でしょうか?