我有一个拥有许多子视图的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。
有什么想法?
谢谢!
好吧,所以我有一个工作解决方案,但它不是我想做的。我仍然很想找出解决我原来的问题,但这里是我现在正在做的:
- 我的“基”视图的背景图像是螺旋装订笔记本的图像。
- 所有其他视图的背景图像是页面卷曲的屏幕截图。 (通过“背景图片”,我指的是一个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行代码中做你想做的。 – Rog