IOS Swift Use UIPageViewController Build Tutorial Screen
Reproduced in Strings@Farbox.
Create Xcode Project
- Create a Xcode project
singleView app, drag a new view controller and page view controller into storyboard. Let one as root page and other as tutorial page.
- Two swift class for two view controller.
Set Root Page as initial view controller, set class for this controller.
Set imageView, label and thier outlet into tutorial page view controller for tutorialPage.swift which I guess you are familiar with. Name the imageView as image and Label as label.
- Set storyboard ID
Select Page View Controller and in the identity inspector enter the text PageViewController. Select tutorial page and in the identity inspector enter the text PageContentViewController.
Set page view controller transistion style to Scroll.
Code for ViewController
Add following into tutorialPage.swift:
var pageIndex:UInt = 0
var imageFile:String = ""
var textTitle:String = ""
override func viewDidLoad() {
super.viewDidLoad()
self.image.image = UIImage(named: imageFile)
self.label.text = textTitle
}
Let rootPage adopt UIPageViewControllerDataSource protocol:
class rootPage: UIViewController, UIPageViewControllerDataSource
Add following into rootPage.swift :
var pageViewController: UIPageViewController?
var arrayPageTitles: NSArray?
var arrayImages: NSArray?
let introText1 = "first screen"
let introText2 = "mid screen"
let introText3 = "last screen"
Prepare three picture named introductionPic1.jpg… and drap into your project.
To perform scroll page and confirm the UIPageViewControllerDataSource protocol, add following into rootPage.swift:
override func viewDidLoad() {
super.viewDidLoad()
arrayPageTitles = [introText1, introText2, introText3]
arrayImages = ["introductionPic1.jpg", "introductionPic2.jpg", "introductionPic3.jpg"]
self.pageViewController = self.storyboard?.instantiateViewControllerWithIdentifier("PageViewController") as? UIPageViewController
self.pageViewController?.dataSource = self
let startingViewController = self.viewControllerAtIndex(0)
let viewControllers: NSArray = [startingViewController!]
self.pageViewController?.setViewControllers(viewControllers as? [UIViewController], direction: .Forward, animated: false, completion: nil)
self.pageViewController!.view.frame = CGRectMake(0, 0, self.view.frame.width, self.view.frame.height)
self.addChildViewController(pageViewController!)
self.view.addSubview(pageViewController!.view)
self.pageViewController?.didMoveToParentViewController(self)
}
func viewControllerAtIndex(index: UInt) -> tutorialPage? {
if ((self.arrayPageTitles!.count == 0) || (Int(index) >= self.arrayPageTitles!.count)) {
return nil
}
let pageContentViewController = self.storyboard?.instantiateViewControllerWithIdentifier("PageContentViewController") as! tutorialPage
pageContentViewController.imageFile = self.arrayImages![Int(index)] as! String
pageContentViewController.textTitle = self.arrayPageTitles![Int(index)] as! String
pageContentViewController.pageIndex = index
return pageContentViewController
}
func pageViewController(pageViewController: UIPageViewController, viewControllerBeforeViewController viewController: UIViewController) -> UIViewController? {
var index = (viewController as! tutorialPage).pageIndex
if (index == 0 || Int(index) == NSNotFound) {
return nil;
}
index--
return self.viewControllerAtIndex(index)
}
func pageViewController(pageViewController: UIPageViewController, viewControllerAfterViewController viewController: UIViewController) -> UIViewController? {
var index = (viewController as! tutorialPage).pageIndex
if Int(index) == NSNotFound {
return nil
}
index++
if Int(index) == arrayPageTitles!.count {
return nil
}
return self.viewControllerAtIndex(index)
}
func presentationCountForPageViewController(pageViewController: UIPageViewController) -> Int {
return self.arrayPageTitles!.count
}
func presentationIndexForPageViewController(pageViewController: UIPageViewController) -> Int {
return 0
}
Add following to AppDelegate.swift
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
// Override point for customization after application launch.
let pageControll = UIPageControl.appearance()
pageControll.pageIndicatorTintColor = UIColor.lightGrayColor()
pageControll.currentPageIndicatorTintColor = UIColor.blackColor()
pageControll.backgroundColor = UIColor.whiteColor()
return true
}
Run your program and have fun~
To download source code on Github.
Reproduced in Strings@Farbox.
Reference:appGURUZ