2011-10-17 14 views
1

私は多くのサブビューを持つMainViewControllerを持っています。基本的には、2つのペインに分かれています。ペインはクリップボードのようにデザインされています。ボタンを押して、クリップボードの「紙」に部分的なカールを付けて、その下にページを表示したいと思います。iOS UIView、UIViewではなく部分ページのカールを使用

これは完全なモーダルViewControllerプレゼンテーションの状況ではありません。

私は次のコードで働いているが、結果はファンキーです:

FlipView *flipView = [[FlipView alloc] init]; 
    [self setFlipView:flipView]; 
    [flipView setHidden:YES]; 
    [flipView setFrame:[[self WhereAmI] frame]]; 
    [[self view] addSubview:flipView]; 
    [[self view] bringSubviewToFront:[self WhereAmI]]; 
    [flipView setHidden:NO]; 
    CATransition *animation = [CATransition animation]; 
    [animation setDelegate:self]; 
    [animation setDuration:1.0]; 
    [animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]]; 
    [animation setType:@"pageCurl"]; 
    [animation setFillMode:kCAFillModeForwards]; 
    [animation setEndProgress:0.9]; 
    [animation setRemovedOnCompletion:NO]; 
    [[self WhereAmI] setHidden:YES]; 
    [[[self WhereAmI] layer] addAnimation:animation forKey:@"pageCurlAnimation"]; 

基本的に、私はカール、プログラム的に私の新しいビューをロードし、その後、現在表示されているビューの後ろにそれをスライドさせ、しようとしています上にあるビューを上に移動して、下にあるビューを表示します。部分カールアニメーションが多少得られますが、カールアップしている「ページ」は不透明ではなく、奇妙です。また、私がビューとラベルを隠すように設定していないときに、それらがカールしているのを見ても、あなたはまだそれらも "奇妙な"下に見えます。さらに、私は新しいビューのためにXIBに入れたUILabelを見ません。

どのような考えですか?

ありがとうございます!


いいえ、私は実用的な解決策を持っていますが、それは私が望んでいたものではありません。私はまだ私の元の質問への解決策を見つけ出すのが大好き、しかし、ここで私は今のところやっているものだと思います:

  1. 私の「ベース」ビューの背景画像がスパイラルバウンドノートブックのイメージです。
  2. 他のすべてのビューの背景イメージは、ページカールのスクリーンショットです。 (「背景画像」とは、私はpatternImageで作成UIColorを意味する。)
  3. ビューを移行するためのコードは次のとおりです。

    - (IBAction)NavigationTabSelected:(id)sender 
    { 
        // Flipping views is driven by a SegmentedControl 
        int selected = [[self NavigationTabsSegmentedControl] selectedSegmentIndex]; 
        int current = [[self ViewArray] indexOfObject:[self ActiveFlipView]]; 
        UIView *newFlip = [[self ViewArray] objectAtIndex:selected]; 
    
        BOOL up = selected > current; 
        [UIView animateWithDuration:1.0 
            animations:^{ 
             [UIView setAnimationTransition:(up)?UIViewAnimationTransitionCurlUp:UIViewAnimationTransitionCurlDown forView:[self RightView] cache:YES]; 
             [[self ActiveFlipView] removeFromSuperview]; 
             [[self RightView] addSubview:newFlip]; 
            } 
            completion:^(BOOL finished){ 
             [self setActiveFlipView:newFlip]; 
            }]; 
    } 
    

は、あなたが見ることができるように、右側にあるタブを現在のタブは「カールアップ」を生成し、現在のタブの左側のタブは「カールダウン」を生成する。それは私の望むものではありませんが、私の目的に役立ちます。

もっと良いアイデアを教えてください。

+0

UIViewの 'transitionFromView'メソッドと' transitionWithView'メソッドは見たことがありますか? 2-3行のコードで、あなたが望むことをすることができるはずです。 – Rog

答えて

-3

モーダルビューとしてロードすることを検討しましたか?

- (void)yourFrontViewControllerMethod 
{ 
    YourBackViewController *bfvc = [[YourBackViewController alloc] init]; 
    [bfvc setModalTransitionStyle:UIMoalTransitionStylePartialCurl]; 
    [self presentViewController:bfvc]; 
    [bvfc release]; 
} 

これにより、別のビューを表示するためにカーブしたビューの効果が得られます。

また、一般的な経験則として、アニメーションをそのように作成しないようにしてください。代わりにブロックベースの方法を使用してみてください(例:[UIView AnimateWithDuration:....]);

希望するもの:

+0

はい、私はこれを考慮しましたが、フルページの部分的なカールを行う場合にのみ有効です。私はそれが上で不明であるかどうかは分かりませんが、私は画面のPARTをカールしたいだけです。また、上記のようにアニメーションを作成して、EndProgressの値を制御できるようにしました。私が使用しているアニメーションを完了すると、ページが完全にオフスクリーンになるためです。 – mbm29414

+0

-1あなたの答えが完全に私の元の投稿の "これは完全なモーダル状況ではありません"を逃したので。 – mbm29414

関連する問題