自定义segue过渡与完成块&性能

时间:2014-08-21 17:05:20

标签: ios xcode transition segue completion-block

我想在视图控制器之间进行自定义转换,从左到右滑动,就像AppLaucher中页面之间的iOS基本过渡效果一样,但是变暗了。

我在viewControllers之间有一个自定义segue(让我们称之为FirstVC和SecondVC)。为了变暗,我有一个黑色视图,在动画期间淡入(SecondVC比FirstVC更暗)。我有一个类--UIStoryboardSegue的子类 - 用于我的自定义segue,实现了-(void)perform方法。在这个方法中,我已经实现了(有更多细节):

//...Initials frames

UIView *blackView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 568)];
blackView.backgroundColor = [UIColor blackColor];
blackView.alpha = 0;
[UIView animateWithDuration:0.3 animations:^{
blackView.alpha = 0.5;
//...Animations
}
completion:^(BOOL finished){

}];

我确切地知道两个视图控制器位于两个不同的导航视图控制器中。

对于变暗,我想修改转换完成后在SecondVC类中声明的“darkView”属性,以便在转换后存储变暗。

为此,我想做以下其中一个选项(如果其中一个工作我不需要其他选项):

  1. 直接在完成块中访问SecondVC的darkView属性并进行修改

  2. 检测动画何时完成并在此时修改属性,在SecondVC类中实现的方法

  3. 在完成块中写入[dest.view addSubview:whiteView];(“dest”是目标视图控制器),并在SecondVC的其他方法中访问THIS子视图

  4. 我已经为这三种解决方案尝试了很多东西,但我真的很感谢你的帮助。感谢

1 个答案:

答案 0 :(得分:0)

那么如果您实现了自定义segue类,那么获取即将推送到导航堆栈的secondViewController的实例应该很简单。

在执行方法中尝试此操作

FirstViewController *firstVC = self.sourceViewController;
SecondViewController *secondVC = self.destinationViewController;

可能你可以在你的secondVC上声明一个公共UIView属性并访问它,也可能暴露一个方法并在动画完成后调用它。