回答編集履歴
4
大幅修正
test
CHANGED
@@ -157,3 +157,111 @@
|
|
157
157
|
でも、実は計算式をなんども回しててリソースを無駄にしてるコードですね。
|
158
158
|
|
159
159
|
もっとスッキリ書けますね。
|
160
|
+
|
161
|
+
|
162
|
+
|
163
|
+
|
164
|
+
|
165
|
+
下記にきちんと動くコードを記載しました。
|
166
|
+
|
167
|
+
imageViewの大きさを先に計算することでリソースもごくわずかに節約してます。
|
168
|
+
|
169
|
+
|
170
|
+
|
171
|
+
```Swift
|
172
|
+
|
173
|
+
import UIKit
|
174
|
+
|
175
|
+
|
176
|
+
|
177
|
+
class ViewController: UIViewController {
|
178
|
+
|
179
|
+
|
180
|
+
|
181
|
+
var viewWidth: CGFloat!
|
182
|
+
|
183
|
+
var viewHeight: CGFloat!
|
184
|
+
|
185
|
+
// ここの下を変えれば表示変えられる。
|
186
|
+
|
187
|
+
var imageWidth:CGFloat = 0.0 // 新規追加
|
188
|
+
|
189
|
+
var imageHeight:CGFloat = 0.0 // 新規追加
|
190
|
+
|
191
|
+
var n : Int = 0 // 新規追加
|
192
|
+
|
193
|
+
let verticalSpace:CGFloat = 10.0
|
194
|
+
|
195
|
+
let horizontalSpace:CGFloat = 30.0
|
196
|
+
|
197
|
+
var imageNameArray = ["List.png", "menuIcon.png", "server.png", "Settings.png"]
|
198
|
+
|
199
|
+
let totalRow = 2
|
200
|
+
|
201
|
+
let totalColum = 2
|
202
|
+
|
203
|
+
|
204
|
+
|
205
|
+
override func viewDidLoad() {
|
206
|
+
|
207
|
+
super.viewDidLoad()
|
208
|
+
|
209
|
+
self.viewWidth = self.view.frame.size.width
|
210
|
+
|
211
|
+
self.viewHeight = self.view.frame.size.height
|
212
|
+
|
213
|
+
self.imageWidth = (self.viewWidth - (CGFloat(totalColum + 1) * horizontalSpace)) / CGFloat(totalColum) // 新規追加
|
214
|
+
|
215
|
+
self.imageHeight = (self.viewHeight - (CGFloat(totalRow + 1) * verticalSpace)) / CGFloat(totalRow) // 新規追加
|
216
|
+
|
217
|
+
|
218
|
+
|
219
|
+
// for文を重ねることで、各行ずつ、列を追加している
|
220
|
+
|
221
|
+
for i in 0 ... totalRow - 1 {
|
222
|
+
|
223
|
+
for j in 0 ... totalColum - 1 {
|
224
|
+
|
225
|
+
makeView(Row: i, Colum: j, imageNo: n) // nに変更
|
226
|
+
|
227
|
+
n = n + 1
|
228
|
+
|
229
|
+
}
|
230
|
+
|
231
|
+
}
|
232
|
+
|
233
|
+
|
234
|
+
|
235
|
+
}
|
236
|
+
|
237
|
+
|
238
|
+
|
239
|
+
func makeView(Row: Int, Colum: Int, imageNo: Int) {
|
240
|
+
|
241
|
+
print("makeView[Row]", Row, "[Colum]", Colum, "[imageNo]", imageNo) // 確認用
|
242
|
+
|
243
|
+
// 画像のファイル名を取り出し、viewにセットする
|
244
|
+
|
245
|
+
let image:UIImage = UIImage(named: self.imageNameArray[imageNo])!
|
246
|
+
|
247
|
+
let imageView = UIImageView(image:image)
|
248
|
+
|
249
|
+
// 画像の位置・大きさを指定する
|
250
|
+
|
251
|
+
imageView.frame = CGRect(x: horizontalSpace * CGFloat(Colum + 1) + imageWidth * CGFloat(Colum), // 計算し直し
|
252
|
+
|
253
|
+
y: verticalSpace * CGFloat(Row + 1) + imageHeight * CGFloat(Row), // 計算し直し
|
254
|
+
|
255
|
+
width: self.imageWidth,
|
256
|
+
|
257
|
+
height: self.imageHeight)
|
258
|
+
|
259
|
+
print(n, "番目のimageView.frame=", imageView.frame) // 確認用
|
260
|
+
|
261
|
+
imageView.tag = Row * 100 + Colum
|
262
|
+
|
263
|
+
self.view.addSubview(imageView)
|
264
|
+
|
265
|
+
}
|
266
|
+
|
267
|
+
```
|
3
コード微修正
test
CHANGED
@@ -82,9 +82,9 @@
|
|
82
82
|
|
83
83
|
// 画像の大きさを設定
|
84
84
|
|
85
|
-
let imageWidth:CGFloat = ( viewWidth - (verticalSpace * (Row + 1) ) ) / CGFloat(Row)
|
85
|
+
let imageWidth:CGFloat = ( viewWidth - (verticalSpace * CGFloat(Row + 1) ) ) / CGFloat(Row)
|
86
86
|
|
87
|
-
let imageHeight:CGFloat = ( viewHeight - (horizontalSpace * (Colum + 1) ) ) / CGFloat(Colum)
|
87
|
+
let imageHeight:CGFloat = ( viewHeight - (horizontalSpace * CGFloat(Colum + 1) ) ) / CGFloat(Colum)
|
88
88
|
|
89
89
|
// 画像の位置・大きさを指定する
|
90
90
|
|
@@ -103,8 +103,6 @@
|
|
103
103
|
|
104
104
|
|
105
105
|
```
|
106
|
-
|
107
|
-
|
108
106
|
|
109
107
|
|
110
108
|
|
@@ -153,3 +151,9 @@
|
|
153
151
|
各imageのサイズが違いそうなので、
|
154
152
|
|
155
153
|
絵の中心点をセットするコードに変更した方がいいかもしれないですね。
|
154
|
+
|
155
|
+
|
156
|
+
|
157
|
+
でも、実は計算式をなんども回しててリソースを無駄にしてるコードですね。
|
158
|
+
|
159
|
+
もっとスッキリ書けますね。
|
2
追記2
test
CHANGED
@@ -124,7 +124,7 @@
|
|
124
124
|
|
125
125
|
何x何でも対応できると思います。
|
126
126
|
|
127
|
-
左右上下の
|
127
|
+
左右上下の間隔も大きさの数字をいじれば調整できます。
|
128
128
|
|
129
129
|
|
130
130
|
|
@@ -145,3 +145,11 @@
|
|
145
145
|
絵を書いて、2x2や3x3で計算式を立ててみると、理解しやすいと思います。
|
146
146
|
|
147
147
|
頑張ってください。
|
148
|
+
|
149
|
+
|
150
|
+
|
151
|
+
[追伸]
|
152
|
+
|
153
|
+
各imageのサイズが違いそうなので、
|
154
|
+
|
155
|
+
絵の中心点をセットするコードに変更した方がいいかもしれないですね。
|
1
追記
test
CHANGED
@@ -30,11 +30,11 @@
|
|
30
30
|
|
31
31
|
var viewHeight: CGFloat!
|
32
32
|
|
33
|
+
// ここの下を変えれば表示変えられる。
|
34
|
+
|
33
35
|
var verticalSpace:CGFloat = 10.0
|
34
36
|
|
35
37
|
var horizontalSpace:CGFloat = 20.0
|
36
|
-
|
37
|
-
// ここの下を変えれば表示変えられる。
|
38
38
|
|
39
39
|
var imageNameArray = ["xxxx.jpg", "xxxx.jpg", "xxxx.jpg", "xxxx.jpg"]
|
40
40
|
|
@@ -113,3 +113,35 @@
|
|
113
113
|
上記が理解できたら、それを使って横向きにしたら、
|
114
114
|
|
115
115
|
変更されるようにコード書いてみるのも勉強になると思います。
|
116
|
+
|
117
|
+
|
118
|
+
|
119
|
+
サンプルでは2x2の表示を想定していますが、
|
120
|
+
|
121
|
+
計算は定数を使って行なっているので、
|
122
|
+
|
123
|
+
初期のグローバル定数、絵のファイル名リストを編集すれば、
|
124
|
+
|
125
|
+
何x何でも対応できると思います。
|
126
|
+
|
127
|
+
左右上下の感覚も大きさの数字をいじれば調整できます。
|
128
|
+
|
129
|
+
|
130
|
+
|
131
|
+
ちなみに比率保存のためにはself.viewの高さが大きい時と、
|
132
|
+
|
133
|
+
self.viewの横幅が大きい場合に場合分けして、
|
134
|
+
|
135
|
+
絵の縦横の大きい辺の計算をまず、空白を引いて、
|
136
|
+
|
137
|
+
残った距離を個数で割り、元の絵のサイズで割り最大倍率を計算し、
|
138
|
+
|
139
|
+
残りの辺はその倍率を元の幅に対して掛けて計算し、
|
140
|
+
|
141
|
+
最後に空白はその絵の幅を抜いたものを等分する式を作ればいいはずです。
|
142
|
+
|
143
|
+
ちょっと言葉では複雑になりますね。
|
144
|
+
|
145
|
+
絵を書いて、2x2や3x3で計算式を立ててみると、理解しやすいと思います。
|
146
|
+
|
147
|
+
頑張ってください。
|