How do I use UIPageControl to create multiple views?
You'll want to use a UIScrollView, and then, as a sibling, position the UIPageControl over it. Then put each of your pages into the scroll view and turn paging on for it. This way each 'flick' will move the scroll view one page over.
Now, assign your view controller to be the delegate of the scroll view, and watch for scrollViewDidEndScrollAnimation, and use the contentOffset to determine which page is current.
Based on Ben Gottlieb's quite excellently correct answer there, I got what I wanted. Here's the code I used to accomplish it:
.h
@interface MyViewController : UIViewController <UIScrollViewDelegate> {
}
@property (nonatomic, retain) UIPageControl *helpPageCon;
.m
@synthesize helpPageCon;
- (void)scrollViewDidScroll:(UIScrollView *)scrollView{
CGRect frame = [[UIScreen mainScreen] applicationFrame];
float roundedValue = round(scrollView.contentOffset.x / frame.size.width);
self.helpPageCon.currentPage = roundedValue;
}
- (void)viewDidLoad
{
UIScrollView *scrollView = [[[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, frame.size.width, frame.size.height-50)] autorelease];
scrollView.contentSize = CGSizeMake(frame.size.width*5, frame.size.height-50);
[scrollView setPagingEnabled:YES];
scrollView.showsHorizontalScrollIndicator = NO;
scrollView.delegate = self;
[self.view addSubview:scrollView];
CGRect frame = [[UIScreen mainScreen] applicationFrame];
self.helpPageCon = [[[UIPageControl alloc] initWithFrame:CGRectMake(0, 0, frame.size.width, 50)] autorelease];
self.helpPageCon.center = CGPointMake(frame.size.width/2, frame.size.height-75);
self.helpPageCon.numberOfPages = 5;
[self.view addSubview:self.helpPageCon];
}
- (void)dealloc
{
[super dealloc];
[helpPageCon release];
}
Just add 3 views to the Scroll view Horizontally one after other with paging enabled in scrollview and add a UIPageControl control below the scrollView , And with the help of both delegate methods of scrollview and the Action method of pageview you can achieve basic working of UIPageControl
I used the contentoffset to find the current page
// scrollview delegate
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
CGFloat pageWidth = mainScroll.frame.size.width;
int page = floor((mainScroll.contentOffset.x - pageWidth / 2) / pageWidth) + 1;
pageControl.currentPage=page;
}
// page view action method
- (IBAction)pageControlInteracted:(UIPageControl *)sender {
NSLog(@"%d",sender.currentPage);
CGRect frame = mainScroll.frame;
frame.origin.x = frame.size.width * sender.currentPage;
frame.origin.y = 0;
[mainScroll scrollRectToVisible:frame animated:YES];
}