CATransition *transition = [CATransition animation];
transition.type = kCATransitionFromTop;
[bGView.layer addAnimation:transition forKey:nil];
[self.view addSubview:bGView]; // 動畫加在添加前,且 bGView 初始 frame 在可視區內,無滑入效果
CATransition 適用於**層內容變化**(如圖片切換),不適用於**視圖進場/退場**位移動畫。
// 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) {
// 動畫結束回調
}];
y = -height 或 -view.frame.size.height。
[UIView animateWithDuration:0.6
delay:0
usingSpringWithDamping:0.7
initialSpringVelocity:0.5
options:0
animations:^{
bGView.frame = CGRectMake(0, 0, 320, 100);
}
completion:nil];
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 做位移動畫,它是為內容切換設計的。