回答編集履歴

2

回答追記

2017/08/27 17:13

投稿

TakeOne
TakeOne

スコア6299

test CHANGED
@@ -100,4 +100,74 @@
100
100
 
101
101
 
102
102
 
103
+ ---
103
104
 
105
+ (8/28 2:10追記)
106
+
107
+
108
+
109
+ 確かに、EachViewControllerにindexを入れておけば、それで十分だと思います。
110
+
111
+
112
+
113
+ またStripeさんがおっしゃっている通り、それを使えばPageViewControllerの
114
+
115
+ indexプロパティは不要になるので、削除してしまえばよいと思います。
116
+
117
+
118
+
119
+ さらに、EachViewControllerを使い回す場合は2個で十分という話もありますが、
120
+
121
+ ページ切り替えに速度を求めないなら、使い回しでさえ不要で、ページ切り替え毎に
122
+
123
+ EachViewControllerを新しく作ればいいという話もあります。
124
+
125
+
126
+
127
+ (サンプル)
128
+
129
+ ```
130
+
131
+ extension PageViewController : UIPageViewControllerDataSource {
132
+
133
+
134
+
135
+ func pageViewController(_ pageViewController:
136
+
137
+ UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? {
138
+
139
+ return nextPage(pageViewController, moveTo:1)
140
+
141
+ }
142
+
143
+
144
+
145
+ func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController:UIViewController) -> UIViewController? {
146
+
147
+ return nextPage(pageViewController, moveTo:-1)
148
+
149
+ }
150
+
151
+
152
+
153
+ func nextPage(_ pageViewController: UIPageViewController, moveTo:Int) -> EachViewController {
154
+
155
+ let currentPage = pageViewController.viewControllers?.first as! EachViewController
156
+
157
+ let newIndex = (currentPage.index + moveTo) % count
158
+
159
+ let newPage = EachViewController()
160
+
161
+ newPage.setBackgroundRgba(rgba[newIndex])
162
+
163
+ newPage.setIndexTo(newIndex)
164
+
165
+ return newPage
166
+
167
+ }
168
+
169
+ }
170
+
171
+ ```
172
+
173
+

1

補足を受けて回答追加

2017/08/27 17:13

投稿

TakeOne
TakeOne

スコア6299

test CHANGED
@@ -39,3 +39,65 @@
39
39
  という形で配列番号に対応するする背景色を設定済みなので、
40
40
 
41
41
  ページ切り替え時に背景色を設定し直す必要すらないように思います。
42
+
43
+
44
+
45
+ ---
46
+
47
+ (8/24 21:40追記)
48
+
49
+
50
+
51
+ 補足ありがとうございます。
52
+
53
+ やりたいことがわかりました。
54
+
55
+
56
+
57
+ そういうことであれば、
58
+
59
+ [https://developer.apple.com/documentation/uikit/uipageviewcontrollerdelegate/1614090-pageviewcontroller](https://developer.apple.com/documentation/uikit/uipageviewcontrollerdelegate/1614090-pageviewcontroller)
60
+
61
+ で説明されている、
62
+
63
+ `UIPageViewControllerDelegate`の`pageViewController(_:didFinishAnimating:previousViewControllers:transitionCompleted:)`メソッドを使うとうまくいくと思います。
64
+
65
+
66
+
67
+ 現在実装している`UIPageViewControllerDataSource`のメソッドは、
68
+
69
+ 次に表示するビューコントローラーを教えてくれと言っているだけであり、
70
+
71
+ それが呼ばれたからと言って必ずページ遷移するわけではありません。
72
+
73
+
74
+
75
+ 上記で紹介したメソッドを使えば、画面遷移のアニメーションが完了したタイミングで呼ばれ、
76
+
77
+ 次の画面に遷移した時は、transitionCompletedパラメータがtrue、
78
+
79
+ 次に遷移するのをやめて戻した時は、transitionCompletedパラメータがfalse
80
+
81
+ で呼ばれます。
82
+
83
+ これを使うとうまくいくと思います。
84
+
85
+
86
+
87
+ また、
88
+
89
+ [http://qiita.com/eKushida/items/d4fe95576a86f9e1d9fb](http://qiita.com/eKushida/items/d4fe95576a86f9e1d9fb)
90
+
91
+ の「ページ番号の取得」の例にあるように、このタイミングでviewControllers.firstを取得すれば、
92
+
93
+ アニメーションが完了して現在表示されているビューコントローラーを得ることができますので、
94
+
95
+ そのビューコントローラーのプロパティにページ番号を入れておけば、
96
+
97
+ 現在表示されているビューコントローラーのページ番号を知ることもできます。
98
+
99
+ このページ番号に相当しているのが、今回の質問ではindexなのだと思います。
100
+
101
+
102
+
103
+