页面卷曲效果在iphone中的类之间传输

suj*_*jay 1 iphone core-animation objective-c page-curl

我正在处理页面卷曲效果.点击一个按钮,我能够通过页面(即在UIViews之间).以下代码描述了相同的

UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:1.5];  
    if ([sender tag] == 1) {
        [UIView setAnimationTransition:UIViewAnimationTransitionCurlDown forView:placeholder cache:YES];
    }
    else {
        [UIView setAnimationTransition:UIViewAnimationTransitionCurlUp forView:placeholder cache:YES];
    }
    if (view1OnTop) {
        [view1 removeFromSuperview];
        [placeholder addSubview:view2];
    }
    else {
        [view2 removeFromSuperview];
        [placeholder addSubview:view1];
    }
    [UIView commitAnimations];

    view1OnTop = !view1OnTop;
Run Code Online (Sandbox Code Playgroud)

有了这个,我能够在UIViews之间卷曲,但我的问题是,我能否在两个或更多类之间应用这种过渡?提前致谢

Dee*_*olu 6

并非一切都是可动画的.只有UIKit的部分是.所以,如果你的意思是询问是否NSObject可以动画任何子类,那么他们就不能.如果你的意思是询问是否UIView可以动画子类,那么答案是肯定的.它们也可以是不同的子类.虽然这是可能的,但这并不意味着它会给我们正确的结果.他们可能最终看起来很奇怪.你可能不想那样做.

图层也是可动画的.

但这完全取决于你的课程意味着什么.

动画到新的视图控制器

假设您想要改变在视图控制器之间切换的方式,可以使用transitionWithView:duration:..类方法UIView.一个例子,

SecondViewController * viewController = [[[SecondViewController alloc] initWithNibName:nil bundle:nil] autorelease];
[UIView transitionWithView:self.view.window
                  duration:1.0f
                   options:UIViewAnimationOptionTransitionCurlUp
                animations:^{
                    [self.navigationController pushViewController:viewController animated:NO];
                }
                completion:NULL];
Run Code Online (Sandbox Code Playgroud)

这将在按下新视图控制器时使用卷曲过渡.

适用于4.0以上的iOS版本

由于它们不支持基于块的动画API,因此您必须这样做,

[UIView beginAnimations:@"Curl up" context:NULL];
[UIView setAnimationDuration:1.0f];
[UIView setAnimationTransition:UIViewAnimationTransitionCurlUp forView:self.view.window cache:YES];

[self.navigationController pushViewController:viewController animated:NO];

[UIView commitAnimations];
Run Code Online (Sandbox Code Playgroud)