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

iOS 視圖從屏幕頂部滑入動畫的正確實現:frame 動畫而非 CATransition

     編輯:程式設計綜合問答

問題代碼分析


CATransition *transition = [CATransition animation];
transition.type = kCATransitionFromTop;
[bGView.layer addAnimation:transition forKey:nil];
[self.view addSubview:bGView]; // 動畫加在添加前,且 bGView 初始 frame 在可視區內,無滑入效果

CATransition 適用於**層內容變化**(如圖片切換),不適用於**視圖進場/退場**位移動畫。

正確做法:frame 動畫 + 關鍵幂


// 1. 設置初始 frame:在屏幕頂部可視區外
bGView.frame = CGRectMake(0, -150, 320, 100); // y = -height

// 2. 先添加到視圖層級
[self.view addSubview:bGView];

// 3. 執行 frame 動畫滑入
[UIView animateWithDuration:0.5
                      delay:0
                    options:UIViewAnimationOptionCurveEaseOut
                 animations:^{
                     bGView.frame = CGRectMake(0, 0, 320, 100); // 目標位置
                 }
                 completion:^(BOOL finished) {
                     // 動畫結束回調
                 }];

關鍵點

  1. 初始 frame 在屏外:y = -height 或 -view.frame.size.height。
  2. 先 addSubview 再動畫:視圖必須在層級樹中,frame 動畫才會渲染。
  3. 使用 UIView 動畫塊:自動處理 Core Animation 事務,代碼簡潔。

進階:彈性動畫 (iOS 7+)


[UIView animateWithDuration:0.6
                      delay:0
     usingSpringWithDamping:0.7
      initialSpringVelocity:0.5
                    options:0
                 animations:^{
                     bGView.frame = CGRectMake(0, 0, 320, 100);
                 }
                 completion:nil];

Swift 版本


bGView.frame = CGRect(x: 0, y: -150, width: 320, height: 100)
view.addSubview(bGView)

UIView.animate(withDuration: 0.5, delay: 0, options: .curveEaseOut, animations: {
    bGView.frame = CGRect(x: 0, y: 0, width: 320, height: 100)
}, completion: nil)

總結

視圖進場滑入動畫:**設置屏外初始 frame → addSubview → UIView.animate 修改 frame 到目標位置**。不要用 CATransition 做位移動畫,它是為內容切換設計的。

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