2017-02-21 7 views
-1

Я хочу, чтобы запустить другую раскадровку, которая увязывает IPad, но когда я запускаю код, который я получу Fatal Errorперехода на другую раскадровку

здесь моих коды

class pageVC : UIPageViewController , UIPageViewControllerDataSource , UIPageViewControllerDelegate { 



let pageVC = UIPageControl() 
lazy var VCArr : [UIViewController] = { 

    return [self.VCInstance(name : "FirtsVC"), 
      self.VCInstance(name : "SecondVC"), 
      self.VCInstance(name :"ThirdVC"), 
      self.VCInstance(name :"FourthVC"), 
      self.VCInstance(name :"FivethVC")] 

}() 

private func VCInstance(name : String) -> UIViewController { 
    let modelName = UIDevice.current.modelName 
    if modelName == "iPad Mini 3" { 

     return UIStoryboard(name : "ipadmini" , bundle : nil).instantiateViewController(withIdentifier: name) 


    }else { 

    return UIStoryboard(name : "Main" , bundle : nil).instantiateViewController(withIdentifier: name) 

    } 
} 

override func viewDidLoad() { 
    super.viewDidLoad() 
    self.dataSource = self 
    self.delegate = self 



    let modelName = UIDevice.current.modelName 
    print(modelName) 
    if modelName == "iPad Mini 3" { 
     print("OK") 


     let mainStoryboard: UIStoryboard = UIStoryboard(name: "ipadmini" , bundle: nil) 
     let viewController = mainStoryboard.instantiateViewController(withIdentifier: "pageVC") 
     let appDelegate = UIApplication.shared.delegate as! AppDelegate 
     appDelegate.window?.rootViewController = viewController 


    } 


    let launchedBefore = UserDefaults.standard.bool(forKey: "launchedBefore") 
    if launchedBefore { 
     print("Not first launch!") 
     print("Should Launch MainTabBarController!") 



    } else { 
     print("First launch, setting UserDefault.") 
     UserDefaults.standard.set(true, forKey: "launchedBefore") 
    } 
    var shouldAutorotate: Bool { 
     return false 
    } 
    var supportedInterfaceOrientations: UIInterfaceOrientationMask { 
     return .portrait 
    } 

    func viewWillAppear(_ animated: Bool) { 
     super.viewWillAppear(animated) 
     let value = UIInterfaceOrientation.portrait.rawValue 
     UIDevice.current.setValue(value, forKey: "orientation") 
     UIViewController.attemptRotationToDeviceOrientation() 
    } 
    func supportedInterfaceOrientations() -> UIInterfaceOrientationMask { 
     return [UIInterfaceOrientationMask.portrait ] 
    } 
    if VCArr.first != nil { 

     print("first Page Reached!") 
    } 

    if let firstVC = VCArr.first { 
     setViewControllers([firstVC] , direction: .forward , animated: true, completion: nil) 

    } 


} 

override func viewDidLayoutSubviews() { 
    super.viewDidLayoutSubviews() 

    let view = self.pageVC.currentPage 
    for view in self.view.subviews { 
     if view is UIScrollView { 
      let pageVC = UIPageControl() 
      self.pageVC.pageIndicatorTintColor = UIColor.lightText 
      self.pageVC.currentPageIndicatorTintColor = UIColor.white 
      self.pageVC.backgroundColor = UIColor.white 
      self.pageVC.numberOfPages = VCArr.count 
      self.pageVC.center = self.view.center 
      self.view.addSubview(self.pageVC) 
      pageVC.layer.position.y = self.view.frame.height - 150; 
     }else if view is UIPageControl{ 
      view.backgroundColor = UIColor.clear 
      pageVC.numberOfPages = 5 
      pageVC.center = self.view.center 
      pageVC.layer.position.y = self.view.frame.height - 100 ; 

     } 
    } 

} 




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 nil 
    } 

    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 nil 
    } 

    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 
    } 
     let firstIndex = firstViewControllerIndex - 1 
     guard firstIndex >= VCArr.count else { 
      return VCArr.count 



    } 

    return firstViewControllerIndex 
} 
public func pageViewController(_ pageViewController: UIPageViewController, didFinishAnimating finished: Bool, previousViewControllers: [UIViewController], transitionCompleted completed: Bool) { 
    self.pageVC.currentPage = pageViewController.viewControllers!.first!.view.tag 

if(viewControllers!.first?.view.tag == 4) { 

    if (VCArr.last!.isViewLoaded) 

    { 
     let modelName = UIDevice.current.modelName 
     if modelName == "iPad Mini 3" { 
      print("OK") 


      let mainStoryboard: UIStoryboard = UIStoryboard(name: "ipadmini" , bundle: nil) 
      let viewController = mainStoryboard.instantiateViewController(withIdentifier: "FivethVC") 
      let appDelegate = UIApplication.shared.delegate as! AppDelegate 
      appDelegate.window?.rootViewController = viewController 


     } 
     else { 


     let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main" , bundle: nil) 
     let viewController = mainStoryboard.instantiateViewController(withIdentifier: "FivethVC") 
     let appDelegate = UIApplication.shared.delegate as! AppDelegate 
     appDelegate.window?.rootViewController = viewController 
     print("Last Page Reached!!!") 
     } 
    } 

    } 
} 





} 



public extension UIDevice 
     { 
var modelName: String { 
    var systemInfo = utsname() 
    uname(&systemInfo) 
    let machineMirror = Mirror(reflecting: systemInfo.machine) 
    let identifier = machineMirror.children.reduce("") { identifier, element in 
     guard let value = element.value as? Int8 , value != 0 else { return identifier } 
     return identifier + String(UnicodeScalar(UInt8(value))) 
    } 
    switch identifier { 
    case "iPod5,1": 
     return "iPod Touch 5" 
    case "iPod7,1": 
     return "iPod Touch 6" 
    case "iPhone3,1", "iPhone3,2", "iPhone3,3": 
     return "iPhone 4" 
    case "iPhone4,1": 
     return "iPhone 4s" 
    case "iPhone5,1", "iPhone5,2": 
     return "iPhone 5" 
    case "iPhone5,3", "iPhone5,4": 
     return "iPhone 5c" 
    case "iPhone6,1", "iPhone6,2": 
     return "iPhone 5s" 
    case "iPhone7,2": 
     return "iPhone 6" 
    case "iPhone7,1": 
     return "iPhone 6 Plus" 
    case "iPhone8,1": 
     return "iPhone 6s" 
    case "iPhone8,2": 
     return "iPhone 6s Plus" 
    case "iPad2,1", "iPad2,2", "iPad2,3", "iPad2,4": 
     return "iPad 2" 
    case "iPad3,1", "iPad3,2", "iPad3,3": 
     return "iPad 3" 
    case "iPad3,4", "iPad3,5", "iPad3,6": 
     return "iPad 4" 
    case "iPad4,1", "iPad4,2", "iPad4,3": 
     return "iPad Air" 
    case "iPad5,3", "iPad5,4": 
     return "iPad Air 2" 
    case "iPad2,5", "iPad2,6", "iPad2,7": 
     return "iPad Mini" 
    case "iPad4,4", "iPad4,5", "iPad4,6": 
     return "iPad Mini 2" 
    case "iPad4,7", "iPad4,8", "iPad4,9": 
     return "iPad Mini 3" 
    case "iPad5,1", "iPad5,2": 
     return "iPad Mini 4" 
    case "iPad6,7", "iPad6,8": 
     return "iPad Pro" 
    case "AppleTV5,3": 
     return "Apple TV" 
    case "i386", "x86_64": 
     return "Simulator" 
    default: 
     return identifier 

    } 
    }} 

** Я хочу использовать сюжетные платы для устройств и приложений, например, запуск недоброжелатель IPad мини раскадровку, когда я запустить программу на IPad мини **

ответ

0

ОК Вот ответ

class pageVC : UIPageViewController , UIPageViewControllerDataSource , UIPageViewControllerDelegate { 



let pageVC = UIPageControl() 
lazy var VCArr : [UIViewController] = { 

    return [self.VCInstance(name : "FirtsVC"), 
      self.VCInstance(name : "SecondVC"), 
      self.VCInstance(name :"ThirdVC"), 
      self.VCInstance(name :"FourthVC"), 
      self.VCInstance(name :"FivethVC")] 

}() 

private func VCInstance(name : String) -> UIViewController { 
    let modelName = UIDevice.current.modelName 
    if modelName == "iPad Mini 3" { 

     return UIStoryboard(name : "ipadmini" , bundle : nil).instantiateViewController(withIdentifier: name) 


    }else { 

    return UIStoryboard(name : "Main" , bundle : nil).instantiateViewController(withIdentifier: name) 

    } 
} 

override func viewDidLoad() { 
    super.viewDidLoad() 
    self.dataSource = self 
    self.delegate = self 

    let launchedBefore = UserDefaults.standard.bool(forKey: "launchedBefore") 
    if launchedBefore { 
     print("Not first launch!") 
     print("Should Launch MainTabBarController!") 

     let modelName = UIDevice.current.modelName 
       print(modelName) 
       if modelName == "iPad Mini 3" { 
        print("OK") 


        let mainStoryboard: UIStoryboard = UIStoryboard(name: "ipadmini", bundle: nil) 
           let viewController = mainStoryboard.instantiateViewController(withIdentifier: "MainTabBarController") as! UITabBarController 
           let appDelegate = UIApplication.shared.delegate as! AppDelegate 
           appDelegate.window?.rootViewController = viewController 


       }else { 
        print("Not Ipad mini") 
     } 
     if modelName == "iPad Mini 3" { 
      print("OK") 


      let mainStoryboard: UIStoryboard = UIStoryboard(name: "ipadmini", bundle: nil) 
      let viewController = mainStoryboard.instantiateViewController(withIdentifier: "MainTabBarController") as! UITabBarController 
      let appDelegate = UIApplication.shared.delegate as! AppDelegate 
      appDelegate.window?.rootViewController = viewController 


     }else { 

     /////Not First Time launch! reach mainTabBarController////////// 

     let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil) 
     let viewController = mainStoryboard.instantiateViewController(withIdentifier: "MainTabBarController") as! UITabBarController 
     let appDelegate = UIApplication.shared.delegate as! AppDelegate 
     appDelegate.window?.rootViewController = viewController 

     } 

    } else { 
     print("First launch, setting UserDefault.") 
     UserDefaults.standard.set(true, forKey: "launchedBefore") 
    } 
    //////Lock Rotation///////// 
    var shouldAutorotate: Bool { 
     return false 
    } 
    var supportedInterfaceOrientations: UIInterfaceOrientationMask { 
     return .portrait 
    } 

    func viewWillAppear(_ animated: Bool) { 
     super.viewWillAppear(animated) 
     let value = UIInterfaceOrientation.portrait.rawValue 
     UIDevice.current.setValue(value, forKey: "orientation") 
     UIViewController.attemptRotationToDeviceOrientation() 
    } 
    func supportedInterfaceOrientations() -> UIInterfaceOrientationMask { 
     return [UIInterfaceOrientationMask.portrait ] 
    } 
    ///////Lock Roration////// 
    if VCArr.first != nil { 

     print("first Page Reached!") 
    } 

    if let firstVC = VCArr.first { 
     setViewControllers([firstVC] , direction: .forward , animated: true, completion: nil) 

    } 


} 

override func viewDidLayoutSubviews() { 
    super.viewDidLayoutSubviews() 

    let view = self.pageVC.currentPage 
    for view in self.view.subviews { 
     if view is UIScrollView { 
      let pageVC = UIPageControl() 
      self.pageVC.pageIndicatorTintColor = UIColor.lightText 
      self.pageVC.currentPageIndicatorTintColor = UIColor.white 
      self.pageVC.backgroundColor = UIColor.white 
      self.pageVC.numberOfPages = VCArr.count 
      self.pageVC.center = self.view.center 
      self.view.addSubview(self.pageVC) 
      pageVC.layer.position.y = self.view.frame.height - 150; 
     }else if view is UIPageControl{ 
      view.backgroundColor = UIColor.clear 
      pageVC.numberOfPages = 5 
      pageVC.center = self.view.center 
      pageVC.layer.position.y = self.view.frame.height - 100 ; 

     } 
    } 

} 




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 nil 
    } 

    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 nil 
    } 

    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 
    } 
     let firstIndex = firstViewControllerIndex - 1 
     guard firstIndex >= VCArr.count else { 
      return VCArr.count 



    } 

    return firstViewControllerIndex 
} 
public func pageViewController(_ pageViewController: UIPageViewController, didFinishAnimating finished: Bool, previousViewControllers: [UIViewController], transitionCompleted completed: Bool) { 
    self.pageVC.currentPage = pageViewController.viewControllers!.first!.view.tag 

if(viewControllers!.first?.view.tag == 4) { 

    if (VCArr.last!.isViewLoaded) 

    { 
     let modelName = UIDevice.current.modelName 
     if modelName == "iPad Mini 3" { 
      print("OK") 


      let mainStoryboard: UIStoryboard = UIStoryboard(name: "ipadmini" , bundle: nil) 
      let viewController = mainStoryboard.instantiateViewController(withIdentifier: "FivethVC") 
      let appDelegate = UIApplication.shared.delegate as! AppDelegate 
      appDelegate.window?.rootViewController = viewController 


     } 
     else { 


     let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main" , bundle: nil) 
     let viewController = mainStoryboard.instantiateViewController(withIdentifier: "FivethVC") 
     let appDelegate = UIApplication.shared.delegate as! AppDelegate 
     appDelegate.window?.rootViewController = viewController 
     print("Last Page Reached!!!") 
     } 
    } 

    } 
} 





} 



public extension UIDevice { 
var modelName: String { 
    var systemInfo = utsname() 
    uname(&systemInfo) 
     let machineMirror = Mirror(reflecting: systemInfo.machine) 
     let identifier = machineMirror.children.reduce("") { identifier,element in 
     guard let value = element.value as? Int8 , value != 0 else { return identifier } 
     return identifier + String(UnicodeScalar(UInt8(value))) 
    } 
    switch identifier { 
    case "iPod5,1": 
     return "iPod Touch 5" 
    case "iPod7,1": 
     return "iPod Touch 6" 
    case "iPhone3,1", "iPhone3,2", "iPhone3,3": 
     return "iPhone 4" 
    case "iPhone4,1": 
     return "iPhone 4s" 
    case "iPhone5,1", "iPhone5,2": 
     return "iPhone 5" 
    case "iPhone5,3", "iPhone5,4": 
     return "iPhone 5c" 
    case "iPhone6,1", "iPhone6,2": 
     return "iPhone 5s" 
    case "iPhone7,2": 
     return "iPhone 6" 
    case "iPhone7,1": 
     return "iPhone 6 Plus" 
    case "iPhone8,1": 
     return "iPhone 6s" 
    case "iPhone8,2": 
     return "iPhone 6s Plus" 
    case "iPhone9,1", "iPhone9,3": 
     return "iPhone 7" 
    case "iPhone9,2", "iPhone9,4": 
     return "iPhone 7 Plus" 
    case "iPhone8,4": 
     return "iPhone SE" 
    case "iPad2,1", "iPad2,2", "iPad2,3", "iPad2,4": 
     return "iPad 2" 
    case "iPad3,1", "iPad3,2", "iPad3,3": 
     return "iPad 3" 
    case "iPad3,4", "iPad3,5", "iPad3,6": 
     return "iPad 4" 
    case "iPad4,1", "iPad4,2", "iPad4,3": 
     return "iPad Air" 
    case "iPad5,3", "iPad5,4": 
     return "iPad Air 2" 
    case "iPad2,5", "iPad2,6", "iPad2,7": 
     return "iPad Mini" 
    case "iPad4,4", "iPad4,5", "iPad4,6": 
     return "iPad Mini 2" 
    case "iPad4,7", "iPad4,8", "iPad4,9": 
     return "iPad Mini 3" 
    case "iPad5,1", "iPad5,2": 
     return "iPad Mini 4" 
    case "iPad6,3", "iPad6,4", "iPad6,7", "iPad6,8": 
     return "iPad Pro" 
    case "AppleTV5,3": 
     return "Apple TV" 
    case "i386", "x86_64": 
     return "Simulator" 
    default: 
     return identifier 

    } 
}} 
Смежные вопросы