UIPageViewController
フリップアニメーションをしながら影の色を変えようとしています。ただし、常に白色のみを表示します。裏側の背景色の白を他の色(黒またはセフィア)に変更する方法。iBookも同じことをしています。
下の画像には、私が変更したい色の白いbgがあることを述べています。
スクリーンショット:
UIPageViewController
フリップアニメーションをしながら影の色を変えようとしています。ただし、常に白色のみを表示します。裏側の背景色の白を他の色(黒またはセフィア)に変更する方法。iBookも同じことをしています。
下の画像には、私が変更したい色の白いbgがあることを述べています。
スクリーンショット:
私はしばらくの間同じことをしようとしてきました、そして私はついにそれを理解しました。背景色を他の色に設定することはできませんが、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に設定し、両方のデータソースメソッドに2つのviewControllerを提供する必要があります。
- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController;
- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController;
新しいページを追加するたびに、各メソッドが2回呼び出されます。したがって、通常返すviewControllerと、ページめくりアニメーションを実行するときに背面に追加される新しいviewControllerを提供する必要があります。
あなたの「BackViewController」が何を持っているかはあなた次第です。単に黒いビューを表示することも、必要に応じてフロントページのスクリーンショットを撮り、そこから鏡像を取得することもできます。
それがどのように機能するかを理解すれば、難しくはありません。ここで私が見ることができる唯一の問題は、黒いビューまたは黒い背景を持つものを追加すると、ページをめくるときの影が白になることです。理由はわかりませんが、これはさまざまなアプリで発生しているので、Appleにとってはこれは正常な動作だと思います。しかし、それは本当に奇妙に見えます。
編集:
わかりやすくするためにサンプルコードを追加しました。 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 はデフォルトではこれをサポートしていません。独自のページ コントロールを作成し、自分で描画する必要があります。