You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用UIView.animate替代CATransition动画?

用UIView API替代CATransition实现push动画并结合其他动画

替代原CATransition的UIView.transition代码

原CATransition实现的是从顶部push的文本切换动画,用UIView.transition可以完全复刻,代码如下:

UIView.transition(with: textLabel, 
                  duration: 0.25, 
                  options: [.transitionPush, .transitionFromTop, .curveEaseInOut], 
                  animations: {
    // 必须在这个闭包里修改textLabel的内容(比如文本),过渡动画才会生效
    self.textLabel.text = "你的新文本内容"
}, completion: nil)

参数对应关系:

  • duration: 0.25:和原动画时长一致
  • .transitionPush:对应原animation.type = .push
  • .transitionFromTop:对应原animation.subtype = .fromTop
  • .curveEaseInOut:对应原timingFunction = .easeInEaseOut

和其他动画结合的方法

如果你需要同时执行这个push过渡动画和其他属性动画(比如透明度、位置变化),可以通过以下两种方式实现:

方式1:同步执行两个动画块

直接同时调用UIView.animate(处理属性动画)和UIView.transition(处理过渡动画),系统会自动同步它们的动画进度:

// 执行其他属性动画(比如透明度变化)
UIView.animate(withDuration: 0.25, options: .curveEaseInOut) {
    self.textLabel.alpha = 0.7
    // 还可以添加其他属性修改,比如frame、transform等
}

// 同步执行push过渡动画
UIView.transition(with: textLabel, 
                  duration: 0.25, 
                  options: [.transitionPush, .transitionFromTop, .curveEaseInOut], 
                  animations: {
    self.textLabel.text = "新文本"
}, completion: nil)

方式2:用CATransaction统一控制动画

如果需要更精确的同步(比如统一设置延迟、动画曲线),可以用CATransaction包裹两个动画:

CATransaction.begin()
CATransaction.setAnimationDuration(0.25)
CATransaction.setAnimationTimingFunction(CAMediaTimingFunction(name: .easeInEaseOut))

// 属性动画
UIView.animate(withDuration: 0.25) {
    self.textLabel.transform = CGAffineTransform(scaleX: 1.05, y: 1.05)
}

// 过渡动画
UIView.transition(with: textLabel, options: [.transitionPush, .transitionFromTop]) {
    self.textLabel.text = "新文本"
}

CATransaction.commit()

注意事项

你之前用UIView.transition没效果,大概率是没在animations闭包里修改textLabel的内容——过渡动画需要伴随视图内容的变化才会触发,这和CATransition需要在添加动画后修改内容的逻辑一致。

内容的提问来源于stack exchange,提问作者Tywin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 13:15:40