2016-08-30 7 views
2

私が達成しようとしている主な機能は、ユーザーが左右にスワイプし、次のページが横からスライドし、次のページへのスワイプが完了するまで両方の画面が半表示されることです。私はページビューコントローラでこの機能を見てきましたが、その方向性はわかりません。UIPageViewControllerにサーバーからのデータを入力しますか?

FirebaseのようなサーバーデータからView Controllerを動的に作成することはあまりありませんでしたが、ページビューコントローラを使用する経験はほとんどありませんでしたが、行く?

もし私が300ページを持っていたら、ユーザーがスワイプする可能性がありますが、最初に300枚の写真をダウンロードする必要がありますか?

私がまだどこで始めるべきかはっきりしていないので、試行をコミットする前に多かれ少なかれガイダンスを探しています。

+0

これが機能する場合は、例を共有できますか?私はまた、これをUIPageViewControllerで動作させようとしており、期待した結果が得られません。ありがとう! :) –

答えて

1

達成できるPageViewControllerの使用。

  1. デザインデリゲートを設定しUIPageViewController
  2. をdragggingによって画面(XIBやストーリーボードを使用して)と、デリゲートメソッドを実装
  3. 重要なステップは、移行
  4. 中にあなたが望むどのように多くのページを設定することです
  5. viewControllerAfterViewController:これをフォローviewControllerBeforeViewControllerこれらの2つのメソッドは、ロード後に構成する必要があります。前へおよび次へスクリーン。

ここで必要な部分は次のとおりです。サブクラス:このビューコントローラーとそれに応じてこのxibを読み込みます。

func pageViewController(pageViewController: UIPageViewController, 
    viewControllerAfterViewController ProView: UIViewController) -> UIViewController? { 

     let itemController = ProView as PageItemController 

     if itemController.itemIndex+1 < characterImages.count { 
      return getItemController(itemController.itemIndex+1) 
     } 

     return nil 
} 

func pageViewController(pageViewController: UIPageViewController, 
    viewControllerBeforeViewController ProView: UIViewController) -> UIViewController? { 

    let itemController = ProView as PageItemController 

     if itemController.itemIndex > 0 { 
      return getItemController(itemController.itemIndex-1) 
     } 

     return nil 
} 

private func getItemController(itemIndex: Int) -> PageItemController? { 

    if itemIndex < characterImages.count { 
     let pageItemController = self.storyboard!.instantiateViewControllerWithIdentifier("ItemController") as PageItemController 
     pageItemController.itemIndex = itemIndex 
     pageItemController.imageName = characterImages[itemIndex] 
     return pageItemController 
} 

はそれが役に立てば幸い:

は、ここではいくつかのサンプルコードです。

+0

助けてくれてありがとう。私はページビューが間違いなく私が使用しようとしているものだと思います。 イメージをfirebaseからダウンロードするという意味では、テーブルビューでは300アイテムのリストがあれば、再利用可能なセルでダウンロードしてすぐにダウンロードすることはできません。この方法では、私のcharacterImages配列に使用する配列に格納するすべての単一の画像をダウンロードする必要はありませんか?私はキャッシュを使用することができますし、私は300がまれなケースになると思いますが、それが起きたときにデータ/アプリケーションの重大な問題になることはありませんか? –

+0

データ配列を持つ代わりに、インデックス付きのgetItemControllerでダウンロードを実行できると思いますか?私はおそらく "Person"オブジェクトを持っていて、personArray [imageIndex] .imageURLのイメージをダウンロードするだけです。 –

+0

ユーザーがこれをスクロールしたときに画像をダウンロードするほうが、ユーザーインタラクションが改善されます –

関連する問題