It looks like you're new here. If you want to get involved, click one of these buttons!
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
int newPage = scrollView.contentOffset.x / self.view.frame.size.height + 1;
if(newPage > currentPage) {
if(pagePrevious != nil) {
[pagePrevious.view removeFromSuperview];
[pagePrevious release];
}
pagePrevious = pageCurrent;
pageCurrent = pageNext;
if(newPage < PAGE_COUNT) {
NSString *pageClass;
if(newPage < 9) {
pageClass = [NSString stringWithFormat:@\"Page0%d\", (newPage + 1)];
} else {
pageClass = [NSString stringWithFormat:@\"Page%d\", (newPage + 1)];
}
pageNext = [[NSClassFromString(pageClass) alloc] init];
pageNext.view.frame = CGRectMake(self.view.frame.size.height * newPage, 0, self.view.frame.size.height, self.view.frame.size.width);
[scrollView addSubview:pageNext.view];
}
} else if(newPage < currentPage) {
if(pageNext != nil) {
[pageNext.view removeFromSuperview];
[pageNext release];
}
pageNext = pageCurrent;
pageCurrent = pagePrevious;
if(newPage > 1) {
NSString *pageClass;
if(newPage < 11) {
pageClass = [NSString stringWithFormat:@\"Page0%d\", (newPage - 1)];
} else {
pageClass = [NSString stringWithFormat:@\"Page%d\", (newPage - 1)];
}
pagePrevious = [[NSClassFromString(pageClass) alloc] init];
pagePrevious.view.frame = CGRectMake(self.view.frame.size.height * (newPage - 2), 0, self.view.frame.size.height, self.view.frame.size.width);
[scrollView addSubview:pagePrevious.view];
}
}
currentPage = newPage;
}- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if(self) {
pageScrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.height, self.view.frame.size.width)];
pageScrollView.pagingEnabled = YES;
pageScrollView.scrollEnabled = YES;
pageScrollView.showsVerticalScrollIndicator = NO;
pageScrollView.showsHorizontalScrollIndicator = NO;
pageScrollView.bounces = NO;
pagePrevious = nil;
pageCurrent = [[Page01 alloc] init];
pageNext = [[Page02 alloc] init];
[pageCurrent.view setFrame:CGRectMake(0, 0, self.view.frame.size.height, self.view.frame.size.width)];
[pageNext.view setFrame:CGRectMake(self.view.frame.size.height, 0, self.view.frame.size.height, self.view.frame.size.width)];
[pageScrollView addSubview:pageCurrent.view];
[pageScrollView addSubview:pageNext.view];
pageScrollView.contentSize = CGSizeMake(self.view.frame.size.height * PAGE_COUNT, self.view.frame.size.width);
[pageScrollView setDelegate:self];
[self.view addSubview:pageScrollView];
currentPage = 1;
}
return self;
}
Replies
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
if(scrollView != pageScrollView) return;
int newPage = floor(scrollView.contentOffset.x / self.view.frame.size.height) + 1;
if(newPage > currentPage) {
if(pagePrevious != nil) {
[pagePrevious.view removeFromSuperview];
[pagePrevious release];
}
pagePrevious = pageCurrent;
pageCurrent = pageNext;
if(newPage < PAGE_COUNT) {
NSString *pageClass;
if(newPage < 9) {
pageClass = [NSString stringWithFormat:@\"Page0%d\", (newPage + 1)];
} else {
pageClass = [NSString stringWithFormat:@\"Page%d\", (newPage + 1)];
}
pageNext = [[NSClassFromString(pageClass) alloc] initWithNibName:pageClass bundle:nil];
pageNext.view.frame = CGRectMake(self.view.frame.size.height * newPage, 0, self.view.frame.size.height, self.view.frame.size.width);
[scrollView addSubview:pageNext.view];
} else {
if(pageNext != nil) {
pageNext = nil;
}
}
} else if(newPage < currentPage) {
if(pageNext != nil) {
[pageNext.view removeFromSuperview];
[pageNext release];
}
pageNext = pageCurrent;
pageCurrent = pagePrevious;
if(newPage > 1) {
NSString *pageClass;
if(newPage < 11) {
pageClass = [NSString stringWithFormat:@\"Page0%d\", (newPage - 1)];
} else {
pageClass = [NSString stringWithFormat:@\"Page%d\", (newPage - 1)];
}
pagePrevious = [[NSClassFromString(pageClass) alloc] initWithNibName:pageClass bundle:nil];
pagePrevious.view.frame = CGRectMake(self.view.frame.size.height * (newPage - 2), 0, self.view.frame.size.height, self.view.frame.size.width);
[scrollView addSubview:pagePrevious.view];
} else {
if(pagePrevious != nil) {
pagePrevious = nil;
}
}
}
currentPage = newPage;
}
But another question came to my mind - how could I prevent UIScrollView from scrolling "too fast"? When I swipe really quickly scrollViewDidEndDecelerating doesn't get called so pages don't get loaded and I end up getting blank screens. Should I change the delegate method or think about limiting the contentSize of UIScrollView?
- Spam
- Abuse
- Troll
0 • Off Topic Insightful Disagree Dislike Like AwesomeI simply used scrollViewDidScroll instead of scrollViewDidEndDecelerating.
Sorry for this mess. I hope I will at least help someone in the future...
Regards,
Drwall
- Spam
- Abuse
- Troll
0 • Off Topic Insightful Disagree Dislike Like Awesome- Spam
- Abuse
- Troll
0 • Off Topic Insightful Disagree Dislike Like Awesome- Spam
- Abuse
- Troll
0 • Off Topic Insightful Disagree Dislike Like Awesome