转场动画实现方法及装置与流程

文档序号:13164119阅读:301来源:国知局
转场动画实现方法及装置与流程

本申请涉及互联网技术领域,尤其涉及一种转场动画实现方法及装置。



背景技术:

目前,几乎所有的智能终端都会涉及用户界面的切换。而且随着软硬件技术的快速发展,用户界面的切换效果越来越丰富多彩。例如,在ios操作系统中,提供了几种常用的转场动画效果,如横向推入、渐隐、翻页等效果。但是,这些效果并不能完全覆盖日常开发中的转场需求,因此需要能够实现自定义转场动画的能力。

在模型-视图-控制器(model-view-controller,mvc)架构中,开发人员可以通过该架构中的代理功能自定义转场动画,使用户界面在变化时具有更加丰富的动态效果。但是,在这种实现自定义转场动画的方案中,转场动画和业务本身高度耦合,实现一个转场动画的时间成本较高。



技术实现要素:

本申请的多个方面提供一种转场动画实现方法及装置,可以将转场动画与业务本身解耦,降低实现转场动画的时间成本。

本申请实施例提供一种转场动画实现方法,包括:

当接收到从第一页面切换至第二页面的指令时,将所述第二页面对应的视图控制器压入ui导航控制器的栈顶;

判断所述第二页面对应的视图控制器是否重写了预先在父类视图控制器中创建的转场动画配置对象创建方法;

若判断结果为是,利用所述重写后的转场动画配置对象创建方法中定义的转场动画配置属性,创建转场动画执行对象;

将所述转场动画执行对象设置为所述ui导航控制器的代理对象;

在确定当前页面为所述第一页面时,触发所述代理对象根据所述转场动画配置属性,生成从所述第一页面切换至所述第二页面过程中的转场动画。

在一可选实施方式中,所述转场动画配置属性包括:整场动画的执行时长、整场动画对应的动画元素集合以及所述动画元素集合中每个动画元素的动画属性;

触发所述代理对象根据所述转场动画配置属性,生成从所述第一页面切换至所述第二页面过程中的转场动画,包括:

在所述整场动画的执行时长内,按照每个动画元素的动画属性,依次动作每个动画元素,以生成从所述第一页面切换至所述第二页面过程中的转场动画。

在一可选实施方式中,在所述整场动画的执行时长内,按照每个动画元素的动画属性,依次动作每个动画元素,以生成从所述第一页面切换至所述第二页面过程中的转场动画,包括:

根据所述整场动画的执行时长,创建一个定时器;

按照所述定时器的定时周期,周期性地检测所述动画元素集合中是否有动画元素需要执行动画;

当检测到有动画元素需要执行动画时,按照所述需要执行动画的动画元素的动画属性,动作所述需要执行动画的动画元素;

当所述动画元素集合中的所有动画元素都执行动画后,释放内存。

在一可选实施方式中,按照所述需要执行动画的动画元素的动画属性,动作所述需要执行动画的动画元素之前,所述方法还包括:

根据所述需要执行动画的元素的动画属性中的截屏范围,从所述第二页面中截取相应图像,作为所述需要执行动画的动画元素。

在一可选实施方式中,所述方法还包括:

预先在所述父类视图控制器中添加所述转场动画配置对象创建方法,并定义返回所述转场动画配置对象创建方法的方法;

在所述转场动画配置对象创建方法中定义转场动画的配置类,所述转场动画的配置类包括多个动画项,每个动画项用于定义一个转场动画的配置属性。

在一可选实施方式中,在确定当前页面为所述第一页面之前,所述方法还包括:

使用运行时技术中的关联对象,将所述转场动画执行对象绑定到所述第二页面对应的视图控制器。

在一可选实施方式中,所述方法还包括:

当接收到从所述第二页面切换至所述第一页面的指令时,将所述第二页面对应的视图控制器弹出所述ui导航控制器的栈顶;

获取所述第二页面对应的视图控制器绑定的所述转场动画执行对象;

将所述转场动画执行对象设置为所述ui导航控制器的代理对象;

在确定当前页面为所述第二页面时,触发所述代理对象根据所述转场动画配置属性,生成从所述第二页面切换至所述第一页面过程中的转场动画。

在一可选实施方式中,在将所述转场动画执行对象设置为所述ui导航控制器的代理对象之前,所述方法还包括:

修改所述转场动画配置属性;

触发所述代理对象根据所述转场动画配置属性,生成从所述第二页面切换至所述第一页面过程中的转场动画,包括:

触发所述代理对象根据所述修改后的转场动画配置属性,生成从所述第二页面切换至所述第一页面过程中的转场动画。

本申请实施例还提供一种转场动画实现装置,包括:

压栈模块,用于当接收到从第一页面切换至第二页面的指令时,将所述第二页面对应的视图控制器压入ui导航控制器的栈顶;

判断模块,用于判断所述第二页面对应的视图控制器是否重写了预先在父类视图控制器中创建的转场动画配置对象创建方法;

创建模块,用于在所述判断模块的判断结果为是时,利用所述重写后的转场动画配置对象创建方法中定义的转场动画配置属性,创建转场动画执行对象;

设置模块,用于将所述转场动画执行对象设置为所述ui导航控制器的代理对象;

生成模块,用于在确定当前页面为所述第一页面时,触发所述代理对象根据所述转场动画配置属性,生成从所述第一页面切换至所述第二页面过程中的转场动画。

在一可选实施方式中,所述转场动画配置属性包括:整场动画的执行时长、整场动画对应的动画元素集合以及所述动画元素集合中每个动画元素的动画属性;

所述生成模块具体用于:在所述整场动画的执行时长内,按照每个动画元素的动画属性,依次动作每个动画元素,以生成从所述第一页面切换至所述第二页面过程中的转场动画。

在一可选实施方式中,所述生成模块具体用于:根据所述整场动画的执行时长,创建一个定时器;按照所述定时器的定时周期,周期性地检测所述动画元素集合中是否有动画元素需要执行动画;当检测到有动画元素需要执行动画时,按照所述需要执行动画的动画元素的动画属性,动作所述需要执行动画的动画元素;当所述动画元素集合中的所有动画元素都执行动画后,释放内存。

在一可选实施方式中,所述生成模块还用于:根据所述需要执行动画的元素的动画属性中的截屏范围,从所述第二页面中截取相应图像,作为所述需要执行动画的动画元素。

在一可选实施方式中,所述装置还包括:添加模块,用于预先在所述父类视图控制器中添加所述转场动画配置对象创建方法,并定义返回所述转场动画配置对象创建方法的方法;其中,在所述转场动画配置对象创建方法中定义转场动画的配置类,所述转场动画的配置类包括多个动画项,每个动画项用于定义一个转场动画的配置属性。

在一可选实施方式中,所述装置还包括:绑定模块,用于使用运行时技术中的关联对象,将所述转场动画执行对象绑定到所述第二页面对应的视图控制器。

在一可选实施方式中,所述装置还包括:

出栈模块,用于当接收到从所述第二页面切换至所述第一页面的指令时,将所述第二页面对应的视图控制器弹出所述ui导航控制器的栈顶;

获取模块,用于获取所述第二页面对应的视图控制器绑定的所述转场动画执行对象;

所述设置模块还用于:将所述转场动画执行对象设置为所述ui导航控制器的代理对象;

所述生成模块还用于:在确定当前页面为所述第二页面时,触发所述代理对象根据所述转场动画配置属性,生成从所述第二页面切换至所述第一页面过程中的转场动画。

在一可选实施方式中,所述装置还包括:

修改模块,用于在所述设置模块将所述转场动画执行对象设置为所述ui导航控制器的代理对象之前,修改所述转场动画配置属性;

所述生成模块具体用于:触发所述代理对象根据所述修改后的转场动画配置属性,生成从所述第二页面切换至所述第一页面过程中的转场动画。

本申请实施例还提供一种电子设备,包括:一个或多个存储器和一个或多个处理器;所述一个或多个存储器用于存储一条或多条计算机指令,其中,所述一条或多条计算机指令被所述一个或多个处理器执行时能够实现上述转场动画实现方法中的步骤。

本申请实施例还提供一种存储有计算机程序的计算机可读存储介质,所述计算机程序被计算机执行时能够实现上述转场动画实现方法中的步骤。

在本申请实施例中,预先在父类视图控制器中创建转场动画配置对象创建方法,并允许子类视图控制器继承和重写父类的转场动画配置对象创建方法,通过在重写后的转场动画配置对象创建方法中定义转场动画配置属性,基于转场动画配置属性创建转场动画执行对象,进而结合ui导航控制器的代理功能,通过将转场动画执行对象设置为ui导航控制器的代理对象,触发代理对象根据转场动画配置属性实现转场动画,可以将转场动画与业务本身解耦,提高了实现转场动画的效率,降低了实现转场动画的时间成本。

附图说明

此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:

图1为本申请一实施例提供的两种数据结构之间的对应关系的示意图;

图2为本申请一实施例提供的animatoritem定义转场动画的属性列表的示意图;

图3为本申请一实施例提供的转场动画实现方法的流程示意图;

图4为本申请另一实施例提供的转场动画实现方法的流程示意图;

图5为本申请又一实施例提供的转场动画实现装置的结构示意图;

图6为本申请又一实施例提供的转场动画实现装置的结构示意图。

具体实施方式

为使本申请的目的、技术方案和优点更加清楚,下面将结合本申请具体实施例及相应的附图对本申请技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

在现有mvc架构中,用户界面(userinterface,ui)导航控制器(uinavigationcontroller)除了可以作为ui栈控制视图控制器(viewcontroller)层级外,允许开发人员通过其代理功能自定义转场动画,但是在这种实现自定义转场动画的方案中,转场动画和业务本身高度耦合,实现一个转场动画的时间成本较高。

针对现有基于uinavigationcontroller提供的转场代理框架实现自定义转场动画时所存在的问题,本申请实施例提供一种解决方案,主要原理是:预先在父类视图控制器中创建转场动画配置对象创建方法,并允许子类视图控制器继承和重写父类的转场动画配置对象创建方法,通过在重写后的转场动画配置对象创建方法中定义转场动画配置属性,基于转场动画配置属性创建转场动画执行对象,进而结合ui导航控制器的代理功能,通过将转场动画执行对象设置为ui导航控制器的代理对象,触发代理对象根据转场动画配置属性实现转场动画。在本申请实施例中,允许子类视图控制器重写父类的转场动画配置对象创建方法来定义转场动画配置属性,无需在视图控制器中实现ui导航控制器的转场动画(animatedtransitioning)代理协议,可以将转场动画与业务本身解耦,提高了实现转场动画的效率,降低了实现转场动画的时间成本。其中,重写是指子类的方法覆盖父类的方法,要求方法名和参数都相同。

在实现转场动画之前,需要预先在父类视图控制器中创建转场动画配置对象创建方法,在该转场动画配置对象创建方法中可以定义转场动画配置属性,转场动画配置属性主要是指与实现转场动画相关的属性。举例说明,这些属性可以包括但不限于:转场动画需要的动画元素、动画元素的初始位置、动画元素的结束位置、动画元素的初始角度(alpha)、动画元素的结束角度、动画缩放比例、动画开始时间、动画持续时长、动画元素在动画前是否隐藏、动画元素在动画后是否隐藏等等。

可选地,可以在父类视图控制器中添加转场动画配置对象创建方法,并在子类视图控制器中定义对应转场动画配置对象创建方法的实现。例如,转场动画配置对象创建方法可以作为父类视图控制器中的类别(category)方法实现,与此同时在子类视图控制器中定义对应category方法的实现。

进一步可选地,为了使动画元素抽象化,简化转场动画的实现逻辑,在本申请实施例中定义了两种数据结构,分别是:动画项(animatoritem)和动画配置类(animatorconfiguration)。一个animatorconfiguration包括多个animatoritem,每一个animatoritem可以定义一个转场动画的一个或多个配置属性。可选地,animatoritem可以通过配置列表来定义一个转场动画的配置属性。

进一步,在ui导航控制器中,使用栈来管理视图控制器,最先入栈的视图控制器在栈底,最后入栈的视图控制器在栈顶,而在栈顶的视图控制器对应的页面就是ui导航控制器当前对外展示的页面,也就是用户看到的页面。而push和pop是对栈进行操作的方法,在ui导航控制器中,push会将一个视图控制器压入栈顶,pop会将栈顶的视图控制器弹出;对于用户而言,通过push和pop操作可以打开一个页面,或者实现页面之间的跳转。

结合上述push和pop方法,animatoritem可以分为push时的item(简称为push-item)和pop时的item(简称为pop-item)。其中,两种数据结构之间的关系如图1所示。相应地,每个animatoritem定义一个转场动画的属性列表如图2所示,但animatoritem可定义的动画属性并不限于图2示出的属性。

在本申请实施例中,添加上述转场动画配置对象创建方法的父类视图控制器允许子类视图控制器继承并重写父类中的转场动画配置对象创建方法。基于此,对于每个需要实现转场动画的子类视图控制器,只需通过重写父类视图控制器中的转场动画配置对象创建方法即可,无需在子类视图控制器中书写ui导航控制器的转场动画代理协议,进一步结合本申请实施例提供的转场动画的实现逻辑,可以实现转场动画与业务本身的解耦,提高了实现转场动画的效率,降低了实现转场动画的时间成本。

基于上述父类视图控制器中创建的转场动画配置对象创建方法,以下将结合附图,详细说明本申请各实施例基于重写父类的转场动画配置对象创建方法实现转场动画的逻辑。

图3为本申请一实施例提供的转场动画实现方法的流程示意图。如图3所示,所述方法包括:

301、当接收到从第一页面切换至第二页面的指令时,将第二页面对应的视图控制器压入ui导航控制器的栈顶。

302、判断第二页面对应的视图控制器是否重写了预先在父类视图控制器中创建的转场动画配置对象创建方法;若判断结果为是,执行步骤303;若判断结果为否,可进入现有转场动画的实现流程。

303、利用重写后的转场动画配置对象创建方法中定义的转场动画配置属性,创建转场动画执行对象。

304、将转场动画执行对象设置为ui导航控制器的代理对象。

305、在确定当前页面为第一页面时,触发代理对象根据转场动画配置属性,生成从第一页面切换至第二页面过程中的转场动画。

在任何具有页面切换需求的应用场景中,均可采用本实施例提供的转场动画实现方法在两个页面切换过程中实现转场动画,使得在页面变化时具有更加丰富的动态效果,提高用户使用体验。

例如,在用户需要切换页面时,可以通过页面支持的切换方式触发页面切换操作。例如,如果当前页面支持滑动操作,则用户可以通过滑动操作触发页面之间的切换。又例如,如果当前页面设有切换按钮,例如可以是不同页面对应的标签,则用户可以通过点击切换按钮触发页面之间的切换。

从设备角度来说,可以捕捉用户触发的页面切换操作,确定用户需要从当前页面切换至另一页面,进而可以生成页面切换指令,根据该页面切换指令触发转场动画实现流程。为便于描述,在本实施例中,假设用户需要从第一页面切换至第二页面。第一页面和第二页面可以是任何应用场景中的页面,例如可以任一款app中的两个页面,也可以是浏览器中的两个页面等。基于此,当接收到从第一页面切换至第二页面的指令时,开始转场动画实现流程。

在本实施例中,转场动画实现流程如下:

在接收到从第一页面切换至第二页面的指令时,将第二页面对应的视图控制器压入ui导航控制器的栈顶。其中,可以调用ui导航控制器中的push方法,将第二页面对应的视图控制器压入栈顶。

接着,判断第二页面对应的视图控制器是否重写了预先在父类视图控制器中创建的转场动画配置对象创建方法。这点不同于现有转场动画的实现流程,现有转场动画的实现流程不包括该判断逻辑。这里第二页面对应的视图控制器相当于需要实现转场动画的子视图控制器。

在一可选实施方式中,转场动画配置对象创建方法采用图1所示的两种数据结构。基于此,可以判断第二页面对应的视图控制器被执行后是否有动画配置对象返回,如果第二页面对应的视图控制器被执行后,有动画配置对象返回,则确定第二页面对应的视图控制器重写了父类的转场动画配置对象创建方法;如果第二页面对应的视图控制器被执行后,没有动画配置对象返回,则确定第二页面对应的视图控制器未重写父类的转场动画配置对象创建方法。

如果判断出第二页面对应的视图控制器未重写父类的转场动画配置对象创建方法,这意味着需要按照现有转场动画的实现流程实现转场动画,则可以进入现有转场动画的实现流程。现有转场动画的实现流程是指基于uinavigationcontroller提供的转场动画代理协议实现自定义转场动画的过程,具体包括:在执行现有转场动画的实现流程之前,预先在第二页面对应的视图控制器中实现了ui导航控制器提供的转场动画代理协议,并实现transitionduration方法,transitionduration方法用以配置转场时间;当进入现有转场动画的实现流程后,在转场时间到达时,从第一页面和第二页面中获取视图容器、转场前的动画状态、转场后的动画状态等参数,调用预先在第二页面对应的视图控制器中实现的animatedtransitioning实现转场动画。其中,在第二页面对应的视图控制器中实现animatedtransitioning的时间成本较高,而且实现转场动画的过程与第一页面和第二页面相关,与业务结合紧密,导致无法很好的关注转场动画自身的实现逻辑。

如果判断出第二页面对应的视图控制器重写了父类的转场动画配置对象创建方法,则重写后的转场动画配置对象创建方法中会定义转场动画配置属性,该转场动画配置属性是从第一页面切换至第二页面过程中所需转场动画的属性。基于此,可以利用重写后的转场动画配置对象创建方法中定义的转场动画配置属性,创建转场动画执行对象(animator)。这里创建转场动画执行对象的过程实质上是新建一转场动画执行对象,并使用转场动画配置属性初始化新建的转场动画执行对象的过程。这些转场动画配置属性会作为转场动画执行对象的属性,而转场动画执行对象创建后会根据这些转场动画配置属性进行动画处理。

进一步,在实现转场动画时,需要依赖ui导航控制器提供的动画代理,于是将所创建的转场动画执行对象设置为ui导航控制器的代理对象(delegate),以便于通过代理对象进行动画处理。此时,代理对象将代替默认转场动画执行动画处理。

进一步,上述转场动画配置属性是从第一页面切换至第二页面时所需转场动画的属性,于是进一步确定当前页面是否为第一页面。例如,可以获取当前页面的标识,将当前页面的标识与第一页面的标识进行比较;若两者相同,可以确定当前页面是第一页面;若两者不同,说明当前页面不是第一页面。当确定当前页面是第一页面的时候,触发ui导航控制器的代理对象根据上述转场动画配置属性,生成从第一页面切换至第二页面过程中的转场动画。

可选地,若当前页面不是第一页面,说明中间可能出现了错误,可以选择结束当前操作。进一步可选地,还可以输出错误提示信息。

在一可选实施方式中,重写后的转场动画配置对象创建方法定义的转场动画配置属性可以包括:整场动画的执行时长、整场动画对应的动画元素集合以及动画元素集合中每个动画元素的动画属性。每个动画元素的动画属性可以是但不限于:图2所示属性列表中的属性。

基于上述转场动画配置属性,根据转场动画配置属性,生成从第一页面切换至第二页面过程中的转场动画的过程可以包括:在整场动画的执行时长内,按照每个动画元素的动画属性,依次动作每个动画元素,以生成从第一页面切换至第二页面过程中的转场动画。

进一步可选地,可以将生成转场动画的过程划分为三个阶段,分别是:元素预处理阶段、元素动画阶段和结束清空阶段。

基于上述,一种生成转场动画的过程包括:

元素预处理阶段:根据整场动画的执行时长,创建一个定时器,定时器的定时时长等于整场动画的执行时长;定时器一方面会针对整场动画的执行时长进行计时,另一方面会按照设定的定时间隔进行周期性的计时,该定时间隔远小于整场动画的执行时长,例如定时间隔可以为0.005s;每当定时器针对定时间隔的计时结束时,就会检测动画元素集合中是否有动画元素需要执行动画。其中,检测一个动画元素是否需要执行动画主要是判断定时器针对整场动画的执行时长的计时时间是否大于动画元素的开始执行时间;若判断出定时器针对整场动画的执行时长的计时时间大于或等于动画元素的开始执行时间,则确定该动画元素需要执行动画;反之,确定该动画元素不需要执行动画。

元素动画阶段:当检测到有动画元素需要执行动画时,按照所述需要执行动画的动画元素的动画属性,动作所述需要执行动画的动画元素。

可选地,若所述需要执行动画的动画元素的动画属性中定义了动画元素,则直接动作该动画元素;若所述需要执行动画的动画元素的动画属性中未定义动画元素,而是定义了截屏范围,则可以根据所述需要执行动画的元素的动画属性中的截屏范围,从第二页面中截取相应图像,作为所述需要执行动画的动画元素。

进而,可以按照所述需要执行动画的动画元素的动画属性中定义的动画元素的初始位置、动画元素的持续时长、动画初始角度、动画元素的结束角度等属性,控制所述需要执行动画的动画元素进行相应动作。当动画元素集合中的所有动画元素都按照各自对应的动画属性实现相应动作时,意味着转场动画的实现。

结束清空阶段:在动画元素集合中的所有动画元素都按照各自对应的动画属性实现相应动作后,清空动画元素集合中的所有动画元素,以释放内存。

由上述分析可见,在本实施例中,需要实现转场动画的视图控制器只需重写父类的转场动画配置对象创建方法即可获得转场动画配置属性,只需将转场动画执行对象设置为ui导航控制器的代理对象即可,无需在需要实现转场动画的视图控制器中实现ui导航控制器的动画代理,可以与业务解耦合,提高了实现转场动画的效率,降低了实现转场动画的时间成本。

在上述实施例或下述实施例中,在将转场动画执行对象设置为ui导航控制器的代理对象之后,还可以使用oc(objective-c)的运行时(runtime)技术中的关联对象,将转场动画执行对象绑定到第二页面对应的视图控制器。其中,通过关联对象将转场动画执行对象在运行时绑定到第二页面对应的视图控制器上面,也就将转场动画执行对象的生命周期与第二页面对应的视图控制器的生命周期绑定在一起了,这样就不需要单独关心转场动画执行对象的生命周期了,在第二页面对应的视图控制器释放内存时也会顺带释放转场动画执行对象,可以避免转场动画执行对象一直占用内存的问题,提高内存利用率。

在实际应用中,当用户从第一页面切换至第二页面之后,在很多情况下,可以能还需要从第二页面切换回第一页面。例如,用户从某购物类app的首页面切换至用户详情页面查看优惠券信息,之后又返回首页开始购物。在从第二页面切换回第一页面的过程中也可以通过转场动画提高页面切换效果。理论上,从第二页面切换至第一页面是从第一页面切换至第二页面的反过程,其转场动画可以相同或相似。于是,当从第一页面切换至第二页面之后,再从第二页面切换至第一页面时,可直接基于从第一页面切换至第二页面的过程中已经创建了转场动画执行对象实现转场动画,有利于提高实现转场动画的效率,节约资源。基于此,本申请另一实施例提供一种转场动画实现方法,如图4所示,所述方法包括:

401、当接收到从第二页面切换至第一页面的指令时,将第二页面对应的视图控制器弹出ui导航控制器的栈顶。

402、获取第二页面对应的视图控制器绑定的转场动画执行对象,所述转场动画执行对象是在从第一页面切换至第二页面的转场动画实现过程中被创建并被绑定至第二页面对应的视图控制器上的。

403、将转场动画执行对象设置为ui导航控制器的代理对象。

404、在确定当前页面为第二页面时,触发代理对象根据转场动画配置属性,生成从第二页面切换至第一页面过程中的转场动画;其中,所述转场动画配置属性是在从第一页面切换至第二页面的转场动画实现过程中,由第二页面对应的视图控制器重写的父类视图控制器的转场动画配置对象创建方法所定义的。

在本实施例中,当用户需要从第二页面切换回第二页面时,可以通过页面支持的切换方式触发页面切换操作。例如,如果当前页面支持滑动操作,则用户可以通过滑动操作触发页面之间的切换。又例如,如果当前页面设有切换按钮,例如可以是不同页面对应的标签,则用户可以通过点击切换按钮触发页面之间的切换。

从设备角度来说,可以捕捉用户触发的页面切换操作,确定用户需要从第二页面切换至第一页面时,可以生成页面切换指令。基于此,当接收到从第二页面切换至第一页面的指令时,开始转场动画实现流程。

在本实施例中,转场动画实现流程如下:

在接收到从第二页面切换至第一页面的指令时,可以识别出第二页面对应的视图控制器存在于ui导航控制器的栈顶,并且第一页面属于pop时的item,于是可以将第二页面对应的视图控制器弹出ui导航控制器的栈顶。其中,可以调用ui导航控制器的pop方法,将第二页面对应的视图控制器弹出ui导航控制器的栈顶。

另外,因为已经实现了从第一页面切换至第二页面过程中的转场动画,在实现该转场动画的过程中,已经得到了转场动画配置属性以及转场动画执行对象,并且转场动画执行对象已经被绑定至第二页面对应的视图控制器中。基于此,可以直接获取第二页面对应的视图控制器所绑定的转场动画执行对象,无需重新创建转场动画执行对象,有利于提高实现转场动画的效率。

进一步,在实现转场动画时,需要依赖ui导航控制器提供的动画代理,于是将所获取的转场动画执行对象设置为ui导航控制器的代理对象,以便于通过代理对象进行动画处理。

进一步,因为需要从第二页面返回第一页面,因此,需要进一步确定当前页面是否为第二页面。例如,可以获取当前页面的标识,将当前页面的标识与第二页面的标识进行比较;若两者相同,可以确定当前页面是第二页面;若两者不同,说明当前页面不是第二页面。当确定当前页面是第二页面的时候,触发ui导航控制器的代理对象根据相应的转场动画配置属性,生成从第二页面切换至第一页面过程中的转场动画。

可选地,若当前页面不是第二页面,说明中间可能出现了错误,可以选择结束当前操作。进一步可选地,还可以输出错误提示信息。

进一步可选地,从第二页面切换至第一页面的过程中的转场动画,可以与从第一页面切换至第二页面过程中的转场动画相同,也可以不相同。若从第二页面切换至第一页面的过程中,直接使用从第一页面切换至第二页面过程中的转场动画配置属性,则可以实现与从第一页面切换至第二页面过程中的转场动画相同的转场动画。若在触发ui导航控制器的代理对象根据转场动画配置属性,生成从第二页面切换至第一页面过程中的转场动画之前,修改转场动画配置属性;然后,触发代理对象根据修改后的转场动画配置属性,生成从第二页面切换至第一页面过程中的转场动画,则可以实现与第一页面切换至第二页面过程中的转场动画不相同的转场动画。

例如,两个转场动画的开始位置可以不同,旋转角度可以不同、透明度可以不同等,以进一步丰富页面变化时的动画效果。

综上可见,采用本申请实施例提供的方法,开发人员可以自定义复杂、丰富多彩的转场动画,而且只需预先在父类视图控制器中创建转场动画配置对象创建方法,对于需要实现转场动画的子类视图控制器,只需直接继承和重写父类的转场动画配置对象创建方法即可,无需在需要实现转场动画的子类视图控制器中实现ui导航控制器提供的动画代理,可以将转场动画与业务本身解耦,提高了实现转场动画的效率,降低了实现转场动画的时间成本。

需要说明的是,上述实施例所提供方法的各步骤的执行主体均可以是同一设备,或者,该方法也由不同设备作为执行主体。比如,步骤301至步骤305的执行主体可以为设备a;又比如,步骤301和302的执行主体可以为设备a,步骤303至305的执行主体可以为设备b;等等。

图5为本申请又一实施例提供的转场动画实现装置的结构示意图。如图5所示,所述装置包括:压栈模块51、判断模块52、创建模块53、设置模块54和生成模块55。

压栈模块51,用于当接收到从第一页面切换至第二页面的指令时,将第二页面对应的视图控制器压入ui导航控制器的栈顶。

判断模块52,用于判断由压栈模块51压入栈顶的第二页面对应的视图控制器是否重写了预先在父类视图控制器中创建的转场动画配置对象创建方法。

创建模块53,用于在判断模块52的判断结果为是时,利用重写后的转场动画配置对象创建方法中定义的转场动画配置属性,创建转场动画执行对象。

设置模块54,用于将创建模块53创建的转场动画执行对象设置为ui导航控制器的代理对象。

生成模块55,用于在确定当前页面为第一页面时,触发设置模块54设置的代理对象根据转场动画配置属性,生成从第一页面切换至第二页面过程中的转场动画。

在一可选实施方式中,所述转场动画配置属性包括:整场动画的执行时长、整场动画对应的动画元素集合以及所述动画元素集合中每个动画元素的动画属性。基于此,生成模块55具体用于:在整场动画的执行时长内,按照每个动画元素的动画属性,依次动作每个动画元素,以生成从第一页面切换至第二页面过程中的转场动画。

进一步,生成模块55具体用于:根据整场动画的执行时长,创建一个定时器;按照定时器的定时周期,周期性地检测动画元素集合中是否有动画元素需要执行动画;当检测到有动画元素需要执行动画时,按照所述需要执行动画的动画元素的动画属性,动作所述需要执行动画的动画元素;当动画元素集合中的所有动画元素都执行动画后,释放内存。

进一步,若所述需要执行动画的动画元素的动画属性中定义了动画元素,则生成模块55可以直接动作该动画元素。若所述需要执行动画的动画元素的动画属性中未定义动画元素,而是定义了截屏范围,则生成模块55还用于根据所述需要执行动画的元素的动画属性中的截屏范围,从第二页面中截取相应图像,作为所述需要执行动画的动画元素。

在一可选实施方式中,如图6所示,所述装置还包括:添加模块61,用于预先在父类视图控制器中添加转场动画配置对象创建方法,并定义返回转场动画配置对象创建方法的方法。其中,在转场动画配置对象创建方法中定义转场动画的配置类,所述转场动画的配置类包括多个动画项,每个动画项用于定义一个转场动画的配置属性。

在一可选实施方式中,如图6所示,所述装置还包括:绑定模块62,用于在生成模块55触发代理对象根据转场动画配置属性生成从第一页面切换至第二页面过程中的转场动画之前,使用运行时技术中的关联对象,将转场动画执行对象绑定到第二页面对应的视图控制器。这样就不需要单独关心转场动画执行对象的生命周期了,在第二页面对应的视图控制器释放内存时也会顺带释放转场动画执行对象,可以避免转场动画执行对象一直占用内存的问题,提高内存利用率。

在一可选实施方式中,如图6所示,所述装置还包括:出栈模块63和获取模块64。

出栈模块63,用于当接收到从第二页面切换至第一页面的指令时,将第二页面对应的视图控制器弹出ui导航控制器的栈顶。获取模块64,用于获取第二页面对应的视图控制器绑定的转场动画执行对象。相应地,设置模块54还用于:将转场动画执行对象设置为ui导航控制器的代理对象。生成模块55还用于:在确定当前页面为第二页面时,触发代理对象根据转场动画配置属性,生成从第二页面切换至第一页面过程中的转场动画。

进一步,如图6所示,装置还包括:修改模块65。

修改模块65,用于在设置模块54将转场动画执行对象设置为ui导航控制器的代理对象之前,修改转场动画配置属性。相应地,生成模块55具体用于:触发代理对象根据修改后的转场动画配置属性,生成从第二页面切换至第一页面过程中的转场动画。这样可以在第一页面和第二页面相互切换时实现不同的转场动画,进一步丰富页面变化时的动画效果。

本实施例提供的转场动画实现装置,可用于执行上述方法实施例提供的专场动画实现方法的流程,其工作原理不再赘述。

采用本实施例提供的转场动画实现装置,开发人员可以自定义复杂、丰富多彩的转场动画,而且只需预先在父类视图控制器中创建转场动画配置对象创建方法,对于需要实现转场动画的子类视图控制器,只需直接继承和重写父类的转场动画配置对象创建方法即可,无需在需要实现转场动画的子类视图控制器中实现ui导航控制器提供的动画代理,可以将转场动画与业务本身解耦,提高了实现转场动画的效率,降低了实现转场动画的时间成本。

本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。

本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

在一个典型的配置中,计算设备包括一个或多个处理器(cpu)、输入/输出接口、网络接口和内存。

内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(ram)和/或非易失性内存等形式,如只读存储器(rom)或闪存(flashram)。内存是计算机可读介质的示例。

计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(pram)、静态随机存取存储器(sram)、动态随机存取存储器(dram)、其他类型的随机存取存储器(ram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、快闪记忆体或其他内存技术、只读光盘只读存储器(cd-rom)、数字多功能光盘(dvd)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitorymedia),如调制的数据信号和载波。

还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。

本领域技术人员应明白,本申请的实施例可提供为方法、系统或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。

以上所述仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。

本申请实施例公开a1、一种转场动画实现方法,包括:

当接收到从第一页面切换至第二页面的指令时,将所述第二页面对应的视图控制器压入ui导航控制器的栈顶;

判断所述第二页面对应的视图控制器是否重写了预先在父类视图控制器中创建的转场动画配置对象创建方法;

若判断结果为是,利用所述重写后的转场动画配置对象创建方法中定义的转场动画配置属性,创建转场动画执行对象;

将所述转场动画执行对象设置为所述ui导航控制器的代理对象;

在确定当前页面为所述第一页面时,触发所述代理对象根据所述转场动画配置属性,生成从所述第一页面切换至所述第二页面过程中的转场动画。

a2、如a1所述的方法中,所述转场动画配置属性包括:整场动画的执行时长、整场动画对应的动画元素集合以及所述动画元素集合中每个动画元素的动画属性;

触发所述代理对象根据所述转场动画配置属性,生成从所述第一页面切换至所述第二页面过程中的转场动画,包括:

在所述整场动画的执行时长内,按照每个动画元素的动画属性,依次动作每个动画元素,以生成从所述第一页面切换至所述第二页面过程中的转场动画。

a3、如a2所述的方法中,在所述整场动画的执行时长内,按照每个动画元素的动画属性,依次动作每个动画元素,以生成从所述第一页面切换至所述第二页面过程中的转场动画,包括:

根据所述整场动画的执行时长,创建一个定时器;

按照所述定时器的定时周期,周期性地检测所述动画元素集合中是否有动画元素需要执行动画;

当检测到有动画元素需要执行动画时,按照所述需要执行动画的动画元素的动画属性,动作所述需要执行动画的动画元素;

当所述动画元素集合中的所有动画元素都执行动画后,释放内存。

a4、如a3所述的方法中,按照所述需要执行动画的动画元素的动画属性,动作所述需要执行动画的动画元素之前,所述方法还包括:

根据所述需要执行动画的元素的动画属性中的截屏范围,从所述第二页面中截取相应图像,作为所述需要执行动画的动画元素。

a5、如a1所述的方法,还包括:

预先在所述父类视图控制器中添加所述转场动画配置对象创建方法,并定义返回所述转场动画配置对象创建方法的方法;

在所述转场动画配置对象创建方法中定义转场动画的配置类,所述转场动画的配置类包括多个动画项,每个动画项用于定义一个转场动画的配置属性。

a6、如a1-a5任一项所述的方法中,在确定当前页面为所述第一页面之前,所述方法还包括:

使用运行时技术中的关联对象,将所述转场动画执行对象绑定到所述第二页面对应的视图控制器。

a7、如a6所述的方法,还包括:

当接收到从所述第二页面切换至所述第一页面的指令时,将所述第二页面对应的视图控制器弹出所述ui导航控制器的栈顶;

获取所述第二页面对应的视图控制器绑定的所述转场动画执行对象;

将所述转场动画执行对象设置为所述ui导航控制器的代理对象;

在确定当前页面为所述第二页面时,触发所述代理对象根据所述转场动画配置属性,生成从所述第二页面切换至所述第一页面过程中的转场动画。

a8、如a7所述的方法中,在将所述转场动画执行对象设置为所述ui导航控制器的代理对象之前,所述方法还包括:

修改所述转场动画配置属性;

触发所述代理对象根据所述转场动画配置属性,生成从所述第二页面切换至所述第一页面过程中的转场动画,包括:

触发所述代理对象根据所述修改后的转场动画配置属性,生成从所述第二页面切换至所述第一页面过程中的转场动画。

本申请实施例公开b9、一种转场动画实现装置,包括:

压栈模块,用于当接收到从第一页面切换至第二页面的指令时,将所述第二页面对应的视图控制器压入ui导航控制器的栈顶;

判断模块,用于判断所述第二页面对应的视图控制器是否重写了预先在父类视图控制器中创建的转场动画配置对象创建方法;

创建模块,用于在所述判断模块的判断结果为是时,利用所述重写后的转场动画配置对象创建方法中定义的转场动画配置属性,创建转场动画执行对象;

设置模块,用于将所述转场动画执行对象设置为所述ui导航控制器的代理对象;

生成模块,用于在确定当前页面为所述第一页面时,触发所述代理对象根据所述转场动画配置属性,生成从所述第一页面切换至所述第二页面过程中的转场动画。

b10、如b9所述的装置中,所述转场动画配置属性包括:整场动画的执行时长、整场动画对应的动画元素集合以及所述动画元素集合中每个动画元素的动画属性;

所述生成模块具体用于:在所述整场动画的执行时长内,按照每个动画元素的动画属性,依次动作每个动画元素,以生成从所述第一页面切换至所述第二页面过程中的转场动画。

b11、如b10所述的装置中,所述生成模块具体用于:

根据所述整场动画的执行时长,创建一个定时器;

按照所述定时器的定时周期,周期性地检测所述动画元素集合中是否有动画元素需要执行动画;

当检测到有动画元素需要执行动画时,按照所述需要执行动画的动画元素的动画属性,动作所述需要执行动画的动画元素;

当所述动画元素集合中的所有动画元素都执行动画后,释放内存。

b12、如b11所述的装置中,所述生成模块还用于:

根据所述需要执行动画的元素的动画属性中的截屏范围,从所述第二页面中截取相应图像,作为所述需要执行动画的动画元素。

b13、如b9所述的装置,还包括:

添加模块,用于预先在所述父类视图控制器中添加所述转场动画配置对象创建方法,并定义返回所述转场动画配置对象创建方法的方法;

在所述转场动画配置对象创建方法中定义转场动画的配置类,所述转场动画的配置类包括多个动画项,每个动画项用于定义一个转场动画的配置属性。

b14、如b9-b13任一项所述的装置,还包括:

绑定模块,用于使用运行时技术中的关联对象,将所述转场动画执行对象绑定到所述第二页面对应的视图控制器。

b15、如b14所述的装置,还包括:

出栈模块,用于当接收到从所述第二页面切换至所述第一页面的指令时,将所述第二页面对应的视图控制器弹出所述ui导航控制器的栈顶;

获取模块,用于获取所述第二页面对应的视图控制器绑定的所述转场动画执行对象;

所述设置模块还用于:将所述转场动画执行对象设置为所述ui导航控制器的代理对象;

所述生成模块还用于:在确定当前页面为所述第二页面时,触发所述代理对象根据所述转场动画配置属性,生成从所述第二页面切换至所述第一页面过程中的转场动画。

b16、如b15所述的装置,还包括:

修改模块,用于在所述设置模块将所述转场动画执行对象设置为所述ui导航控制器的代理对象之前,修改所述转场动画配置属性;

所述生成模块具体用于:触发所述代理对象根据所述修改后的转场动画配置属性,生成从所述第二页面切换至所述第一页面过程中的转场动画。

本申请实施例还公开c17、一种电子设备,包括:一个或多个存储器和一个或多个处理器;所述一个或多个存储器用于存储一条或多条计算机指令,其中,所述一条或多条计算机指令被所述一个或多个处理器执行时能够实现a1-a8任一项所述方法中的步骤。

本申请实施例还公开d18、一种存储有计算机程序的计算机可读存储介质,所述计算机程序被计算机执行时能够实现a1-a8任一项所述方法中的步骤。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1