我有一个名为UIStoryboardSegue
的自定义leftToRightSegue
。每次触发此segue并返回源视图时,都会调用viewdidload
的{{1}}方法。这不是我想要的,因为设置很重。
这是我用于segue的代码:
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];
}
如何保留sourceViewController?
答案 0 :(得分:0)
如果可能,我会尝试将代码移动到init方法。 如果那是不可能的,也许创建一个布尔属性。即
@property (nonatomic, strong) BOOL *isInitialised;
- (void) viewDidLoad
{
if (!self.isInitialised)
{
...
self.isInitialised = YES;
}
}
一旦执行了viewDidLoad中的操作,就将其设置为true。如果你搜索一下,有更好的模式。这是让它运行起来的一种快速而肮脏的方式。
另请注意,您将保留内存中的内容,而不是用户直接看到的内容。