我正在创建一个包含教程屏幕子视图的视图。
我希望灰色子视图可以使用页面控件
进行滑动我已经实现了http://www.appcoda.com/uipageviewcontroller-tutorial-intro/的示例,但这适用于整个ViewControllers,我希望它只与子视图一起使用...
有没有人知道如何使用滑动手势实现PageControl,以便只有灰色子视图更改?任何好的教程?
答案 0 :(得分:2)
灰色区域必须是UIScrollView
,其内容视图包含教程的每个页面。在滚动视图上将pagingEnabled
设置为YES
,以便在滚动时它会对齐每个页面。
然后,您需要使用addTarget:action:forControlEvents:
将操作附加到页面控件,并将UIControlEventValueChanged
作为事件传递。然后,该操作必须是一种方法,它告诉滚动视图向前或向后移动页面,具体取决于页面控件的值是增加还是减少。您可以通过更改滚动视图的内容偏移量,或通过告诉它滚动以便特定的矩形可见来实现此目的。
最后,实现UIScrollView
的委托,并使用告诉滚动视图何时停止滚动的方法(你需要结束减速效果,结束拖动并可能结束滚动动画),并在滚动视图更改页面时更新页面控件的值。
这就是它的全部内容。如果您需要更多详细信息,请阅读UIScrollView
,UIScrollViewDelegate
和UIPageControl
的文档。
答案 1 :(得分:2)
使用UIView
代替ViewController
这是一个适合我的解决方案:
1)在NIB或Storyboard中创建scrollView
和pageControl
2)ViewDidLoad
self.scrollView.backgroundColor = [UIColor clearColor];
self.scrollView.indicatorStyle = UIScrollViewIndicatorStyleBlack; //Scroll bar style
self.scrollView.showsHorizontalScrollIndicator = NO;
//dont forget to set delegate in .h file
[self.scrollView setDelegate:self];
self.scrollView.showsVerticalScrollIndicator = YES; //Close vertical scroll bar
self.scrollView.bounces = YES; //Cancel rebound effect
self.scrollView.pagingEnabled = YES; //Flat screen
self.scrollView.contentSize = CGSizeMake(640, 30);
3)在scrollView中创建您想要的views
并将其添加到Array
//For instance, you want 3 views
UIView *ViewOne = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.scrollView.frame.size.width, self.scrollView.frame.size.height)];
[ViewOne setBackgroundColor:[UIColor redColor]];
UIView *ViewTwo = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.scrollView.frame.size.width+1, self.scrollView.frame.size.height)];
[ViewTwo setBackgroundColor:[UIColor greenColor]];
UIView *ViewThree = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.scrollView.frame.size.width+2, self.scrollView.frame.size.height)];
[ViewThree setBackgroundColor:[UIColor blueColor]];
//add all views to array
NSMutableArray *viewsArray = [[NSMutableArray alloc] initWithObjects:ViewOne, ViewTwo, ViewThree, nil];
4)ViewDidLoad
self.pageControl.numberOfPages = viewsArray.count;
self.pageControl.currentPage = 0;
self.pageControl.backgroundColor = [UIColor clearColor];
[self.pageControl setTintColor:[UIColor whiteColor]];
5)全部添加
for(int i = 0; i < viewsArray.count; i++)
{
CGRect frame;
frame.origin.x = (self.scrollView.frame.size.width *i) + 10;
frame.origin.y = 0;
frame.size = CGSizeMake(self.scrollView.frame.size.width - 20, self.scrollView.frame.size.height);
NSLog(@"array: %@", [viewsArray objectAtIndex:i]);
UIView *view = [[UIView alloc] initWithFrame:frame];
view = [viewsArray objectAtIndex:i];
[self.scrollView addSubview:view];
self.scrollView.contentSize = CGSizeMake(self.scrollView.frame.size.width*viewsArray.count, self.scrollView.frame.size.height);
}
6)跟踪scrollView并更新pageControl (DONT FORGET THE SCROLLVIEW DELEGATE)
-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
CGFloat pageWidth = scrollView.frame.size.width;
//int page = floor((scrollView.contentOffset.x - pageWidth*0.3) / pageWidth) + 1);
self.pageControl.currentPage = (int)scrollView.contentOffset.x / (int)pageWidth;
NSLog(@"CURRENT PAGE %d", self.pageControl.currentPage);
}
这应该可以解决问题。
PS。对不起所有神奇的数字。