自分でカスタム alertView (iOS7 以降用) を作成しようとしていますが、alertView のプレゼンテーションに苦労しています。
黒い背景 (アルファが 0.25f に設定) の UIViewController と、サブビューとしての alertView があります。
alertView を表示したい場合は、viewController をモーダルに表示します。
-(void) show
{
UIWindow* window = [[UIApplication sharedApplication] keyWindow];
self.modalTransitionStyle = UIModalPresentationCustom;
self.transitioningDelegate = self;
[window.rootViewController presentViewController:self animated:YES completion:nil];
}
そして、ここに私のアニメーターオブジェクトがあります:
-(NSTimeInterval) transitionDuration:(id<UIViewControllerContextTransitioning>)transitionContext
{
NSLog(@"%s",__PRETTY_FUNCTION__);
return 2;
}
-(void) animateTransition:(id<UIViewControllerContextTransitioning>)transitionContext
{
NSLog(@"%s",__PRETTY_FUNCTION__);
UIView* toView = [transitionContext viewForKey:UITransitionContextToViewKey];
toView.alpha = 0;
UIView* container = [transitionContext containerView];
[container addSubview:toView];
[UIView animateWithDuration:[self transitionDuration:transitionContext] animations:^{
toView.alpha = 0.5;
} completion:^(BOOL finished) {
[transitionContext completeTransition:YES];
}];
}
問題は、モーダル VC がバックグラウンドで表示中の VC と一緒にフェードアウトすることですが、アニメーションが終了すると、表示中の VC がバックグラウンドから削除されます。
代わりに呼び出す[transitionContext completeTransition:YES];
と、プレゼンテーション VC はバックグラウンドにありますが、モーダル VC はアニメーションの最後に削除されるため、'NO' を送信するとコンテキストがプレゼンテーションをキャンセルすると思います。
スナップショットを作成してモーダル VC のビューの背景として設定することなく、提示する VC をバックグラウンドで維持する方法はありますか?