이 코드는 iOS6 및 iOS7의 iPhone에서 제대로 작동합니다.
presentedVC.view.backgroundColor = YOUR_COLOR; // can be with 'alpha'
presentingVC.modalPresentationStyle = UIModalPresentationCurrentContext;
[presentingVC presentViewController:presentedVC animated:YES completion:NULL];
이 경우 슬라이드 온 애니메이션이 누락됩니다. 애니메이션을 유지하려면 다음과 같은 "비 우아한"확장명을 계속 사용할 수 있습니다.
[presentingVC presentViewController:presentedVC animated:YES completion:^{
[presentedVC dismissViewControllerAnimated:NO completion:^{
presentingVC.modalPresentationStyle = UIModalPresentationCurrentContext;
[presentingVC presentViewController:presentedVC animated:NO completion:NULL];
}];
}];
presentingV가 UINavigationController 또는 UITabbarController 내부에있는 경우 presentingVC로 해당 컨트롤러와 함께 작동해야합니다.
또한 iOS7에서는 사용자 정의 전환 애니메이션 적용 UIViewControllerTransitioningDelegate
프로토콜을 구현할 수 있습니다 . 물론이 경우 투명한 배경을 얻을 수 있습니다
@interface ModalViewController : UIViewController <UIViewControllerTransitioningDelegate>
먼저, 발표하기 전에 설정해야합니다 modalPresentationStyle
modalViewController.modalPresentationStyle = UIModalPresentationCustom;
그런 다음 두 가지 프로토콜 메소드를 구현해야합니다.
- (id<UIViewControllerAnimatedTransitioning>)animationControllerForPresentedController:(UIViewController *)presented presentingController:(UIViewController *)presenting sourceController:(UIViewController *)source
{
CustomAnimatedTransitioning *transitioning = [CustomAnimatedTransitioning new];
transitioning.presenting = YES;
return transitioning;
}
- (id<UIViewControllerAnimatedTransitioning>)animationControllerForDismissedController:(UIViewController *)dismissed
{
CustomAnimatedTransitioning * transitioning = [CustomAnimatedTransitioning new];
transitioning.presenting = NO;
return transitioning;
}
마지막으로 CustomAnimatedTransitioning
수업 에서 사용자 정의 전환을 정의하는 것입니다
@interface CustomAnimatedTransitioning : NSObject <UIViewControllerAnimatedTransitioning>
@property (nonatomic) BOOL presenting;
@end
@implementation CurrentContextTransitionAnimator
- (NSTimeInterval)transitionDuration:(id <UIViewControllerContextTransitioning>)transitionContext
{
return 0.25;
}
- (void)animateTransition:(id <UIViewControllerContextTransitioning>)transitionContext
{
UIViewController *fromViewController = [transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey];
UIViewController *toViewController = [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey];
if (self.presenting) {
// custom presenting animation
}
else {
// custom dismissing animation
}
}