最近我编写了关于UIPageViewController的这个小教程:
http://www.appcoda.com/uipageviewcontroller-tutorial-intro/
http://www.appcoda.com/uipageviewcontroller-tutorial-intro/
在本教程之后,我想知道是否可以将页面指示器的位置更改为屏幕顶部.
有谁知道怎么样?
编辑
到目前为止,感谢您的帮助.我关注这篇文章:
How to put the UIPageControl element on top of the sliding pages within a UIPageViewController?
现在我将页面控件置于顶部,但发生了一些奇怪的事情:
如果从第1页滑动到第2页,则指示符表示用户在第3页上.
我放入一个NSLog,它显示当前索引,并在从0到1而不是2时滑动到下一页时更改.
有人知道为什么吗?
现行代码:
@property (weak,nonatomic) IBOutlet UIPageControl *pageControl; @end @implementation APPViewController - (void)viewDidLoad { [super viewDidLoad]; self.pageController = [[UIPageViewController alloc] initWithTransitionStyle:UIPageViewControllerTransitionStyleScroll navigationorientation:UIPageViewControllerNavigationorientationHorizontal options:nil]; self.pageController.dataSource = self; [[self.pageController view] setFrame:[[self view] bounds]]; APPChildViewController *initialViewController = [self viewControllerAtIndex:0]; NSArray *viewControllers = [NSArray arrayWithObject:initialViewController]; [self.pageController setViewControllers:viewControllers direction:UIPageViewControllerNavigationDirectionForward animated:NO completion:nil]; [self addChildViewController:self.pageController]; [[self view] addSubview:[self.pageController view]]; [self.pageController didMovetoParentViewController:self]; UIPageControl *pageControl = [UIPageControl appearance]; pageControl.pageIndicatorTintColor = [UIColor lightGrayColor]; pageControl.currentPageIndicatorTintColor = [UIColor orangeColor]; [self.view bringSubviewToFront:self.pageControl]; //Or whatever number of viewcontrollers you have [self.pageControl setNumberOfPages:5]; } - (APPChildViewController *)viewControllerAtIndex:(NSUInteger)index { APPChildViewController *childViewController = [[APPChildViewController alloc] initWithNibName:@"APPChildViewController" bundle:nil]; childViewController.index = index; return childViewController; } - (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController { NSUInteger index = [(APPChildViewController *)viewController index]; if (index == 0) { return nil; } // Decrease the index by 1 to return index--; [self.pageControl setCurrentPage:index]; return [self viewControllerAtIndex:index]; } - (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController { NSUInteger index = [(APPChildViewController *)viewController index]; index++; [self.pageControl setCurrentPage:index]; if (index == 5) { return nil; } return [self viewControllerAtIndex:index]; }
AppChildViewController:
@property (assign,nonatomic) NSInteger index; - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view from its nib. switch(self.index) { case zero: { self.imageView.image = [UIImage imageNamed:@"page1.png"]; NSLog(@"%d",self.index); break; } case one: { self.imageView.image = [UIImage imageNamed:@"page2.png"]; NSLog(@"%d",self.index); break; } case two: { self.imageView.image = [UIImage imageNamed:@"page3.png"]; NSLog(@"%d",self.index); break; } case three: { self.imageView.image = [UIImage imageNamed:@"page4.png"]; NSLog(@"%d",self.index); break; } default: { self.imageView.image = [UIImage imageNamed:@"page5.png"]; NSLog(@"%d",self.index); break; } } }
解决方法
在我们的应用程序中,我将页面指示器放在页面视图控制器视图的顶部,方法是将视图翻转过来.这真的很傻,除非你有信心,否则我不建议使用这种技术.它是这样的:
[pageWrapperView setTransform:CGAffineTransformRotate([pagingView transform],M_PI)];
页面视图控制器的视图是pageWrapperView的子视图.
那么你也需要翻转内容视图,所以它们是正确的方式.
我有a demo on Github where this technique is used to put a tab bar at the top of the screen.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。