Well, here is a long answer that you can copy and paste. (This code was adapted from Erica Sadun (https://github.com/erica/iOS-5-Cookbook))
First create a new class like UIPageViewController. Name it BookController. Now paste the following code into your .h file.
// Used for storing the most recent book page used #define DEFAULTS_BOOKPAGE @"BookControllerMostRecentPage" @protocol BookControllerDelegate <NSObject> - (id) viewControllerForPage: (int) pageNumber; @optional - (void) bookControllerDidTurnToPage: (NSNumber *) pageNumber; @end @interface BookController : UIPageViewController <UIPageViewControllerDelegate, UIPageViewControllerDataSource> + (id) bookWithDelegate: (id) theDelegate; + (id) rotatableViewController; - (void) moveToPage: (uint) requestedPage; - (int) currentPage; @property (assign) id <BookControllerDelegate> bookDelegate; @property (nonatomic, assign) uint pageNumber;
and in your .m file:
#define IS_IPHONE ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) #define SAFE_ADD(_Array_, _Object_) {if (_Object_ && [_Array_ isKindOfClass:[NSMutableArray class]]) [pageControllers addObject:_Object_];} #define SAFE_PERFORM_WITH_ARG(THE_OBJECT, THE_SELECTOR, THE_ARG) (([THE_OBJECT respondsToSelector:THE_SELECTOR]) ? [THE_OBJECT performSelector:THE_SELECTOR withObject:THE_ARG] : nil) #pragma Utility Class - VC that Rotates @interface RotatableVC : UIViewController @end @implementation RotatableVC - (void) loadView { [super loadView]; self.view.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth; self.view.backgroundColor = [UIColor whiteColor]; } - (BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation { return YES; } @end #pragma Book Controller @implementation BookController @synthesize bookDelegate, pageNumber; #pragma mark Debug / Utility - (int) currentPage { int pageCheck = ((UIViewController *)[self.viewControllers objectAtIndex:0]).view.tag; return pageCheck; } #pragma mark Page Handling
This class can now be used to manage any book that you create in any project, and for several books in one project. For each book, create a UIPageViewController delegate with @interface:
@interface NameOfBookController : UIPageViewController <BookControllerDelegate>
In this delegate's .m file, include:
Then add:
- (id) viewControllerForPage: (int) pageNumber { // Establish a new controller UIViewController *controller; switch (pageNumber) { case 0: view1 = [[FirstViewController alloc] init]; view1.view.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth; controller = view1; //rinse and repeat with each new view controller break; case 1: //etc. break; default: return nil; break; } return controller; }
For writing, this code is not memory safe. If you use ARC, add to your @autoreleasePool {}; if not, don't forget about your save / release cycle.
Hope this helps!
Amayes
source share