รหัสนี้ใช้งานได้ดีบน iPhone ภายใต้ iOS6 และ iOS7:
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 คุณจำเป็นต้องใช้งานร่วมกับคอนโทรลเลอร์ดังกล่าวเพื่อนำเสนอ VC
นอกจากนี้ใน 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
}
}