iOS在UIView上使用部分页面卷曲,而不是UIViewController

时间:2011-10-17 21:42:18

标签: ios animation curl uiview

我有一个包含许多子视图的MainViewController。基本上,它分为两个窗格。窗格看起来像剪贴板。我想点击一个按钮,让其中一个剪贴板上的“纸张”部分卷曲,以显示下面的页面。

这不是完整的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];
                         }];
    }
    
  4. 如您所见,当前标签右侧的标签会生成“卷曲”,当前标签左侧的标签会生成“向下卷曲”。这不是我想要的,但它符合我的目的。

    有更好的想法吗?

1 个答案:

答案 0 :(得分:-3)

您是否考虑将其加载为模态视图?

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

这将为您提供所需的视图效果,以显示另一个视图。

另外,作为一般经验法则,我们尽量不以这种方式创建动画。尝试使用基于块的方法(例如[UIView AnimateWithDuration:....]);

希望有所帮助:)