How to implement UIPageViewController with a UIScrollView?(如何用 UIScrollView 实现 UIPageViewController?)
问题描述
我以 Photo Scroller 为例Apple 的网站,并尝试通过复制代码来实现我自己的专辑.现在, UIScrollView
不可见.我如何让它出现?
I took the Photo Scroller example from Apple's website and tried to implement my own Album by copying the code. Now, the UIScrollView
is not visible. How do I make it appear?
我所做的唯一代码更改是创建 UIPageViewController
.在我的情况下,打开它的是一个 UIViewController
而不是 AppDelegate
.
The only code change that I made was in creating the UIPageViewController
. In my case, it's a UIViewController
that is opening it and not the AppDelegate
.
@implementation BasePhotoViewController
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nil bundle:nibBundleOrNil];
if (self) {
// kick things off by making the first page
PhotoViewController *pageZero = [PhotoViewController photoViewControllerForPageIndex:0];
if (pageZero != nil)
{
// assign the first page to the pageViewController (our rootViewController)
//UIPageViewController *pageViewController = (UIPageViewController *) [[UIApplication sharedApplication] keyWindow].rootViewController;
UIPageViewController *pageViewController = [[UIPageViewController alloc] initWithTransitionStyle:0 navigationOrientation:0 options:nil];
//UIPageViewController *pageViewController = (UIPageViewController *)self.parentViewController;
pageViewController.dataSource = self;
[pageViewController setViewControllers:@[pageZero]
direction:UIPageViewControllerNavigationDirectionForward
animated:NO
completion:NULL];
}
}
return self;
}
推荐答案
您没有将 pageViewController
的视图添加为 BasePhotoViewController
的视图的子视图.您的 BasePhotoViewController
类应如下所示.注意 viewDidLoad
中的代码.
You are not adding the pageViewController
's view as a subview of BasePhotoViewController
's view. Your BasePhotoViewController
class should look something like this. Note the code in viewDidLoad
.
BasePhotoViewController.h:
@interface BasePhotoViewController : UIViewController <UIPageViewControllerDataSource>
@property (nonatomic, strong) UIPageViewController * pageViewController;
@end
BasePhotoViewController.m:
#import "BasePhotoViewController.h"
#import "PhotoViewController.h"
@implementation BasePhotoViewController
@synthesize pageViewController;
- (id)initWithCoder:(NSCoder *)coder
{
self = [super initWithCoder:coder];
if (self) {
PhotoViewController *pageZero = [PhotoViewController photoViewControllerForPageIndex:0];
if (pageZero != nil)
{
self.pageViewController = [[UIPageViewController alloc] initWithTransitionStyle:0
navigationOrientation:0
options:nil];
self.pageViewController.dataSource = self;
[self.pageViewController setViewControllers:@[pageZero]
direction:UIPageViewControllerNavigationDirectionForward
animated:NO
completion:NULL];
}
}
return self;
}
- (void)viewDidLoad
{
[super viewDidLoad];
[self addChildViewController:self.pageViewController];
[self.view addSubview:self.pageViewController.view];
[self.pageViewController didMoveToParentViewController:self];
}
# pragma mark - UIPageViewControllerDataSource
- (UIViewController *)pageViewController:(UIPageViewController *)pvc viewControllerBeforeViewController:(PhotoViewController *)vc
{
NSUInteger index = vc.pageIndex;
return [PhotoViewController photoViewControllerForPageIndex:(index - 1)];
}
- (UIViewController *)pageViewController:(UIPageViewController *)pvc viewControllerAfterViewController:(PhotoViewController *)vc
{
NSUInteger index = vc.pageIndex;
return [PhotoViewController photoViewControllerForPageIndex:(index + 1)];
}
@end
注意:我已经在 initWithCoder:
中初始化了 UIPageViewController
,因为 Apple 的 Photo Scroller 代码使用情节提要.我从情节提要中删除了 UIPageViewController
并在其位置创建了一个 BasePhotoViewController
.如果您没有从情节提要加载 BasePhotoViewController
,则应将 initWithCoder:
中的代码移动到适当的初始化程序.
Note: I've initialised the UIPageViewController
in initWithCoder:
because Apple's Photo Scroller code uses a storyboard. I removed the UIPageViewController
from the storyboard and created a BasePhotoViewController
in its place. If you are not loading BasePhotoViewController
from a storyboard, you should move the code in initWithCoder:
to the appropriate initialiser.
在 github 上查看这个 示例项目.
See this sample project on github.
这篇关于如何用 UIScrollView 实现 UIPageViewController?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:如何用 UIScrollView 实现 UIPageViewController?
基础教程推荐
- 当从同一个组件调用时,两个 IBAction 触发的顺序是什么? 2022-01-01
- 如何在没有IB的情况下将2个按钮添加到右侧的UINavigationbar? 2022-01-01
- 如何让对象对 Cocos2D 中的触摸做出反应? 2022-01-01
- Kivy Buildozer 无法构建 apk,命令失败:./distribute.sh -m “kivy"d 2022-01-01
- Android:对话框关闭而不调用关闭 2022-01-01
- 在 gmail 中为 ios 应用程序检索朋友的朋友 2022-01-01
- android 应用程序已发布,但在 google play 中找不到 2022-01-01
- 如何在 iPhone 上显示来自 API 的 HTML 文本? 2022-01-01
- UIWebView 委托方法 shouldStartLoadWithRequest:在 WKWebView 中等效? 2022-01-01
- 如何在 UIImageView 中异步加载图像? 2022-01-01