CATransition в Custom Segue - PullRequest
       5

CATransition в Custom Segue

2 голосов
/ 05 декабря 2011

Мне было интересно, возможно ли использовать CATransition в пользовательском переходе Segue. Я создал свой файл CustomSegueTransition.m и сослался на него в своем пользовательском классе segue, где я хочу, чтобы произошел переход.

Это мой код для файла CustomSegueTransition.m:

#import "CustomSegueTransition.h"
#import "QuartzCore/QuartzCore.h"

@implementation CustomSegueTransition

-(void) perform {

    // set up an animation for the transition the content
    CATransition *animation = [CATransition animation];
    [animation setDuration:0.25];
    [animation setType:kCATransitionPush];
    [animation setSubtype:kCATransitionFromRight];
    [animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]];

    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:0.25];

    [UIView commitAnimations];
}

@end

Он не выдает предупреждений об ошибках, однако переход не будет выполняться при нажатии кнопки, чтобы вызвать переходный переход. Я что-то упустил в коде CATransition или это невозможно?

Спасибо!

Ответы [ 4 ]

1 голос
/ 18 декабря 2011

@ Grant

У меня нет полного ответа для вас, но я заметил, что вы никогда не вызываете новое представление, поэтому нет перехода.Я не знаю, стреляете ли вы в пуш, поп или модал, но вот тип кода, который вам нужно добавить:

UIViewController *src = (UIViewController *) self.sourceViewController;
UIViewController *dst = (UIViewController *) self.destinationViewController;   
[src presentModalViewController:dst animated:YES];

или

    [src presentViewController:<#(UIViewController *)#> animated:<#(BOOL)#> completion:<#^(void)completion#>];

Iполагаю, что есть другие проблемы с настройкой пользовательской анимации, на которые у меня нет ответа, хотя я заинтересован в решении.

0 голосов
/ 04 сентября 2015

импорт каркаса QuartzCore.

- (void)pushViewWithCustomTranstion {
    CATransition* transition = [CATransition animation];
    transition.duration = 0.4f;
    transition.type = kCATransitionMoveIn;
    transition.subtype = kCATransitionFromRight;
    [self.navigationController.view.layer addAnimation:transition
                                                forKey:kCATransition];
    YourDestinataionController *yourVC = [[YourDestinataionController alloc] init];
    [self.navigationController pushViewController:yourVC animated:NO];
}

это простой и легкий код для добавления контроллера вида в контроллер навигации с настраиваемым эффектом перехода.

0 голосов
/ 28 июня 2012

Вот полный код, который работает

-(void)perform {

__block UIViewController *sourceViewController = (UIViewController*)[self sourceViewController];
__block UIViewController *destinationController = (UIViewController*)[self destinationViewController];                    

CATransition* transition = [CATransition animation];
transition.duration = .25;
transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
transition.type = kCATransitionMoveIn; //kCATransitionMoveIn; //, kCATransitionPush, kCATransitionReveal, kCATransitionFade
transition.subtype = kCATransitionFromLeft; //kCATransitionFromLeft, kCATransitionFromRight, kCATransitionFromTop, kCATransitionFromBottom  

[sourceViewController.navigationController.view.layer addAnimation:transition
                                            forKey:kCATransition];

[sourceViewController.navigationController pushViewController:destinationController animated:NO];

 }
0 голосов
/ 19 декабря 2011

Не уверен, что вы пытаетесь, но я нашел проблему.

Вы создали анимацию перехода, но никогда не использовали ее. Вам нужно добавить анимацию на слой вида, который вы хотите анимировать.

Также вам не нужно использовать [UIView beginAnimation] ... [UIView commitAnimation], если вы собираетесь использовать функции CoreAnimation нижнего рычага.

Используйте [CATransaction begin] ... [CATransaction commit], если требуется.

...