質問編集履歴

1

tyobigorou様のご指摘により修正しました.

2020/07/12 02:52

投稿

ponponpoo
ponponpoo

スコア1

test CHANGED
File without changes
test CHANGED
@@ -35,3 +35,215 @@
35
35
 
36
36
 
37
37
  よろしくおねがいします.
38
+
39
+
40
+
41
+ 
42
+
43
+ ### 追記
44
+
45
+ 画面AからBへはpresent()を使用しています.
46
+
47
+ 画面Bは全画面表示なので画面BはAの子供となるのでしょうか?
48
+
49
+
50
+
51
+ 画面Bはだいたい以下の構造です.(本当は下のContainerViewを変えるボタンがあります)
52
+
53
+ CollectionViewには,スタンプの画像一覧が表示されます.
54
+
55
+ ![イメージ](71d00c78e37c5ab900a93f6eb1a9a9d5.png)
56
+
57
+
58
+
59
+ ContainerViewの中身は切り替えができます.
60
+
61
+ そこのところは,[こちら](https://spin.atomicobject.com/2015/10/13/switching-child-view-controllers-ios-auto-layout/)を参考にしました.
62
+
63
+
64
+
65
+
66
+
67
+ 動作イメージは,
68
+
69
+ Cellに表示されているスタンプ(Cell)を長押し → スタンプが手の動きに合わせて移動(Cellの画像を複製) → ImageViewに持っていく → 貼り付ける
70
+
71
+
72
+
73
+ 貼り付けたものを長押し → スタンプを移動
74
+
75
+
76
+
77
+ といった具合です.
78
+
79
+
80
+
81
+ BVCは,ContainerViewの表示を切り替えるものが記述されています.
82
+
83
+ (上リンク)
84
+
85
+
86
+
87
+ CVCでは
88
+
89
+ ① 長押しでCellの画像を複製,画像移動のために,ロングプレスとパンを設定
90
+
91
+ ```Swift
92
+
93
+ func setGesture() {
94
+
95
+ //長押しをセット
96
+
97
+ let longPressGesture =
98
+
99
+ UILongPressGestureRecognizer(target: self,
100
+
101
+ action: #selector(self.longPress(_:)))
102
+
103
+ longPressGesture.delegate = self
104
+
105
+
106
+
107
+ //パンをセット
108
+
109
+ let panGesture = UIPanGestureRecognizer(target: self, action: #selector(HGotItemViewController.panView(sender:)))
110
+
111
+ panGesture.delegate = self
112
+
113
+
114
+
115
+ self.collectionView.addGestureRecognizer(longPressGesture)
116
+
117
+ self.collectionView.addGestureRecognizer(panGesture)
118
+
119
+
120
+
121
+ }
122
+
123
+ ```
124
+
125
+
126
+
127
+ ② Cellを長押しされたらCell内の画像のUIImageViewを作る
128
+
129
+ ```Swift
130
+
131
+
132
+
133
+ @objc func longPress(_ sender: UILongPressGestureRecognizer){
134
+
135
+ if sender.state == .began {
136
+
137
+
138
+
139
+ //押された座標とCell番号
140
+
141
+ newTapPoint = sender.location(in: view)
142
+
143
+ tapPoint = sender.location(in: view)
144
+
145
+ let indexPath = self.collectionView.indexPathForItem(at: tapPoint)
146
+
147
+
148
+
149
+ if indexPath != nil{
150
+
151
+ //indexPathからアイテムの画像を判断
152
+
153
+ itemImage = (UIImage(named: "item/(indexPath!.row)")?.withRenderingMode(.alwaysTemplate))!
154
+
155
+
156
+
157
+ //追加するViewが手の位置にくるように設定
158
+
159
+ stampView = UIImageView(frame: CGRect(x: tapPoint.x,y: tapPoint.y, width: 168, height: 90))
160
+
161
+ stampView.backgroundColor = .red
162
+
163
+ stampView.center = CGPoint(x:tapPoint.x+470,y:tapPoint.y)
164
+
165
+ stampView.image = itemColorImage
166
+
167
+
168
+
169
+ //追加したあとも位置を変えられるように長押しとパンを設定
170
+
171
+
172
+
173
+ let longPressGesture2 =
174
+
175
+ UILongPressGestureRecognizer(target: self,
176
+
177
+ action: #selector (self.move(_:)))
178
+
179
+ longPressGesture2.delegate = self
180
+
181
+ stampView.addGestureRecognizer(longPressGesture2)
182
+
183
+
184
+
185
+ let panGesture2 = UIPanGestureRecognizer(target: self, action: #selector(self.panView(sender:)))
186
+
187
+ panGesture2.delegate = self
188
+
189
+ stampView.addGestureRecognizer(panGesture2)
190
+
191
+
192
+
193
+ stampView.isUserInteractionEnabled = true
194
+
195
+
196
+
197
+ //Viewを追加
198
+
199
+ self.parent?.view.addSubview(stampView)
200
+
201
+ }
202
+
203
+ }else if sender.state == .ended{
204
+
205
+
206
+
207
+ //画像以外のところに載せたら消す
208
+
209
+ if imageView.frame.contains(endPoint){
210
+
211
+ print("endPoint=",endPoint)
212
+
213
+ }else{
214
+
215
+ stampView.removeFromSuperview()
216
+
217
+ }
218
+
219
+ }
220
+
221
+ }
222
+
223
+
224
+
225
+ }
226
+
227
+ ```
228
+
229
+
230
+
231
+ を行っています.
232
+
233
+
234
+
235
+
236
+
237
+ データの永続化もしたいです.
238
+
239
+ 画面Aに戻った,アプリを落としたあとも,画面Bにくると編集していた画面を
240
+
241
+ 表示させたいです.
242
+
243
+ 永続化方法については,userDefaultsを使用しようと考えていますが,
244
+
245
+ 初心者のため,何もわからず,データもそんな大きくならないと思うので
246
+
247
+ とりあえず検索して出てきたこれにしよう程度のです.
248
+
249
+ なので,もし,他に良い方法があれば教えて下さい.