我正在尝试UIPageViewController
在进行翻转动画时更改阴影颜色。但总是只显示白色。如何将反面背景颜色白色更改为其他颜色,如(黑色或深褐色)。iBook 也在做同样的事情。
我提到下图有白色背景,我想改变这种颜色。
截屏:
我正在尝试UIPageViewController
在进行翻转动画时更改阴影颜色。但总是只显示白色。如何将反面背景颜色白色更改为其他颜色,如(黑色或深褐色)。iBook 也在做同样的事情。
我提到下图有白色背景,我想改变这种颜色。
截屏:
我一直在尝试做同样的事情一段时间,我终于想通了。事实证明,您不能将背景颜色设置为其他颜色,但您可以提供 UIPageViewController 将添加到后面的另一个视图。这就是这里的秘密。
来自 Apple 的文档:
Spine location Double sided What to pass
UIPageViewControllerSpineLocationMid YES Left and Right Page.
SpineLocationMin or SpineLocationMax YES Front and Back of the page.
SpineLocationMin or SpineLocationMax NO Front page only.
因此,基本上,您需要将双面属性设置为 yes 并在两个 Data Source 方法上提供两个 viewController:
- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController;
- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController;
对于您添加的每个新页面,每个方法都将被调用两次。因此,您需要提供通常会返回的 viewController 以及在执行翻页动画时将添加到后面的新 viewController。
您的“BackViewController”将拥有什么取决于您。您可以简单地拥有一个黑色视图,或者如果您愿意,您可以截取首页的屏幕截图,并从中获取镜像图像。
一旦你了解了它的工作原理,这并不难。我在这里看到的唯一问题是,当您添加黑色视图或任何具有黑色背景的东西时,翻页时的阴影会变成白色。我不知道为什么,但我已经在很多不同的应用程序上看到了这种情况,所以我猜对苹果来说这是正常行为。但它看起来真的很奇怪。
编辑:
我添加了一个示例代码,以便更容易理解。 https://github.com/mattabras/DoubleSidedPageViewController
阿布拉斯
- (void) renderPageAtIndex:(NSUInteger)index inContext:(CGContextRef)ctx {
UIImage *image = [images objectAtIndex:index];
CGRect imageRect = CGRectMake(0, 0, image.size.width, image.size.height);
CGAffineTransform transform = aspectFit(imageRect,
CGContextGetClipBoundingBox(ctx));
CGContextConcatCTM(ctx, transform);
CGContextDrawImage(ctx, imageRect, [image CGImage]);
}
在 pagecontrol 可选择页面可见性颜色的情况下——
UIPageControl 默认不支持这个。您必须创建自己的页面控件并自己进行绘图。