动画弹出视图类似于Ipad音乐文件夹中的一个

时间:2011-04-13 18:48:17

标签: ipad popup

我想知道Ipad的音乐文件夹中使用的功能的名称是什么,当点击相册文件夹时,会在动画视图中弹出有关该相册的详细信息。

我尝试使用presentModelViewController,但其功能不同。

如果有人可以帮助我,那就太棒了。

2 个答案:

答案 0 :(得分:1)

在iPad上,你有几个不同的动画模式视图控制器选项,你可以在这里找到它们:UIModalTransitionStyle

但是,如果你指的是对相册的“缩放和翻转”效果,我很确定这是私人行为所以你需要自己开发....你可能能够完成这个使用Core Graphics / Quartz。

答案 1 :(得分:1)

我只是设法得到某事。像这样使用CoreAnimation / QuartzCore Framework ... 一定要

#import <QuartzCore/QuartzCore.h>

如果要进行动画处理,请使用CATransform3D以及记录不佳的CATransform3D.m34属性。这将执行动画的上半部分(假设200x200&lt; - &gt; 450x450,旋转180°):

[UIView beginAnimations:nil context:NULL];

[UIView setAnimationDuration:0.5];
[UIView setAnimationCurve:UIViewAnimationCurveEaseIn];
[UIView setAnimationDelegate:self];
CATransform3D rotationAndPerspectiveTransform = CATransform3DIdentity;
rotationAndPerspectiveTransform.m34 = 1.0 / -1000; // this turns on perspective!
rotationAndPerspectiveTransform = CATransform3DRotate(rotationAndPerspectiveTransform, 90.0f * M_PI / 180.0f, 0.0f, 1.0f, 0.0f);
someView.layer.transform = rotationAndPerspectiveTransform;
someView.bounds = CGRectMake(0, 0, 325, 325);

[UIView commitAnimations];

对于动画的后半部分,您必须在层次结构中添加/删除视图。此示例显示隐藏/显示已作为someView的子视图存在的视图,它还使用BOOL isUp实例变量(aniation的前半部分独立于isUp-flag! )

- (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag
{
    if (flag) {
        if (isUp) {
            someSubView.hidden = YES; // hide subview
            [UIView beginAnimations:nil context:NULL];

            [UIView setAnimationDuration:0.5];
            [UIView setAnimationCurve:UIViewAnimationCurveEaseOut];
            CATransform3D rotationAndPerspectiveTransform = CATransform3DRotate(someView.layer.transform, -90.0f * M_PI / 180.0f, 0.0f, 1.0f, 0.0f);
            someView.layer.transform = rotationAndPerspectiveTransform;
            someView.bounds = CGRectMake(0, 0, 200, 200);

            [UIView commitAnimations];
            isUp = NO;
        } else {
            someSubView.hidden = NO; // Show subview
            [UIView beginAnimations:nil context:NULL];

            [UIView setAnimationDuration:0.5];
            [UIView setAnimationCurve:UIViewAnimationCurveEaseOut];
            CATransform3D rotationAndPerspectiveTransform = CATransform3DRotate(someView.layer.transform, 90.0f * M_PI / 180.0f, 0.0f, 1.0f, 0.0f);
            someView.layer.transform = rotationAndPerspectiveTransform;
            someView.bounds = CGRectMake(0, 0, 450, 450);

            [UIView commitAnimations];
            isUp = YES;
        }
    }
}

最后一件事:视图中的所有内容都会显示为镜像,可能不是理想的解决方案,但通过将CGAffineTransform应用于子视图进行镜像可以解决问题:

- (void)viewDidLoad
{
    [super viewDidLoad];
    someSubView.transform = CGAffineTransformMakeScale(-1, 1);
    isUp = NO;
}

对于这个解决方案我迟到了一个月,但我希望它能帮助某人:)

我首先尝试使用animateWithDuration:动画:完成:基于块的API但结果严重滞后(即使没有触摸子视图也没有平滑的第一/第二半动画)。