Mã này hoạt động tốt trên iPhone dưới iOS6 và iOS7:
presentedVC.view.backgroundColor = YOUR_COLOR; // can be with 'alpha'
presentingVC.modalPresentationStyle = UIModalPresentationCurrentContext;
[presentingVC presentViewController:presentedVC animated:YES completion:NULL];
Trong trường hợp này, bạn bỏ lỡ hình ảnh động trượt. Để giữ lại hình ảnh động, bạn vẫn có thể sử dụng tiện ích mở rộng "không thanh lịch" sau:
[presentingVC presentViewController:presentedVC animated:YES completion:^{
[presentedVC dismissViewControllerAnimated:NO completion:^{
presentingVC.modalPresentationStyle = UIModalPresentationCurrentContext;
[presentingVC presentViewController:presentedVC animated:NO completion:NULL];
}];
}];
Nếu PresentingV của chúng tôi được đặt bên trong UINavestionContaptor hoặc UITabbarContoder, bạn cần phải hoạt động với các bộ điều khiển đó như trình bàyVC.
Hơn nữa, trong iOS7, bạn có thể thực hiện UIViewControllerTransitioningDelegate
giao thức chuyển đổi hoạt hình tùy chỉnh . Tất nhiên, trong trường hợp này bạn có thể có được nền trong suốt
@interface ModalViewController : UIViewController <UIViewControllerTransitioningDelegate>
Đầu tiên, trước khi trình bày bạn phải thiết lập modalPresentationStyle
modalViewController.modalPresentationStyle = UIModalPresentationCustom;
Sau đó, bạn phải thực hiện hai phương thức giao thức
- (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;
}
Điều cuối cùng là xác định chuyển đổi tùy chỉnh của bạn trong CustomAnimatedTransitioning
lớp
@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
}
}