2015-01-09 4 views
0

UIStoryboardSegueleftToRightSegue이라는 사용자 정의가 있습니다. 이 segue가 트리거 될 때마다 원본보기로 돌아가서 sourceViewControllerviewdidload 메서드가 호출됩니다. 이것은 설정이 상당히 무거 우므로 원하는 것이 아닙니다.맞춤 푸시 segue 후 SourceViewController 유지

UIViewController *sourceViewController = (UIViewController*)[self sourceViewController]; 

CATransition* transition = [CATransition animation]; 
transition.duration = .25; 
transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]; 
transition.type = kCATransitionPush; 
transition.subtype = kCATransitionFromRight; 

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

[sourceViewController.navigationController popViewControllerAnimated:NO]; 

가 어떻게이 sourceViewController을 유지합니까 : 내가 관심있는 사람들을 위해, 다시보기 터지는 사실입니다

#import "LeftToRightPushSegue.h" 
#import "QuartzCore/QuartzCore.h" 

@implementation LeftToRightPushSegue 

-(void)perform { 

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

    CATransition* transition = [CATransition animation]; 
    transition.duration = .25; 
    transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]; 
    transition.type = kCATransitionPush; 
    transition.subtype = kCATransitionFromLeft; 

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

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

} 

:

은 내가 SEGUE을 위해 사용하고 코드?

+0

'UIViewController'의'-viewDidLoad'는 뷰 계층 구조가 펜촉에서부터 또는 프로그램 적으로 메모리로로드 될 때 호출됩니다. 더 많은 코드를 게시하면,'-sourceViewController'를 호출 할 때 문제가 발생할 수 있습니다. – Michael

+0

팝세그를 게시 하시겠습니까? 위의 코드는 모두 푸시를위한 것입니다. – bdv

+0

'[sourceViewController.navigationController popViewControllerAnimated : NO];에 대해 더 많은 코드를 제공 할 수 있습니까? 그것이 어디에서 호출되었고'sourceViewController'에서 포인터를 얻는 방법은 명확하지 않습니다. –

답변

0

가능하면 코드를 init 메소드로 옮깁니다. 그럴 수 없다면 부울 속성을 만듭니다. 즉

@property (nonatomic, strong) BOOL *isInitialised; 



- (void) viewDidLoad 
{ 
    if (!self.isInitialised) 
    { 
     ... 
     self.isInitialised = YES; 
    } 
} 

viewDidLoad의 작업이 수행되면이를 true로 설정합니다. 조금 더 검색하면 더 좋은 패턴이 있습니다. 이것은 작동시키기위한 약간의 빠르고 더러운 방법입니다.

또한 사용자가 직접 볼 수 없도록 메모리를 유지할 수 있습니다.

관련 문제