【Swift学习笔记-《PRODUCT》读书记录-实现自定义转场动画】

iOS默认的push动画是把即将展示的控制器从右边推过来。有时我们想实现类似PPT中的一些动画,这时候就需要自定义转场动画了。如下图我们想实现一个淡出并且放大的过场动画,在退出时是一个淡出缩小的动画。

首先需要自定义一个类DiaryAnimator.swift遵守 UIViewControllerAnimatedTransitioning 协议,然后实现它,代码如下:

import UIKitclass DiaryAnimator: NSObject, UIViewControllerAnimatedTransitioning {// 用于接受外界的operationvar operation:UINavigationControllerOperation!// 返回动画时间func transitionDuration(using transitionContext: UIViewControllerContextTransitioning?) -> TimeInterval {return 0.4}// 要设置的动画//UIKit calls this method when presenting or dismissing a view controller. Use this method to configure the animations associated with your custom transition. You can use view-based animations or Core Animation to configure your animations.func animateTransition(using transitionContext: UIViewControllerContextTransitioning) {let containerview = transitionContext.containerViewlet fromVC = transitionContext.viewController(forKey: UITransitionContextViewControllerKey.from)let fromView = fromVC!.viewlet toVC = transitionContext.viewController(forKey: UITransitionContextViewControllerKey.to)let toView = toVC?.view// 设置新场景透明度toView?.alpha = 0.0// 设置初始值if operation == UINavigationControllerOperation.pop {fromView?.transform = CGAffineTransform(scaleX: 1.0, y: 1.0)}else{toView?.transform = CGAffineTransform(scaleX: 0.3, y: 0.3)}containerview.insertSubview(toView!, aboveSubview: fromView!)UIView.animate(withDuration: transitionDuration(using: transitionContext), delay: 0, options: UIViewAnimationOptions.curveEaseInOut, animations: {if self.operation ==  UINavigationControllerOperation.pop {// 放大要转出的场景fromView?.transform = CGAffineTransform(scaleX: 3.3,y: 3.3)} else {// 设置新场景为原始大小toView?.transform = CGAffineTransform(scaleX: 1.0,y: 1.0)}toView?.alpha = 1.0},completion: { finished intransitionContext.completeTransition(true)})}}

 自定义好动画后,在要使用的控制器中实现 UINavigationControllerDelegate 协议的 optional func navigationController(_ navigationController: UINavigationController, animationControllerFor operation: UINavigationControllerOperation, from fromVC: UIViewController, to toVC: UIViewController) -> UIViewControllerAnimatedTransitioning? 方法,返回自定义的动画即可

extension HomeYearController : UINavigationControllerDelegate
{func navigationController(_ navigationController: UINavigationController, animationControllerFor operation: UINavigationControllerOperation, from fromVC: UIViewController, to toVC: UIViewController) -> UIViewControllerAnimatedTransitioning? {let animate = DiaryAnimator()animate.operation = operationreturn animate}
}

 



转载于:https://www.cnblogs.com/heyode/p/6513581.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/269878.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【JZOJ3598】【CQOI2014】数三角形

Mission 对于100%的数据1<m,n<1000 Solution 鬼题&#xff0c;ansC3(n∗m)−Ans&#xff0c;其中Ans表示三点共线的数目&#xff1b; 枚举最长边的向量(x,y)&#xff0c;容易算出贡献及个数。 Code #include<iostream> #include<stdio.h> #include<algor…

NSTimer定时器进阶——详细介绍,循环引用分析与解决

引言 定时器&#xff1a;A timer waits until a certain time interval has elapsed and then fires, sending a specified message to a target object. 翻译如下&#xff1a;在固定的时间间隔被触发&#xff0c;然后给指定目标发送消息。总结为三要素吧&#xff1a;时间间隔、…

HTML - 超文本标记语言 (Hyper Text Markup Language)

HTML - 超文本标记语言 (Hyper Text Markup Language) HTML是建设网站/网页制作主要语言。 HTML是一种易于学习的标记语言。 HTML使用像 <p> 尖括号内标记标签来定义网页的内容&#xff1a; HTML 实例 <html><body><h1>My First Heading</h1><…

AOP切入同类调用方法不起作用,AopContext.currentProxy()帮你解决这个坑

原来在springAOP的用法中&#xff0c;只有代理的类才会被切入&#xff0c;我们在controller层调用service的方法的时候&#xff0c;是可以被切入的&#xff0c;但是如果我们在service层 A方法中&#xff0c;调用B方法&#xff0c;切点切的是B方法&#xff0c;那么这时候是不会切…

AopContext.currentProxy();为什么能获取到代理对象

在同一个类中&#xff0c;非事务方法A调用事务方法B&#xff0c;事务失效&#xff0c;得采用AopContext.currentProxy().xx()来进行调用&#xff0c;事务才能生效。 B方法被A调用&#xff0c;对B方法的切入失效&#xff0c;但加上AopContext.currentProxy()创建了代理类&#x…

@Async注解导致循环依赖,BeanCurrentlyInCreationException异常

使用Async异步注解导致该Bean在循环依赖时启动报BeanCurrentlyInCreationException异常的根本原因分析&#xff0c;以及提供解决方案 今天在自己项目中使用Async的时候&#xff0c;碰到了一个问题&#xff1a;Spring循环依赖&#xff08;circular reference&#xff09;问题。 …

人工智能:图像数字化相关的知识介绍

❤️作者主页&#xff1a;IT技术分享社区 ❤️作者简介&#xff1a;大家好,我是IT技术分享社区的博主&#xff0c;从事C#、Java开发九年&#xff0c;对数据库、C#、Java、前端、运维、电脑技巧等经验丰富。 ❤️个人荣誉&#xff1a; 数据库领域优质创作者&#x1f3c6;&#x…

《深入理解Java虚拟机》读书笔记

堆分配参数&#xff1a; -XX:PrintGC 使用该参数&#xff0c;虚拟机启动后&#xff0c;只要遇到GC就会打印日志&#xff1b; -XX&#xff1a;UseSerialGC 配置串行回收器&#xff1b; -XX&#xff1a;PrintGCDeltails 可以查看详细信息&#xff0c;包括各个区的情况 -Xms&#…

线程可见性和关键字volatile

线程可见性 可以看到程序变量running没volatile是死循环 加了volatile成功输出 public class VolitaleTest {private static volatile boolean running true;public static void main(String[] args) {Thread thread new Thread(() ->{long i 0L;while (running){i;}Sys…

每秒钟承载600万订单级别的无锁并行计算框架 Disruptor学习

1.来源 Disruptor是英国外汇交易公司LMAX开发的一个高性能队列&#xff0c;研发的初衷是解决内部的内存队列的延迟问题&#xff0c;而不是分布式队列。基于Disruptor开发的系统单线程能支撑每秒600万订单&#xff0c;2010年在QCon演讲后&#xff0c;获得了业界关注。 2.应用背…

logisim输出变成红色的e_新车实拍解析 福特Mustang Mach-E亮点实拍图解

福特Mustang Mach-E新车主要针对造型设计对外进行了首次亮相发布&#xff0c;对新车内饰以及具体新车方面的数据信息暂未公布。如果消费者想要了解这款新车&#xff0c;大家可以继续关注《杨总继续观察》带来这款新车的详细报道。新车在设计上可以看作是一款福特野马的电动跨界…

castle windsor学习----- Services and Components 两者的定义

转载于:https://www.cnblogs.com/lanpingwang/p/6534208.html

html5 接收蓝牙广播_蓝牙定位技术浅析(化工厂应用)

蓝牙定位基于RSSI(Received Signal Strength Indication&#xff0c;信号场强指示)定位原理。根据定位端的不同&#xff0c;蓝牙定位方式分为网络侧定位和终端侧定位。由于蓝牙由于是近场通信其定位精度取决于点位的部署密度&#xff0c;一般会设计成7-8米一个定位基站&#xf…

catia如何整列加工_”模具加工“最全面的诠释,你真的都懂了吗?

1定义模具加工(Mold Making)是指成型和制坯工具的加工&#xff0c;此外还包括剪切模和模切模具。通常情况下&#xff0c;模具有上模和下模两部分组成。将钢板放置在上下模之间&#xff0c;在压力机的作用下实现材料的成型&#xff0c;当压力机打开时&#xff0c;就会获得由模具…