質問するログイン新規登録

質問編集履歴

2

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

2017/08/27 05:03

投稿

taro_nii_chan
taro_nii_chan

スコア207

title CHANGED
File without changes
body CHANGED
@@ -157,4 +157,54 @@
157
157
  最初に` eachViewControllers[0]`, ` eachViewControllers[1]`, ` eachViewControllers[2]`を作って真ん中の` eachViewControllers[1]` を表示させておき、
158
158
  1ページ進んだら`[0]`, `[1]`, `[2]`、から `[1]`, `[2]`, `[0]` へ(添字だけで書いてます)、さらに進んだら`[2]`, `[0]`, `[1]` と進めていくことで使いまわそうという考えです(戻る時も同様)。
159
159
 
160
- どうしても言葉でうまく説明できないのがもどかしいのですが、少しでも伝わるでしょうか?
160
+ どうしても言葉でうまく説明できないのがもどかしいのですが、少しでも伝わるでしょうか?
161
+
162
+ # 8/27 (14:03) 追記
163
+ コメントにも書きましたが、
164
+ `pageViewController(_:didFinishAnimating:previousViewControllers:transitionCompleted:)`
165
+ は使わずに、意図している動きが出来ているように見えています。
166
+
167
+ ```swift
168
+ // PageViewController.swift
169
+ extension PageViewController : UIPageViewControllerDataSource {
170
+
171
+ // 次のページを表示する時に呼ばれる
172
+ func pageViewController(_ pageViewController:
173
+ UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? {
174
+
175
+ // ここにスワイプする前のページが入ってくるみたい(前回、スワイプ完了でも途中でやめても)
176
+ let eachViewController = pageViewController.viewControllers?.first as! EachViewController
177
+
178
+ // インデックスをインクリメントする
179
+ index = (eachViewController.index + 1) % count
180
+
181
+ // ページを取得する
182
+ let page = eachViewControllers.index(of: viewController as! EachViewController)!
183
+
184
+ // 次のページの値をセットする
185
+ let nextPage = (page + 1) % 3
186
+
187
+ // 新しく表示するページに変数をセットする
188
+ eachViewControllers[nextPage].setBackgroundRgba(rgba[index])
189
+ eachViewControllers[nextPage].setRgb(red: red[index], green: green[index], blue: blue[index])
190
+ eachViewControllers[nextPage].setIndexTo(index)
191
+
192
+
193
+ // 新しいページを返す
194
+ return eachViewControllers[nextPage]
195
+ }
196
+ }
197
+ ```
198
+
199
+ で上手く行ってそうです。
200
+ ```swift
201
+ let eachViewController = pageViewController.viewControllers?.first as! EachViewController
202
+ index = (eachViewController.index + 1) % count
203
+ ```
204
+ がスワイプを途中でやめたときにインクリメントされない(経験則ですが)ようなので、
205
+ これを使ったのが良かったのかなと思っています。
206
+
207
+ 勘違い等あるかも知れないので、閉めるのはまだにしておこうと思います。
208
+
209
+ 気付いていない点、勘違いしてる点、
210
+ そもそもコードの書き方が汚い等ありましたら教えて下さい。

1

説明の不足の補足

2017/08/27 05:03

投稿

taro_nii_chan
taro_nii_chan

スコア207

title CHANGED
File without changes
body CHANGED
@@ -120,4 +120,41 @@
120
120
  return eachViewControllers[lastPage]
121
121
  }
122
122
  }
123
- ```
123
+ ```
124
+
125
+ # 補足
126
+ 言葉が足りませんでした。
127
+ ```swift
128
+ eachViewControllers[lastPage].setBackgroundRgba(rgba[lastPage])
129
+ eachViewControllers[lastPage].setIndexTo(lastPage)
130
+ ```
131
+
132
+ だと3ページ分しか表示できません。
133
+
134
+ やりたいのは
135
+
136
+ ```swift
137
+ let count: Int = 1 << (6 * 3)
138
+ ```
139
+
140
+ と定義したとても大きい数(`count`)だけのページを表示させたいのです。
141
+ (その、何番目なのかを `index` で持たせようとしています)
142
+
143
+ でも、
144
+ `EachViewController` クラスのインスタンスを `count` 個作るとメモリを喰って大変ですよね。
145
+ なので、添字が 0, 1, 2 の3つのインスタンスを
146
+ ```swift
147
+ for i in 0..<3 {
148
+ let eachViewController = EachViewController()
149
+ eachViewController.setIndexTo(i)
150
+ eachViewController.setBackgroundRgba(rgba[i])
151
+ eachViewControllers.append(eachViewController)
152
+ }
153
+ ```
154
+ の様に作り、
155
+ その背景色(`rgba`)及びページ番号(`index`)だけを書き換えて使いまわすことで大きい数のページがあるかのように見せたいという事です。
156
+
157
+ 最初に` eachViewControllers[0]`, ` eachViewControllers[1]`, ` eachViewControllers[2]`を作って真ん中の` eachViewControllers[1]` を表示させておき、
158
+ 1ページ進んだら`[0]`, `[1]`, `[2]`、から `[1]`, `[2]`, `[0]` へ(添字だけで書いてます)、さらに進んだら`[2]`, `[0]`, `[1]` と進めていくことで使いまわそうという考えです(戻る時も同様)。
159
+
160
+ どうしても言葉でうまく説明できないのがもどかしいのですが、少しでも伝わるでしょうか?