Leavesプロジェクトを使用して、あるpdfページから別のpdfページに移動しています。これは正常に機能しています。これで、ページの回転はノートブックのように左から右へ、右から左へとなります。上から下、下から上にカールする必要があります。誰かがそれを行う方法、またはこれを行うための他のテンプレートを知っていますか?
3 に答える
Leaves http://developer.apple.com/library/ios/#DOCUMENTATION/UIKit/Reference/UIPageViewControllerClassReferenceClassRef/UIPageViewControllerClassReference.htmlの代わりに、AppleのUIPageViewControllerを使用してください。
これにより、たとえばiBooksで使用されているカールが正確に得られるため、カールしたビューのより美しい(より現実的な)マトリックスが得られます。
すべてのメモシートをビューにして、ビューにUIPageViewControllerを指定するだけです。また、背骨が配置されている場所など、さまざまなオプションがあります。
カールアップするには、
[UIView setAnimationTransition:UIViewAnimationTransitionCurlUp forView:self.view cache:YES];
[UIView setAnimationTransition:UIViewAnimationTransitionCurlDown forView:self.view cache:YES];
前述のバラのように使用するか、上下の遷移を担当する別のUIPageViewControllerをインスタンス化します。本当にビューに入り、複数のアイテムを切り替えたい場合は、2つのuipageviewcontrollerを使用するので、1つは水平でもう1つは垂直です。
この方法
SampleViewController *sampleView = [[[SampleViewController alloc] init] autorelease];
[sampleView setModalTransitionStyle:UIModalTransitionStylePartialCurl];
[self presentModalViewController:sampleView animated:YES];
このチュートリアルのように役立つかもしれません
既存のLeavesビューは、左から右にハードコーディングされています。ハードコーディングされた上から下へのバージョンは簡単に作成できますが、より堅牢な汎用ソリューションがある可能性があります。
ただし、どうしても葉を使用する必要がある場合は、それに合わせてソースを書き直すことができます。以下の解決策は、垂直方向の動きをハードコードします。水平方向と垂直方向のオプションが必要な場合は、さらに多くの作業を行う必要があります。
画面
setUpLayers
を呼び出すたびに軸を反転しCGPointMake
ます。これにより、影を表示するグラデーションが修正されます。
また、に変更topPage.contentsGravity = kCAGravityLeft;
します。これは、受信ページが正しいエッジで表示されるようにする微妙な変更です。topPage.contentsGravity = kCAGravityBottom;
topPageReverseImage.contentsGravity = kCAGravityRight;
topPageReverseImage.contentsGravity = kCAGravityTop;
setLayerFrames
ジオメトリの変更のほとんどはここで行われます。元のコードは奇妙なことに、ある場所ではビュー境界を使用し、他の場所ではレイヤー境界を使用しています。それらを複製しましたが、このコードを本番環境で使用する前に、区別が意味があるかどうかを理解しておくとよいでしょう。
- (void) setLayerFrames {
topPage.frame = CGRectMake(self.layer.bounds.origin.x,
self.layer.bounds.origin.y,
self.bounds.size.width,
leafEdge * self.layer.bounds.size.height);
topPageReverse.frame = CGRectMake(self.layer.bounds.origin.x,
self.layer.bounds.origin.y + (2*leafEdge-1) * self.layer.bounds.size.height,
self.bounds.size.width,
(1-leafEdge) * self.layer.bounds.size.height);
bottomPage.frame = self.layer.bounds;
topPageShadow.frame = CGRectMake(0,
topPageReverse.frame.origin.y - 40,
bottomPage.bounds.size.width,
40);
topPageReverseImage.frame = topPageReverse.bounds;
topPageReverseImage.transform = CATransform3DMakeScale(1, -1, 1);
topPageReverseOverlay.frame = topPageReverse.bounds;
topPageReverseShading.frame = CGRectMake(0,
topPageReverse.bounds.size.height - 50,
topPageReverse.bounds.size.width,
50 + 1);
bottomPageShadow.frame = CGRectMake(0,
leafEdge * self.bounds.size.height,
bottomPage.bounds.size.width,
40);
topPageOverlay.frame = topPage.bounds;
}
インタラクション
updateTargetRects
これが計算する場所nextPageRect
でprevPageRect
、それらを左右ではなく、下部と上部に配置します。
touchesMoved:withEvent:
に変更self.leafEdge = touchPoint.x / self.bounds.size.width;
しself.leafEdge = touchPoint.y / self.bounds.size.height;
ます。