如何将阴影背景白色更改为其他颜色

Nis*_*shu 8 ios uipageviewcontroller

我正在尝试UIPageViewController在进行翻转动画时改变阴影颜色.但它总是只显示白色.如何将翻转背景颜色白色的颜色更改为其他颜色(黑色或sephia).iBook也在做同样的事情.

我提到下面的图像有白色bg,颜色我会改变.

截图: 在此输入图像描述

Abr*_*ras 8

我一直试图做同样的事情一段时间,我终于明白了.事实证明,您无法将背景颜色设置为其他颜色,但您可以提供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.
Run Code Online (Sandbox Code Playgroud)

因此,基本上,您需要将double side属性设置为yes并在两个Data Source方法上提供两个viewControllers:

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController;
- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController;
Run Code Online (Sandbox Code Playgroud)

对于您添加的每个新页面,将为每个方法调用两次.因此,您需要提供通常返回的viewController以及在执行页面转动动画时将添加到后面的新viewController.

这取决于你的"BackViewController"将具有的功能.您可以简单地使用黑色视图,或者如果需要,您可以截取首页的屏幕截图,并从中获取镜像图像.

一旦你了解它是如何工作的,这并不难.我在这里看到的唯一问题是当你添加黑色视图或任何黑色背景时,转动页面时的阴影变为白色.我不知道为什么,但我已经在很多不同的应用程序上看到过这种情况,所以我猜Apple这是正常行为.但它看起来很奇怪.

编辑:

我添加了示例代码,因此更容易理解. https://github.com/mattabras/DoubleSidedPageViewController

阿巴拉

  • 您可以在此处获取示例代码。https://github.com/mattabras/DoubleSidedPageViewController (2认同)
  • 我不明白。如果您发现代码有用,请至少给他一些选票!思考。 (2认同)

小智 0

- (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]);
}
Run Code Online (Sandbox Code Playgroud)