package Ġnet . app tr onic . core . ios . anim Ċ Ċ import Ġplatform . UIKit . UI View Ċ Ċ class ĠView Animation ( ĊĠĠĠĠĠĠĠ Ġval Ġtarget : ĠUIView , ĊĠĠĠĠĠĠĠ Ġval Ġcontainer : ĠUIView , ĊĠĠĠĠĠĠĠ Ġval Ġdefinition : ĠView Animation Definition , ĊĠĠĠĠĠĠĠ Ġval Ġduration : ĠLong Ċ ) Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġplayer : ĠAnimation Player ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġclass ĠNext ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġplayer : ĠAnimation Player , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġanimation : ĠView Animation , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintercept : ĠBoolean ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġstart () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplayer . play Animation ( animation , Ġintercept ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval ĠonStart Actions Ġ= Ġmutable ListOf < () Ġ-> ĠUnit >() ĊĠĠĠ Ġprivate Ġval ĠonComplete Actions Ġ= Ġmutable ListOf < () Ġ-> ĠUnit >() ĊĠĠĠ Ġprivate Ġval Ġon Cancel Actions Ġ= Ġmutable ListOf < () Ġ-> ĠUnit >() ĊĊĠĠĠ Ġprivate Ġvar Ġnext : ĠNext ? Ġ= Ġnull ĊĊĠĠĠ Ġfun Ġdo On Start ( action : Ġ() Ġ-> ĠUnit ): ĠView Animation Ġ{ ĊĠĠĠĠĠĠĠ ĠonStart Actions . add ( action ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdo On Complete ( action : Ġ() Ġ-> ĠUnit ): ĠView Animation Ġ{ ĊĠĠĠĠĠĠĠ ĠonComplete Actions . add ( action ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdo On Cancel ( action : Ġ() Ġ-> ĠUnit ): ĠView Animation Ġ{ ĊĠĠĠĠĠĠĠ Ġon Cancel Actions . add ( action ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdo On Complete Or Cancel ( action : Ġ() Ġ-> ĠUnit ): ĠView Animation Ġ{ ĊĠĠĠĠĠĠĠ ĠonComplete Actions . add ( action ) ĊĠĠĠĠĠĠĠ Ġon Cancel Actions . add ( action ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcall Complete () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! is Cancelled Ġ&& Ġ! is Comp et ed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Comp et ed Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ ĠonComplete Actions . forEach Ġ{ Ġit () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnext ?. start () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġstart ( player : ĠAnimation Player , Ġintercept : ĠBoolean , Ġcurrent : ĠView Animation ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġintercept ing Ġ= Ġcurrent ĊĠĠĠĠĠĠĠ Ġif Ġ( intercept ing Ġ!= Ġnull Ġ&& Ġ! intercept ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintercept ing . next Ġ= ĠNext ( player , Ġthis , Ġintercept ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġthis . player Ġ= Ġplayer ĊĠĠĠĠĠĠĠ Ġdo Play () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġtransformation : ĠView Transformation ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġis Comp et ed : ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġis Cancelled : ĠBoolean Ġ= Ġfalse ĊĊĠĠĠ Ġprivate Ġfun Ġdo Play () Ġ{ ĊĠĠĠĠĠĠĠ ĠonStart Actions . forEach Ġ{ Ġit () Ġ} ĊĠĠĠĠĠĠĠ Ġtransformation Ġ= Ġdefinition . create Transformation () ĊĠĠĠĠĠĠĠ Ġtransformation ?. onComplete Ġ= Ġthis :: call Complete ĊĠĠĠĠĠĠĠ Ġtransformation ?. animate ( target , Ġcontainer , Ġduration . toDouble ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcancel () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! is Cancelled Ġ&& Ġ! is Comp et ed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Cancelled Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Cancel Actions . forEach Ġ{ Ġit () Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġplay On ( player : ĠAnimation Player , Ġintercept : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġplayer . play Animation ( this , Ġintercept ) ĊĠĠĠ Ġ} Ċ Ċ }