2016-12-03 4 views
0

ユーザーがアプリケーションを開いたときに初めてページコントローラを表示し、その後再び開くとページコントローラをスキップして直接移動するホーム画面に移動します。ページコントローラのviewDidiLoad方法において最初の起動時にのみページコントローラを表示する方法

import UIKit 

class PageVC: UIPageViewController, UIPageViewControllerDataSource, UIPageViewControllerDelegate { 

lazy var VCArr: [UIViewController] = { 
    return [self.VCInstance(name: "FirstVC"), 
      self.VCInstance(name: "SecondVC"), 
      self.VCInstance(name: "ThirdVC")] 
}() 

private func VCInstance(name: String) -> UIViewController { 
    return UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: name) 
} 

override func viewDidAppear(_ animated: Bool) { 
    super.viewDidAppear(animated) 
    self.dataSource = self 
    self.delegate = self 
    if let firstVC = VCArr.first { 
     setViewControllers([firstVC], direction: .forward, animated: true, completion: nil) 
    } 
} 

override func viewDidLayoutSubviews() { 
    super.viewDidLayoutSubviews() 
    for view in self.view.subviews { 
     if view is UIScrollView { 
      view.frame = UIScreen.main.bounds 
     } else if view is UIPageControl { 
      view.backgroundColor = UIColor.clear 
     } 
    } 
} 


public func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? { 
    guard let viewControllerIndex = VCArr.index(of: viewController) else { 
     return nil 
    } 

    let previousIndex = viewControllerIndex - 1 

    guard previousIndex >= 0 else { 
     return VCArr.last 
    } 

    guard VCArr.count > previousIndex else { 
     return nil 
    } 

    return VCArr[previousIndex] 
} 

public func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? { 
    guard let viewControllerIndex = VCArr.index(of: viewController) else { 
     return nil 
    } 

    let nextIndex = viewControllerIndex + 1 

    guard nextIndex < VCArr.count else { 
     return VCArr.first 
    } 

    guard VCArr.count > nextIndex else { 
     return nil 
    } 

    return VCArr[nextIndex] 
} 

public func presentationCount(for pageViewController: UIPageViewController) -> Int { 
    return VCArr.count 
} 


public func presentationIndex(for pageViewController: UIPageViewController) -> Int { 
    guard let firstViewController = viewControllers?.first, 
     let firstViewControllerIndex = VCArr.index(of: firstViewController) else { 
      return 0 
    } 

    return firstViewControllerIndex 
} 
} 
+0

私はこの質問を他の何百万もの複製とみなしているので、同じ質問がスタックオーバーフローで尋ねられました。 – matt

答えて

1

アプリが開かれた初めての場合は定義されてBool値を設定するUserDefaultsを使用することができます。

したがって、値が存在しない場合は、UserDefaultsに値を入力してください。

UserDefaults.standard.set(true, forKey: "firstTimeOpened") 

EDITED

私はあなたのHome View Controllerはので、この試すFirstVCであると仮定します。あなたはPageViewを解任することができた後

let firstTime = UserDefaults.standard().object(ForKey: "first_time") as? Bool // Here you look if the Bool value exists, if not it means that is the first time the app is opened 

// Show the intro collectionView 
if firstTime == nil { 
    let view = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "YourPageVC") // Instatiates your pageView 
    show(view, sender: nil) 
    UserDefaults.standard().set(false, forKey: "first_time") 
} 

ViewDidAppear機能であなたのFirstVC

を再起動すると自宅に戻りますあなたのアプリは、PageViewは表示されません。

+0

私のコードに実装するのを助けることができますか? –

0

ちょうど任意のアニメーション効果なし(プッシュ/本)ホーム画面コントローラを呼び出す - ここ

コードです。

このような

またはナビゲーションコントローラ

でrootviewControllerとしてホーム画面を設定します。 クラスのfunc setHomeScreen(){ するvar MAINVIEW:UIStoryboard! mainView = UIStoryboard(名前: "HomeScreen"、バンドル:なし) viewcontroller:UINavigationController = mainView.instantiateViewControllerWithIdentifier( "HomeNavigationViewController")as! HomeNavigationViewController AppDelegate.getAppDelegate()。窓!.rootViewController =のViewController

} 

enter image description here

関連する問題