首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

iOS presentModalView 動畫風格:使用 modalTransitionStyle

     編輯:程式設計綜合問答

問題現象

想用 presentModalViewController 彈出子視圖,並指定翻轉/溶解等轉場動畫,但在 CATransition 找不到對應常數。

正確做法:設定 modalTransitionStyle

被呈現的視圖控制器擁有 modalTransitionStyle 屬性,四種內建風格:

常數效果適用場景
UIModalTransitionStyleCoverVertical從底部滑入(預設)通用模態頁面
UIModalTransitionStyleFlipHorizontal水平翻轉設定頁、卡片翻面
UIModalTransitionStyleCrossDissolve交叉淡入淡出輕量提示、圖片預覽
UIModalTransitionStylePartialCurl頁面翻角地圖/書本翻頁隱喻

程式碼範例

// 呈現端
SecondViewController *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"Second"];
vc.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;  // 設定動畫風格
vc.modalPresentationStyle = UIModalPresentationFullScreen;  // iOS 13+ 預設為頁面捲動,需指定全螢幕
[self presentViewController:vc animated:YES completion:nil];

補充:自定義轉場 (iOS 7+)

內建風格不足時,實作 UIViewControllerTransitioningDelegate 回傳自定義 UIViewControllerAnimatedTransitioning:

// 呈現端
vc.transitioningDelegate = self;  // 實作 UIViewControllerTransitioningDelegate
vc.modalPresentationStyle = UIModalPresentationCustom;

// Delegate 方法
- (id)animationControllerForPresentedController:(UIViewController *)presented
                                                                  presentingController:(UIViewController *)presenting
                                                                      sourceController:(UIViewController *)source {
    return [[CustomTransitionAnimator alloc] init];
}

常見誤區

  • 在呈現者設定 modalTransitionStyle:必須設定在被呈現的 VC 上。
  • iOS 13+ 預設 UIModalPresentationPageSheet:若需全螢幕覆蓋,必須額外設定 modalPresentationStyle = UIModalPresentationFullScreen。
  • 混淆 CATransition 與 modalTransitionStyle:前者用於 Layer 動畫,後者是 VC 轉場高層 API。

善用 modalTransitionStyle 四種內建風格可滿足 90% 場景,複雜需求再投入自定義轉場架構。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved