【发布时间】: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。
有什么想法吗?
谢谢!
好的,所以我有一个可行的解决方案,但这并不是我希望做的。我仍然很想弄清楚我原来的问题的解决方案,但这就是我现在正在做的事情:
- “基本”视图的背景图像是螺旋装订笔记本的图像。
- 所有其他视图的背景图像是卷页的屏幕截图。 (“背景图片”是指使用 patternImage 创建的 UIColor。)
-
转换视图的代码是:
- (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 的
transitionFromView和transitionWithView方法吗?你应该可以用 2-3 行代码做你想做的事。