I have UIPageViewController
with spine mid location. Now my 2 pages occupy the whole screen. But I want to change size of my flipping pages that I can create buttons in other part of controller. How to do it?
code:
import UIKit
class PageViewController: UIViewController {
@IBOutlet weak var PageControl: UIPageControl!
var pageViewController: UIPageViewController?
var images = ["book1page1.png","book1","book1","book1page2.png","book1page1.png","book1page2.png"]
var pendingIndex: Int?
override func viewDidLoad() {
super.viewDidLoad()
createPageViewController()
setupPageControll()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func createPageViewController() {
// Instantiate the PageViewController
let pageController = self.storyboard?.instantiateViewController(withIdentifier: "PageViewController") as! UIPageViewController
pageController.dataSource = self
pageController.delegate = self
if images.count > 0{
let firstController = getContentViewController(withIndex: 0)!
let contentControllers = [firstController]
pageController.setViewControllers(contentControllers, direction: UIPageViewControllerNavigationDirection.forward, animated: true, completion: nil)
}
pageViewController = pageController
self.addChildViewController(pageViewController!)
//self.view.addSubview(pageViewController!.view)
self.view.insertSubview(pageViewController!.view, at: 0)
pageViewController!.didMove(toParentViewController: self)
}
//Setup Pagination Icons and count
func presentationCount(for pageViewController: UIPageViewController) -> Int {
return images.count
}
func presentationIndex(for pageViewController: UIPageViewController) -> Int {
return 0
}
func setupPageControll(){
let apperance = UIPageControl.appearance()
apperance.pageIndicatorTintColor = UIColor.gray
apperance.currentPageIndicatorTintColor = UIColor.white
apperance.backgroundColor = UIColor.clear
}
func currentControllerIndex() -> Int{
let pageItemController = self.currentConroller()
if let controller = pageItemController as? ContentViewController {
return controller.itemIndex
}
return -1
}
///////////////////////////////////////////////
func currentConroller() -> UIViewController?{
if (self.pageViewController?.viewControllers?.count)! > 0{
return self.pageViewController?.viewControllers![0]
}
return nil
}
func getContentViewController(withIndex index: Int) -> ContentViewController? {
if index < images.count{
let contentVC = self.storyboard?.instantiateViewController(withIdentifier: "ContentViewController") as! ContentViewController
contentVC.itemIndex = index
contentVC.imageName = images[index]
return contentVC
}
return nil
}
}
extension PageViewController: UIPageViewControllerDataSource, UIPageViewControllerDelegate {
func pageViewController(_ pageViewController: UIPageViewController, willTransitionTo pendingViewControllers: [UIViewController]) {
pendingIndex = (pendingViewControllers.first as! ContentViewController).itemIndex
}
func pageViewController(_ pageViewController: UIPageViewController, didFinishAnimating finished: Bool, previousViewControllers: [UIViewController], transitionCompleted completed: Bool) {
if completed {
let currentIndex = pendingIndex
if let index = currentIndex {
self.PageControl.currentPage = index
}
}
}
func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? {
let contentVC = viewController as! ContentViewController
if contentVC.itemIndex > 0 {
return getContentViewController(withIndex: contentVC.itemIndex - 1)
}
return nil
}
func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? {
let contentVC = viewController as! ContentViewController
if contentVC.itemIndex + 1 < images.count {
return getContentViewController(withIndex: contentVC.itemIndex + 1)
}
return nil
}
}
Here you have instantiate UIPageViewController
(id:"PageViewController") and add as subview inside the UIViewController
so if you want create UIButton
you can create but if its want to visible in front of this UIPageViewController
You can put self.view.insertSubview(pageViewController!.view, at: 0)
to says your UIViewController
to put this subview at index 0
(means behind the every subviews)
Below I have given code: Add Subview at index
0
and Make Size of the PageViewController
using pageController.view.frame = CGRect(x: 50, y: 50, width: self.view.frame.width - (5.0 * 20.0), height: self.view.frame.height - (2.0 * 50.0))
also Added two buttons calls "Next" and "Previous' at the bottom of UIPageController
Check Blow Code:
func createPageViewController() {
let pageController = self.storyboard?.instantiateViewController(withIdentifier: "PageViewController") as! UIPageViewController
pageController.isDoubleSided = true
pageController.dataSource = self
pageController.delegate = self
if images.count > 1{
let firstController = getContentViewController(withIndex: 0)!
let secondController = getContentViewController(withIndex: 1)!
let contentControllers = [firstController,secondController]
pageController.setViewControllers(contentControllers, direction: UIPageViewControllerNavigationDirection.forward, animated: true, completion: nil)
}
pageViewController = pageController
self.addChildViewController(pageViewController!)
self.view.insertSubview(pageViewController!.view, at: 0)
pageController.view.frame = CGRect(x: 50, y: 50, width: self.view.frame.width - (5.0 * 20.0), height: self.view.frame.height - (2.0 * 50.0))
pageController.view.layer.borderColor = UIColor.lightGray.cgColor
pageController.view.layer.borderWidth = 1.0
pageViewController!.didMove(toParentViewController: self)
//Next Page Button
let nextButton = UIButton()
nextButton.frame = CGRect(x: pageController.view.frame.maxX - 75, y: pageController.view.frame.maxY + 5, width: 75, height: 50)
nextButton.backgroundColor = UIColor.blue
nextButton.setTitle("Next", for: .normal)
nextButton.addTarget(self, action: #selector(buttonActionNext), for: .touchUpInside)
self.view.addSubview(nextButton)
//Previous Page Button
let previousButton = UIButton()
previousButton.frame = CGRect(x: pageController.view.frame.minX, y: pageController.view.frame.maxY + 5, width: 75, height: 50)
previousButton.backgroundColor = UIColor.blue
previousButton.setTitle("Previous", for: .normal)
previousButton.addTarget(self, action: #selector(buttonActionPrevious), for: .touchUpInside)
self.view.addSubview(previousButton)
}
@objc func buttonActionNext(sender: UIButton!) {
print("Next page")
}
@objc func buttonActionPrevious(sender: UIButton!) {
print("Previous Page")
}
You need to change the frame
pageViewController!.view.frame = ///
self.view.insertSubview(pageViewController!.view, at: 0)
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.