我只是弄清楚如何设置一个viewControll
的插入动画[self transitiontoViewController:self.filterController duration:.5 options:UIViewAnimationOptionTransitionNone animations:^{
[self.filterController.view resizeandMovewithRect:CGRectMake(0, self.filterController.view.frame.size.height, 0, 0)];
} completion:^(BOOL finished){
}];
这里,resizeAndMovewithRect只是使用此类别为UIView移动视图
-(void) resizeandMovewithRect:(CGRect)movement
{
CGRect myFrame = self.frame;
CGRect newFrame = CGRectMake(myFrame.origin.x+movement.origin.x, myFrame.origin.y + movement.origin.y, myFrame.size.width + movement.size.width , myFrame.size.height + movement.size.height);
self.frame =newFrame;
}
现在我想做相反的事情。我希望将self.filterController从屏幕上移开来解散。
这样做的一种方法是:
[self transitiontoViewController:self.filterController duration:.5 options:UIViewAnimationOptionTransitionNone animations:^{
[self.filterController.view resizeandMovewithRect:CGRectMake(0, -self.filterController.view.frame.size.height, 0, 0)];
} completion:^(BOOL finished){
}];
如果我这样做,则根本不会绘制动画。
在我看来,self.filterController在动画开始时从superview中删除。这就是为什么没有看到self.filterController发生的事情。所以我这样做
[UIView animateWithDuration:.5 animations:^{
[self.filterController.view resizeandMovewithRect:CGRectMake(0, -self.filterController.view.frame.size.height, 0, 0)];
} completion:^(BOOL finished){
[self transitiontoViewController:self.last2ViewsInTheContainer[0] duration:0 options:UIViewAnimationOptionTransitionNone animations:^{
} completion:nil];
}];
所以我在调用[self transitiontoViewController
之前首先动画起来卷起self.filterController.view但是,如果我这样做,那么当卷起self.filterController.view时,替换它的视图还没有添加到superview。所以没有人看到。
无论如何我应该怎么做?
答案 0 :(得分:0)
我找到了答案。事实证明,直到最后都没有删除任何视图。问题是新的viewController被添加到堆栈的顶部。
所以在添加self.filterController时,事情很简单。当视图在后面时,它已经在前面。
当拔出self.filterController时,那个backView正在隐藏self.filterController。因此,解决方案是简单地将self.filterController读取到superview,我们将看到动画。
最终代码:
[self transitiontoViewController:self.last2ViewsInTheContainer[0] duration:.5 options:UIViewAnimationOptionTransitionNone animations:^{
[self.filterController.view.superview addSubview:self.filterController.view]; //Put the filterControllerView at the front
[self.filterController.view resizeandMovewithRect:CGRectMake(0, -self.filterController.view.frame.size.height, 0, 0)];
} completion:nil];