1つの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を画面外に移動して閉じてほしい。
そのための1つの方法は次のとおりです。
[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がスーパービューから削除されているように見えます。そのため、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がロールアップされるまでに、それを置き換えるビューはまだスーパービューに追加されていません。見えないように。
とにかくどうすればいいですか?