「CoverVertical」モーダルセグエを模倣するUIStoryboardSegueを作成しようとしていますが、ビューを「Uncover」にして、セグエが一緒に自然に見えるようにしています。これが私のUIStoryboardSegue子クラスです。
//RetreatVertical.m
#import "RetreatVertical.h"
@implementation RetreatVertical
-(void)perform {
UIView *oldView = [self.sourceViewController view];
UIView *newView = [self.destinationViewController view];
[oldView.window insertSubview:newView belowSubview:oldView];
[UIView animateWithDuration:0.3 animations:^{
oldView.center = CGPointMake(oldView.center.x, oldView.center.y + oldView.frame.size.height); }
completion:^(BOOL finished){ [oldView removeFromSuperview]; }
];
}
@end
ユーザーがボタンをタップすると、UIViewControllerがモーダルセグエ「CoverVertical」を使用してスライドしてフォーカスを合わせます。ユーザーが新しいUIViewControllerのボタンをタップすると、そのUIViewControllerが下にスライドして、古いUIViewControllerが表示されます(カスタムセグエ「RetreatVertical」を使用)。それはすべて正常に機能しますが、両方のアニメーションが完了した後に他のボタンまたはインターフェイス要素をタップすると、アプリが「EXC_BAD_ACCESS」でクラッシュします。理由はわかりませんが、過去1時間の検索では何も思いつきませんでした。
ありがとう!
編集: なぜこの戦略が機能しないのですか?
- (void) perform {
UIView *sourceView = [self.sourceViewController view];
UIView *destView = [self.destinationViewController view];
[[self.sourceViewController superview] insertSubview:destView belowSubview:sourceView];
[UIView animateWithDuration:0.3 animations:^{
sourceView.center = CGPointMake(sourceView.center.x, sourceView.center.y + sourceView.frame.size.height); }
completion:^(BOOL finished){ [sourceView removeFromSuperview]; }
];
}