カードアプリにいくつかの簡単なアニメーションを実装しています。
これまでのところすべてがうまく機能していますが、完了したと言える前に、修正する必要のある詳細がもう1つあります。
シナリオは非常に単純です。
セグエがモーダルに新しい画面を表示する前に、3枚のカードがアニメーションで画面を終了する必要があります。
これまで、彼はアニメーションを実行して新しいビューをロードしましたが、私が理解できなかった詳細は、「アニメーションが終了するまで待ってから、新しいビューを表示する」ことです。
これが私がやっている方法です:
1)この方法で終了アニメーションを設定します
- (void)performExitAnimationWithCompletionBlock:(void (^)(BOOL))block
{
[UIView animateWithDuration:0.1f
delay:0.0f
options:UIViewAnimationOptionCurveEaseOut
animations:^
{
self.optionOneFront.center = self.optionOneBack.center = self.optionTwoFront.center;
self.optionOneFront.transform = self.optionOneBack.transform = self.optionTwoFront.transform;
self.optionThreeFront.center = self.optionThreeBack.center = self.optionTwoFront.center;
self.optionThreeFront.transform = self.optionThreeBack.transform = self.optionTwoFront.transform;
}
completion:^(BOOL finished)
{
CGPoint point = CGPointMake(self.optionTwoFront.center.x, self.view.frame.size.height * -2.0f);
[UIView animateWithDuration:1.0f
delay:0.0f
options:UIViewAnimationOptionCurveEaseOut
animations:^
{
self.optionOneFront.center = point;
self.optionOneBack.center = point;
self.optionTwoFront.center = point;
self.optionTwoBack.center = point;
self.optionThreeFront.center = point;
self.optionThreeBack.center = point;
}
completion:block];
}];
}
2)「AddOptions」VCを提示する前に、アニメーション内でセグエコードをラップしてみてください
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
[self performExitAnimationWithCompletionBlock:^(BOOL finished)
{
// Executes the following "if" statement if the user wants to add new options
if ([segue.identifier isEqualToString:@"AddOptions"])
{
UINavigationController *navigationController = segue.destinationViewController;
OptionsViewController *controller = (OptionsViewController *)navigationController.topViewController;
controller.delegate = self;
}
}];
}
前に言ったように、すべてが機能しますが、アニメーションが終了する前にモーダルウィンドウが表示されます。
私が欠けているものについて何か考えはありますか?