实现一个复杂动画的界面转场(Swift)

本文详细介绍了如何使用Swift实现界面转场动画,包括模态展示和NavigationController的自定义动画,通过定义Animator遵循协议实现动画效果。文章还探讨了转场原理,截图添加高斯模糊的技术,以及Mask动画的实现,提供了完整的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

效果图

项目地址:ImageMaskTransition


转场原理

对于模态展示(Modal)

iOS 8之后,可以通过设置ViewController的转场代理

transitioningDelegate

这个转场代理是一个协议类型UIViewControllerTransitioningDelegate.由于我们是非交互式转场,所以只需要实现协议的两个方法即可

// MARK: - UIViewControllerTransitioningDelegate -
func animationControllerForPresentedController(presented: UIViewController, presentingController presenting: UIViewController, sourceController source: UIViewController) -> UIViewControllerAnimatedTransitioning? {
   //这里返回present的动画
}
func animationControllerForDismissedController(dismissed: UIViewController) -> UIViewControllerAnimatedTransitioning? {
    //这里返回dismiss的动
 }

对于NavigationController来说,则可以设置NavigationController的delegate来返回自定义的动画。

navigationController.delegate

这里的delegateUINavigationControllerDelegate类型,在不考虑交互式转场的情况下,我们只需要实现以下方法即可

//返回动画
func navigationController(navigationController: UINavigationController, animationControllerForOperation operation: UINavigationControllerOperation, fromViewController fromVC: UIViewController, toViewController toVC: UIViewController) -> UIViewControllerAnimatedTransitioning? {
    switch operation {
    case .Pop:
       //返回Pop时候
    case .Push:
        //返回Push时候的动画
    default:
         return nil
    }
}

细心的朋友应该发现了,不管是模态还是Push,都是返回一个UIViewControllerAnimatedTransitioning协议类型的对象


通用的Animator

定义一个类,让其遵循UIViewControllerAnimatedTransitioning协议,来实现实际的动画,

class ImageMaskAnimator: NSObject,UIViewControllerAnimatedTransitioning {}

由于实现了UIViewControllerAnimatedTransitioning协议,所以要提供两个方法

func transitionDuration(transitionContext: UIViewControllerContextTransitioning?) -> NSTimeInterval {
  //这里返回动画的时间
}

func 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值