2013-12-03 3 views
1

Я пытаюсь добиться такого же эффекта, как в приложении для карт (http://www.youtube.com/watch?v=aWjX_qufmc0) для открытия содержимого внутри (анимация типа открывания горизонтальной приветствия: https://store.marathonpress.com/image/cache/data/store_381/Previews/Press-Printed-Card-Folded-5x7-H-C-500x500.jpg). Я пробовал его с помощью CABasicAnimation, но не получил доступ, может ли кто-нибудь помочь мне добиться такого же эффекта анимации.Анимация как открытки app iphone

Я пытаюсь так:

- (void)loadInsideMessageView { 

    [UIView transitionWithView:backgroundView 
         duration:1.0 
         options:UIViewAnimationOptionTransitionFlipFromBottom //any animation 
        animations:^ { 
         insideView.frame = CGRectMake(0, 40, 568, 280); 
         [backgroundView addSubview:insideView]; 
        } 
        completion:nil]; 
} 

Спасибо.

ответ

2

Для создания необходимой анимации вы можете использовать Core Animation Function.

Создайте новый проект Single View Application и введите код ниже в ViewController.m, чтобы узнать, как все работает.

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    [[self view] setBackgroundColor:[UIColor grayColor]]; 

    //create frame for 2 test views 
    CGRect frame = CGRectMake(50.0, 100.0 , 200.0 ,100.0); 

    //lower view 
    UIView *insideViev = [[UIView alloc] initWithFrame: frame]; 
    [insideViev setBackgroundColor:[UIColor redColor]]; 

    //upper view 
    UIView *pageView = [[UIView alloc] initWithFrame:frame]; 
    [pageView setBackgroundColor:[UIColor greenColor]]; 

    [[self view] addSubview:insideViev]; 
    [[self view] addSubview:pageView]; 

    //get layer of upper view and set needed property 
    CALayer *viewLayer = [pageView layer]; 
    [viewLayer setAnchorPoint:(CGPoint){0.5 , 0.0}]; 
    [viewLayer setFrame:frame]; 

    //create perspective 
    CATransform3D mt = CATransform3DIdentity; 
    mt.m34 = 1.0/-500.; 

    //create rotation 
    CATransform3D open = CATransform3DMakeRotation(3 * M_PI_4, 1, 0, 0); 

    //create result transform 
    CATransform3D openTransform = CATransform3DConcat(open, mt); 

    [UIView animateWithDuration:3.0 animations:^ 
    { 
//close animation 
[viewLayer setTransform:openTransform]; 
    } completion:^(BOOL finished) 
    { 
    [UIView animateWithDuration:3.0 animations:^ 
     { 
     //close animation 
     [viewLayer setTransform:CATransform3DIdentity]; 
     }]; 
    }]; 
} 
+0

Спасибо @ruslan, его отлично. Но у меня есть два вопроса: (1). Я хочу, чтобы анимация проходила на верхнюю серую навигационную панель, поскольку теперь она появляется поверх нее. (2). Также преобразованное изображение имеет на нем изображение, может ли оно быть простым белым? он не должен показывать тень изображения, можно ли изменить его альфа или какой-либо другой подход? Пожалуйста, см. Скриншот! [Введите описание изображения здесь] (http://i.stack.imgur.com/ONhWB.png) – york

+0

Мне удалось сделать первый выпуск, добавив subview под верхним видом [backgroundView insertSubview: selectedTemplateImgView belowSubview: navBar]; но все же нуждаются в помощи для второго решения. – york

+0

Все, что я могу думать о 2-й проблеме - вы можете добавить слой (с помощью UIView UUL, содержащий 1 слой, но он может содержать более 1 слоя) под слоем с изображением и оживить оба слоя. –