анимированный всплывающий вид, похожий на один в папке музыки Ipad - PullRequest
1 голос
/ 13 апреля 2011

Я хотел бы знать, как называется функциональность, которая используется в папке «Музыка» Ipad, где при щелчке папки альбома в анимированном виде всплывают сведения об этом альбоме.

Iпопытался использовать presentModelViewController, но его функциональность отличается.

Было бы здорово, если бы кто-то мог мне помочь.

Ответы [ 2 ]

1 голос
/ 05 июня 2011

Мне только что удалось получить что-то.как это работает с использованием CoreAnimation / QuartzCore Framework ... убедитесь, что

#import <QuartzCore/QuartzCore.h>

, когда вы хотите анимировать, используйте CATransform3D и плохо документированное свойство CATransform3D.m34.это сделает первую половину анимации (при условии 200x200 <-> 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 (первая половина анионирования не зависит от флага isUp!)

- (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: animations: завершение: блочный API, но оказалось, что оно сильно запаздываетанимация первой / второй половины даже без трогательных подпредставлений).

1 голос
/ 13 апреля 2011

На iPad у вас есть несколько различных опций в отношении анимации контроллера модального вида, вы можете найти их здесь: UIModalTransitionStyle .

Однако, если вы имеете в виду эффект «зуммирования и переворачивания» на альбоме, я почти уверен, что это личное поведение, поэтому вам нужно разработать его самостоятельно… вы могли бысделать это с помощью Core Graphics / Quartz.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...