質問編集履歴

2

8/27 \(14:03\) 追記

2017/08/27 05:03

投稿

taro_nii_chan
taro_nii_chan

スコア207

test CHANGED
File without changes
test CHANGED
@@ -317,3 +317,103 @@
317
317
 
318
318
 
319
319
  どうしても言葉でうまく説明できないのがもどかしいのですが、少しでも伝わるでしょうか?
320
+
321
+
322
+
323
+ # 8/27 (14:03) 追記
324
+
325
+ コメントにも書きましたが、
326
+
327
+ `pageViewController(_:didFinishAnimating:previousViewControllers:transitionCompleted:)`
328
+
329
+ は使わずに、意図している動きが出来ているように見えています。
330
+
331
+
332
+
333
+ ```swift
334
+
335
+ // PageViewController.swift
336
+
337
+ extension PageViewController : UIPageViewControllerDataSource {
338
+
339
+
340
+
341
+ // 次のページを表示する時に呼ばれる
342
+
343
+ func pageViewController(_ pageViewController:
344
+
345
+ UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? {
346
+
347
+
348
+
349
+ // ここにスワイプする前のページが入ってくるみたい(前回、スワイプ完了でも途中でやめても)
350
+
351
+ let eachViewController = pageViewController.viewControllers?.first as! EachViewController
352
+
353
+
354
+
355
+ // インデックスをインクリメントする
356
+
357
+ index = (eachViewController.index + 1) % count
358
+
359
+
360
+
361
+ // ページを取得する
362
+
363
+ let page = eachViewControllers.index(of: viewController as! EachViewController)!
364
+
365
+
366
+
367
+ // 次のページの値をセットする
368
+
369
+ let nextPage = (page + 1) % 3
370
+
371
+
372
+
373
+ // 新しく表示するページに変数をセットする
374
+
375
+ eachViewControllers[nextPage].setBackgroundRgba(rgba[index])
376
+
377
+ eachViewControllers[nextPage].setRgb(red: red[index], green: green[index], blue: blue[index])
378
+
379
+ eachViewControllers[nextPage].setIndexTo(index)
380
+
381
+
382
+
383
+
384
+
385
+ // 新しいページを返す
386
+
387
+ return eachViewControllers[nextPage]
388
+
389
+ }
390
+
391
+ }
392
+
393
+ ```
394
+
395
+
396
+
397
+ で上手く行ってそうです。
398
+
399
+ ```swift
400
+
401
+ let eachViewController = pageViewController.viewControllers?.first as! EachViewController
402
+
403
+ index = (eachViewController.index + 1) % count
404
+
405
+ ```
406
+
407
+ がスワイプを途中でやめたときにインクリメントされない(経験則ですが)ようなので、
408
+
409
+ これを使ったのが良かったのかなと思っています。
410
+
411
+
412
+
413
+ 勘違い等あるかも知れないので、閉めるのはまだにしておこうと思います。
414
+
415
+
416
+
417
+ 気付いていない点、勘違いしてる点、
418
+
419
+ そもそもコードの書き方が汚い等ありましたら教えて下さい。

1

説明の不足の補足

2017/08/27 05:03

投稿

taro_nii_chan
taro_nii_chan

スコア207

test CHANGED
File without changes
test CHANGED
@@ -243,3 +243,77 @@
243
243
  }
244
244
 
245
245
  ```
246
+
247
+
248
+
249
+ # 補足
250
+
251
+ 言葉が足りませんでした。
252
+
253
+ ```swift
254
+
255
+ eachViewControllers[lastPage].setBackgroundRgba(rgba[lastPage])
256
+
257
+ eachViewControllers[lastPage].setIndexTo(lastPage)
258
+
259
+ ```
260
+
261
+
262
+
263
+ だと3ページ分しか表示できません。
264
+
265
+
266
+
267
+ やりたいのは
268
+
269
+
270
+
271
+ ```swift
272
+
273
+ let count: Int = 1 << (6 * 3)
274
+
275
+ ```
276
+
277
+
278
+
279
+ と定義したとても大きい数(`count`)だけのページを表示させたいのです。
280
+
281
+ (その、何番目なのかを `index` で持たせようとしています)
282
+
283
+
284
+
285
+ でも、
286
+
287
+ `EachViewController` クラスのインスタンスを `count` 個作るとメモリを喰って大変ですよね。
288
+
289
+ なので、添字が 0, 1, 2 の3つのインスタンスを
290
+
291
+ ```swift
292
+
293
+ for i in 0..<3 {
294
+
295
+ let eachViewController = EachViewController()
296
+
297
+ eachViewController.setIndexTo(i)
298
+
299
+ eachViewController.setBackgroundRgba(rgba[i])
300
+
301
+ eachViewControllers.append(eachViewController)
302
+
303
+ }
304
+
305
+ ```
306
+
307
+ の様に作り、
308
+
309
+ その背景色(`rgba`)及びページ番号(`index`)だけを書き換えて使いまわすことで大きい数のページがあるかのように見せたいという事です。
310
+
311
+
312
+
313
+ 最初に` eachViewControllers[0]`, ` eachViewControllers[1]`, ` eachViewControllers[2]`を作って真ん中の` eachViewControllers[1]` を表示させておき、
314
+
315
+ 1ページ進んだら`[0]`, `[1]`, `[2]`、から `[1]`, `[2]`, `[0]` へ(添字だけで書いてます)、さらに進んだら`[2]`, `[0]`, `[1]` と進めていくことで使いまわそうという考えです(戻る時も同様)。
316
+
317
+
318
+
319
+ どうしても言葉でうまく説明できないのがもどかしいのですが、少しでも伝わるでしょうか?