2011-10-17 41 views
1

我有一个拥有许多子视图的MainViewController。基本上,它分为两个窗格。窗格的设计看起来像剪贴板。我想点击一个按钮,让其中一个剪贴板上的“纸张”进行部分卷曲,以显示下面的页面。iOS在UIView上使用部分页面卷曲,而不是UIViewController

这不是一个完整的Modal 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

是的,我已经考虑过这个问题,但是这种方法仅适用于整页部分卷曲吗?我不确定上述内容是否不清楚,但我只想蜷缩屏幕的一部分。另外,我按照上面所示的方法制作了动画,以便我可以控制EndProgress值,因为完成我使用的动画会使页面完全脱离屏幕。 – mbm29414

+0

-1因为你的回答在我原来的文章中完全错过了“这不是一个完整的模态”。 – mbm29414