ios并发动画回调程序的构建方法、回调方法及装置
技术领域
1.本技术涉及软件开发技术领域,具体而言,涉及一种ios并发动画回调程序的构建方法、回调方法及装置。
背景技术:2.ios开发中,为提高用户体验,增加app的趣味性、直观性、营造氛围常常会使用一些动画,单一ios动画的满足大部分需要,但是某些特定的场景,需要多种样式且多个数量的动画在同一页面并发播放,这时会产生动画回调难以区分,某些动画结束后需要做其他后续逻辑操作往往会面临很大的困难,甚至无从下手。
3.目前ios对于处理高并发动画常用方案大多数是做动画的视图和动画做绑定,通过绑定动画的逻辑在动画结束回调时,做移除动画操作或者动画之后的后续操作,或者采用动画队列的方式做动画和视图之间的隐式绑定操作。
4.现有的使用动画视图绑定方案和动画队列具有以下缺点:
5.1.使用视图动画绑定的方案,每一个动画都要设置不同的key(用于区分动画),通过key和视图的绑定,动画结束之后要对视图做删除操作,数据管理还要保证线程的安全,实现的复杂性比较高。
6.2.使用动画队列可以保证动画按顺序执行,如果出现动画执行的时间不同,也会出现难以区分动画回调的问题。
技术实现要素:7.本技术实施例的目的在于提供一种ios并发动画回调程序的构建方法、回调方法及装置,利用延长代理链方式,通过对动画的代理对象单独管理,实现代理和动画一对一,改变一般写法代理和动画一对多的情况,增加动画的可控性,可以简单高效且可靠地实现高并发动画回调。
8.为了实现上述目的,本技术的实施例通过如下方式实现:
9.第一方面,本技术实施例提供一种ios并发动画回调程序的构建方法,包括:创建视图控制器;在所述视图控制器中创建n个视图,并添加到所述视图控制器中,n为正整数;在所述视图控制器中创建n个动画对象,一一对应地添加到n个视图中;创建n个代理对象,一一对应地设置为n个动画对象的代理,并增加代理对象对视图的引用,再将所述视图控制器作为每个代理对象的代理,其中,每个代理对象遵循caanimationdelegate协议实现-(void)animationdidstop:(caanimation*)anim finished:(bool)flag回调,且协议方法中增设有代理方法或block回调以通知所述视图控制器动画完成。
10.结合第一方面,在第一方面的第一种可能的实现方式中,创建n个视图view_i后,i=1,
…
,n,在所述视图控制器中创建n个动画对象,一一对应地添加到n个视图中,包括:在所述视图控制器中创建n个动画对象animation_i;通过[view_i.layer addanimation:animation_iforkey:@"animation_i"]方法把n个动画对象animation_i一一对应地添加到
n个视图view_i的layer层。
[0011]
结合第一方面的第一种可能的实现方式,在第一方面的第二种可能的实现方式中,创建n个代理对象,一一对应地设置为n个动画对象的代理,并增加代理对象对视图的引用,再将所述视图控制器作为每个代理对象的代理,包括:创建n个代理对象animationmanager_i;将n个代理对象animationmanager_i一一对应地设置为n个动画对象animation_i的代理;为n个代理对象animationmanager_i一一对应地增加对n个视图view_i的引用;将所述视图控制器设置为n个代理对象animationmanager_i的代理。
[0012]
第二方面,本技术实施例提供一种ios并发动画回调方法,视图控制器代理n个代理对象,每个代理对象又分别作为一个视图的代理,每个视图分别添加有一个动画对象,每个代理对象对其代理的动画对象对应的视图进行引用,每个代理对象遵循caanimationdelegate协议,且协议方法中增设有代理方法或block回调方法,所述ios并发动画回调方法应用于任一代理对象,包括:本代理对象代理的视图所关联的动画对象执行结束后,遵循caanimationdelegate协议实现-(void)animationdidstop:(caanimation*)anim finished:(bool)flag回调;利用增设的代理方法或block回调方法通知所述视图控制器动画完成。
[0013]
第三方面,本技术实施例提供一种ios并发动画回调程序的构建装置,包括:视图控制器创建单元,用于创建视图控制器;视图创建单元,用于在所述视图控制器中创建n个视图,并添加到所述视图控制器中,n为正整数;动画对象创建单元,用于在所述视图控制器中创建n个动画对象,一一对应地添加到n个视图中;代理对象创建单元,用于创建n个代理对象,一一对应地设置为n个动画对象的代理,并增加代理对象对视图的引用,再将所述视图控制器作为每个代理对象的代理,其中,每个代理对象遵循caanimationdelegate协议实现-(void)animationdidstop:(caanimation*)anim finished:(bool)flag回调,且协议方法中增设有代理方法或block回调以通知所述视图控制器动画完成。
[0014]
结合第三方面,在第三方面的第一种可能的实现方式中,所述视图创建单元创建n个视图view_i后,i=1,
…
,n,所述动画对象创建单元,具体用于:在所述视图控制器中创建n个动画对象animation_i;通过[view_i.layer addanimation:animation_i forkey:@"animation_i"]方法把n个动画对象animation_i一一对应地添加到n个视图view_i的layer层。
[0015]
结合第三方面的第一种可能的实现方式,在第三方面的第二种可能的实现方式中,所述代理对象创建单元,具体用于:创建n个代理对象animationmanager_i;将n个代理对象animationmanager_i一一对应地设置为n个动画对象animation_i的代理;为n个代理对象animationmanager_i一一对应地增加对n个视图view_i的引用;将所述视图控制器设置为n个代理对象animationmanager_i的代理。
[0016]
第四方面,本技术实施例提供一种ios并发动画回调装置,视图控制器代理n个代理对象,每个代理对象又分别作为一个视图的代理,每个视图分别添加有一个动画对象,每个代理对象对其代理的动画对象对应的视图进行引用,每个代理对象遵循caanimationdelegate协议,且协议方法中增设有代理方法或block回调方法,所述ios并发动画回调装置应用于任一代理对象,包括:代理对象回调单元,用于在本代理对象代理的视图所关联的动画对象执行结束后,遵循caanimationdelegate协议实现-(void)
animationdidstop:(caanimation*)anim finished:(bool)flag回调;视图控制器回调单元,用于利用增设的代理方法或block回调方法通知所述视图控制器动画完成。
[0017]
第五方面,本技术实施例提供一种存储介质,所述存储介质包括存储的程序,其中,在所述程序运行时控制所述存储介质所在设备执行第一方面或第一方面的可能的实现方式中任一项所述的ios并发动画回调程序的构建方法,或者执行第二方面所述的ios并发动画回调方法。
[0018]
第六方面,本技术实施例提供一种电子设备,包括存储器和处理器,所述存储器用于存储包括程序指令的信息,所述处理器用于控制程序指令的执行,所述程序指令被处理器加载并执行时实现第一方面或第一方面的可能的实现方式中任一项所述的ios并发动画回调程序的构建方法,或者实现第二方面所述的ios并发动画回调方法。
[0019]
有益效果:在视图控制器中创建n个视图并添加,在视图控制器中创建n个动画对象,一一对应地添加到n个视图中;创建n个代理对象,一一对应地设置为n个动画对象的代理,并增加代理对象对视图的引用,再将视图控制器作为每个代理对象的代理,其中,每个代理对象遵循caanimationdelegate协议实现-(void)animationdidstop:(caanimation*)anim finished:(bool)flag回调,且协议方法中增设有代理方法或block回调以通知视图控制器动画完成。此种方式可以在动画对象执行结束后,遵循caanimationdelegate协议实现-(void)animationdidstop:(caanimation*)anim finished:(bool)flag回调;利用增设的代理方法或block回调方法通知视图控制器动画完成。利用延长代理链方式,通过对动画的代理对象单独管理,实现代理和动画一对一,改变一般写法代理和动画一对多的情况,增加动画的可控性,可以简单高效且可靠地实现高并发动画回调。
[0020]
为使本技术的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。
附图说明
[0021]
为了更清楚地说明本技术实施例的技术方案,下面将对本技术实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本技术的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
[0022]
图1为本技术实施例提供的ios并发动画回调程序的构建方法的流程图。
[0023]
图2为本技术实施例提供的ios并发动画回调程序的逻辑框图。
[0024]
图3为本技术实施例提供的ios并发动画回调方法的流程图。
[0025]
图4为本技术实施例提供的ios并发动画回调程序的构建装置的结构框图。
[0026]
图5为本技术实施例提供的ios并发动画回调装置的结构框图。
[0027]
图6为本技术实施例提供的一种电子设备的结构框图。
[0028]
图标:10-ios并发动画回调程序的构建装置;11-视图控制器创建单元;12-视图创建单元;13-动画对象创建单元;14-代理对象创建单元;20-ios并发动画回调装置;21-代理对象回调单元;22-视图控制器回调单元;30-电子设备;31-存储器;32-通信模块;33-总线;34-处理器。
具体实施方式
[0029]
下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行描述。
[0030]
请参阅图1,图1为本技术实施例提供的ios并发动画回调程序的构建方法的流程图。
[0031]
在本实施例中,ios并发动画回调程序的构建方法可以包括:步骤s10、步骤s20、步骤s30和步骤s40。
[0032]
为了构建ios并发动画回调程序,首先,可以执行步骤s10。
[0033]
步骤s10:可以创建视图控制器。
[0034]
在本实施例中,可以创建一个视图控制器。例如,命名为viewcontroller。
[0035]
之后,可以执行步骤s20。
[0036]
步骤s20:在所述视图控制器中创建n个视图,并添加到所述视图控制器中,n为正整数。
[0037]
在本实施例中,可以在在视图控制器中创建n个视图,并添加到视图控制器中,n为正整数。
[0038]
示例性的,针对n=1的情况:可以在视图控制器viewcontrollera中创建一个视图,命名为view,并且添加到视图控制器viewcontrollera中。
[0039]
示例性的,针对n》1的情况:可以在视图控制器viewcontrollerb中创建一个视图,命名为view_i,并且添加到视图控制器viewcontrollerb中,其中,i=1,2,
…
,n。
[0040]
将创建的视图添加到视图控制器后,可以执行步骤s30。
[0041]
步骤s30:在所述视图控制器中创建n个动画对象,一一对应地添加到n个视图中。
[0042]
在本实施例中,可以在视图控制器中创建n个动画对象,一一对应地添加到n个视图中。
[0043]
示例性的,针对n=1的情况:可以在视图控制器viewcontrollera创建一个动画对象,命名animation,通过[view.layer addanimation:animation forkey:@"animation"]方法可以把动画对象animation添加到view的layer层。
[0044]
示例性的,针对n》1的情况:可以在视图控制器中创建n个动画对象animation_i,分别将其添加到对应的视图view_i中。具体可以通过[view_i.layer addanimation:animation_i forkey:@"animation_i"]方法把n个动画对象animation_i一一对应地添加到n个视图view_i的layer层。例如,创建的3个动画对象animation_1、animation_2和animation_3,然后分别将其添加到对应的视图view_1、view_2和view_3中。
[0045]
在将n个动画对象添加到n个视图中后,可以执行步骤s40。
[0046]
步骤s40:创建n个代理对象,一一对应地设置为n个动画对象的代理,并增加代理对象对视图的引用,再将所述视图控制器作为每个代理对象的代理,其中,每个代理对象遵循caanimationdelegate协议实现-(void)animationdidstop:(caanimation*)anim finished:(bool)flag回调,且协议方法中增设有代理方法或block回调以通知所述视图控制器动画完成。
[0047]
在本实施例中,可以创建n个代理对象,一一对应地设置为n个动画对象的代理,并增加代理对象对视图的引用,再将视图控制器作为每个代理对象的代理。
[0048]
针对n=1的情况:可以创建一个代理对象,例如命名为animationmanager,然后将
创建的代理对象animationmanager设置为动画对象animation的代理,并增加代理对象animationmanager对视图view的引用,将视图控制器viewcontrollera设置为代理对象animationmanager的代理。
[0049]
针对n》1的情况:可以创建n个代理对象,命名为animationmanager_i。然后,可以将n个代理对象animationmanager_i一一对应地设置为n个动画对象animation_i的代理。为n个代理对象animationmanager_i一一对应地增加对n个视图view_i的引用,再将视图控制器viewcontrollerb设置为n个代理对象animationmanager_i的代理。
[0050]
其中,每个代理对象遵循caanimationdelegate协议,可以实现-(void)animationdidstop:(caanimation*)anim finished:(bool)flag回调,且协议方法中增设有代理方法或block回调通知视图控制器动画完成。
[0051]
ios并发动画回调程序的架构如图2所示,图2为本技术实施例提供的ios并发动画回调程序的逻辑框图。
[0052]
为了便于理解,此处提供部分代码以供参考:
[0053]
[0054][0055]
视图控制器中的相关关键伪代码
[0056]-(void)showavataranimation{
[0057]
//做动画的视图
[0058]
uiimageview*avatar=[[uiimageview alloc]init];
[0059]
//动画管理代理
[0060]
avataranimation*avataranimation=[[avataranimation alloc]init];
[0061]
//动画管理的代理为控制器(self指的为当前页面控制器)
[0062]
avataranimation.delegate=self;
[0063]
//控制器添加视图
[0064]
[self addsubview:avatar];
[0065]
//创建动画
[0066]
animation*pathanimation=[animation animationwithkeypath:@"position"];
[0067]
//设置动画管理为动画的代理
[0068]
pathanimation.delegate=avataranimation;
[0069]
//视图layer层添加动画
[0070]
[avatar.layer addanimation:pathanimation forkey:@"betcoinanimation"];}
[0071]
基于此,可以构建出ios并发动画回调程序。基于ios并发动画回调程序,可以运行ios并发动画回调方法,实现ios并发动画回调。
[0072]
视图控制器代理n个代理对象,每个代理对象又分别作为一个视图的代理,每个视图分别添加有一个动画对象,每个代理对象对其代理的动画对象对应的视图进行引用,每个代理对象遵循caanimationdelegate协议,且协议方法中增设有代理方法或block回调方
finished:(bool)flag回调。
[0086]
视图控制器回调单元22,用于利用增设的代理方法或block回调方法通知所述视图控制器动画完成。
[0087]
请参阅图6,图6为本技术实施例提供的一种电子设备30的结构框图。
[0088]
在本实施例中,电子设备30可以为搭载ios操作系统的智能终端,例如电脑、智能手机等,此处不作限定。
[0089]
示例性的,电子设备30可以包括:通过网络与外界连接的通信模块32、用于执行程序指令的一个或多个处理器34、总线33和不同形式的存储器31,例如,磁盘、rom、或ram,或其任意组合。以及,电子设备30还具有显示屏,可以展示动画对象。存储器31、通信模块32、处理器34之间可以通过总线33连接。
[0090]
示例性的,存储器31中存储有程序。处理器34可以从存储器31调用并运行这些程序,从而便可以通过运行程序而实现ios并发动画回调程序的构建方法,或者实现ios并发动画回调方法。
[0091]
本技术实施例还提供一种存储介质,所述存储介质包括存储的程序,其中,在所述程序运行时控制所述存储介质所在设备执行ios并发动画回调程序的构建方法,或者执行ios并发动画回调方法。
[0092]
综上所述,本技术实施例提供一种ios并发动画回调程序的构建方法、回调方法及装置,在视图控制器中创建n个视图并添加,在视图控制器中创建n个动画对象,一一对应地添加到n个视图中;创建n个代理对象,一一对应地设置为n个动画对象的代理,并增加代理对象对视图的引用,再将视图控制器作为每个代理对象的代理,其中,每个代理对象遵循caanimationdelegate协议实现-(void)animationdidstop:(caanimation*)anim finished:(bool)flag回调,且协议方法中增设有代理方法或block回调以通知视图控制器动画完成。此种方式可以在动画对象执行结束后,遵循caanimationdelegate协议实现-(void)animationdidstop:(caanimation*)anim finished:(bool)flag回调;利用增设的代理方法或block回调方法通知视图控制器动画完成。利用延长代理链方式,通过对动画的代理对象单独管理,实现代理和动画一对一,改变一般写法代理和动画一对多的情况,增加动画的可控性,可以简单高效且可靠地实现高并发动画回调。
[0093]
在本技术所提供的实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,或一些特征可以忽略,或不执行。
[0094]
在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。
[0095]
以上所述仅为本技术的实施例而已,并不用于限制本技术的保护范围,对于本领域的技术人员来说,本技术可以有各种更改和变化。凡在本技术的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本技术的保护范围之内。
技术特征:1.一种ios并发动画回调程序的构建方法,其特征在于,包括:创建视图控制器;在所述视图控制器中创建n个视图,并添加到所述视图控制器中,n为正整数;在所述视图控制器中创建n个动画对象,一一对应地添加到n个视图中;创建n个代理对象,一一对应地设置为n个动画对象的代理,并增加代理对象对视图的引用,再将所述视图控制器作为每个代理对象的代理,其中,每个代理对象遵循caanimationdelegate协议实现-(void)animationdidstop:(caanimation*)anim finished:(bool)flag回调,且协议方法中增设有代理方法或block回调以通知所述视图控制器动画完成。2.根据权利要求1所述的ios并发动画回调程序的构建方法,其特征在于,创建n个视图view_i后,i=1,
…
,n,在所述视图控制器中创建n个动画对象,一一对应地添加到n个视图中,包括:在所述视图控制器中创建n个动画对象animation_i;通过[view_i.layer addanimation:animation_i forkey:@"animation_i"]方法把n个动画对象animation_i一一对应地添加到n个视图view_i的layer层。3.根据权利要求2所述的ios并发动画回调程序的构建方法,其特征在于,创建n个代理对象,一一对应地设置为n个动画对象的代理,并增加代理对象对视图的引用,再将所述视图控制器作为每个代理对象的代理,包括:创建n个代理对象animationmanager_i;将n个代理对象animationmanager_i一一对应地设置为n个动画对象animation_i的代理;为n个代理对象animationmanager_i一一对应地增加对n个视图view_i的引用;将所述视图控制器设置为n个代理对象animationmanager_i的代理。4.一种ios并发动画回调方法,其特征在于,视图控制器代理n个代理对象,每个代理对象又分别作为一个视图的代理,每个视图分别添加有一个动画对象,每个代理对象对其代理的动画对象对应的视图进行引用,每个代理对象遵循caanimationdelegate协议,且协议方法中增设有代理方法或block回调方法,所述ios并发动画回调方法应用于任一代理对象,包括:本代理对象代理的视图所关联的动画对象执行结束后,遵循caanimationdelegate协议实现-(void)animationdidstop:(caanimation*)anim finished:(bool)flag回调;利用增设的代理方法或block回调方法通知所述视图控制器动画完成。5.一种ios并发动画回调程序的构建装置,其特征在于,包括:视图控制器创建单元,用于创建视图控制器;视图创建单元,用于在所述视图控制器中创建n个视图,并添加到所述视图控制器中,n为正整数;动画对象创建单元,用于在所述视图控制器中创建n个动画对象,一一对应地添加到n个视图中;代理对象创建单元,用于创建n个代理对象,一一对应地设置为n个动画对象的代理,并增加代理对象对视图的引用,再将所述视图控制器作为每个代理对象的代理,其中,每个代
理对象遵循caanimationdelegate协议实现-(void)animationdidstop:(caanimation*)anim finished:(bool)flag回调,且协议方法中增设有代理方法或block回调以通知所述视图控制器动画完成。6.根据权利要求5所述的ios并发动画回调程序的构建装置,其特征在于,所述视图创建单元创建n个视图view_i后,i=1,
…
,n,所述动画对象创建单元,具体用于:在所述视图控制器中创建n个动画对象animation_i;通过[view_i.layer addanimation:animation_i forkey:@"animation_i"]方法把n个动画对象animation_i一一对应地添加到n个视图view_i的layer层。7.根据权利要求6所述的ios并发动画回调程序的构建装置,其特征在于,所述代理对象创建单元,具体用于:创建n个代理对象animationmanager_i;将n个代理对象animationmanager_i一一对应地设置为n个动画对象animation_i的代理;为n个代理对象animationmanager_i一一对应地增加对n个视图view_i的引用;将所述视图控制器设置为n个代理对象animationmanager_i的代理。8.一种ios并发动画回调装置,其特征在于,视图控制器代理n个代理对象,每个代理对象又分别作为一个视图的代理,每个视图分别添加有一个动画对象,每个代理对象对其代理的动画对象对应的视图进行引用,每个代理对象遵循caanimationdelegate协议,且协议方法中增设有代理方法或block回调方法,所述ios并发动画回调装置应用于任一代理对象,包括:代理对象回调单元,用于在本代理对象代理的视图所关联的动画对象执行结束后,遵循caanimationdelegate协议实现-(void)animationdidstop:(caanimation*)anim finished:(bool)flag回调;视图控制器回调单元,用于利用增设的代理方法或block回调方法通知所述视图控制器动画完成。9.一种存储介质,其特征在于,所述存储介质包括存储的程序,其中,在所述程序运行时控制所述存储介质所在设备执行权利要求1至3中任一项所述的ios并发动画回调程序的构建方法,或者执行权利要求4所述的ios并发动画回调方法。10.一种电子设备,其特征在于,包括存储器和处理器,所述存储器用于存储包括程序指令的信息,所述处理器用于控制程序指令的执行,所述程序指令被处理器加载并执行时实现权利要求1~3中任一项所述的ios并发动画回调程序的构建方法,或者实现权利要求4所述的ios并发动画回调方法。
技术总结本申请提供一种iOS并发动画回调程序的构建方法、回调方法及装置,在视图控制器中创建n个视图并添加,在视图控制器中创建n个动画对象,对应添加到n个视图中;创建n个代理对象,对应设置为n个动画对象的代理,并增加代理对象对视图的引用,再将视图控制器作为每个代理对象的代理。此种方式可以在动画对象执行结束后,利用代理对象进行回调,进一步利用增设的代理方法或block回调方法通知视图控制器动画完成。利用延长代理链方式,通过对动画的代理对象单独管理,实现代理和动画一对一,改变一般写法代理和动画一对多的情况,增加动画的可控性,可以简单高效且可靠地实现高并发动画回调。调。调。
技术研发人员:吴志博 唐进 叶世昌 段凌云
受保护的技术使用者:贵阳语玩科技有限公司
技术研发日:2022.07.20
技术公布日:2022/11/1