【问题标题】:iOS Using Partial Page Curl on UIView, NOT UIViewControlleriOS 在 UIView 上使用部分页面卷曲,而不是 UIViewController
【发布时间】:2011-10-17 21:42:18
【问题描述】:

我有一个包含许多子视图的 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];
                         }];
    }
    

如您所见,当前选项卡右侧的选项卡会生成“向上卷曲”,当前选项卡左侧的选项卡会生成“向下卷曲”。这不是我想要的,但它符合我的目的。

有更好的想法吗?

【问题讨论】:

  • 你见过 UIView 的transitionFromViewtransitionWithView 方法吗?你应该可以用 2-3 行代码做你想做的事。

标签: ios animation curl uiview


【解决方案1】:

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

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

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

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

希望有帮助:)

【讨论】:

  • 是的,我已经考虑过了,但是这种方法不是只在进行整页部分卷曲时有效吗?我不确定上面是否不清楚,但我只想卷曲部分屏幕。另外,我制作了如上所示的动画,以便我可以控制 EndProgress 值,因为完成我使用的动画会使页面完全脱离屏幕。
  • -1 由于您的回答完全错过了我原来帖子中的“这不是一个完整的模态情况”。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多