Hi,
I have write quite the same program, but fewer lines
local g=display.newGroup() g.x,g.y=display.contentCenterX,display.contentCenterY local tab={} local rdn=math.random(4) for k=1,4 do tab[1+(k+rdn)%4]="ims/0"..k..".png" //I choose 4 paths of the image, randomly end local up=display.newImageRect(g,tab[1],200,100) up.y=-80 up.xScale,up.yScale=0.6,0.6 local middle=display.newImageRect(g,tab[2],200,100) local down=display.newImageRect(g,tab[3],200,100) down.y=80 down.xScale,down.yScale=0.6,0.6 local hide=display.newImageRect(g,tab[4],200,100) hide.y=40 hide.xScale,hide.yScale=0.6,0.6 hide.alpha=0 //The four image, plus the hide image called "hide" local vitesse=500 //vitesse for time :D local function spin() local a,b,c,d //that parameter is useFull to switch place object on the group g transition.scaleTo(g[1],{time=vitesse, y=0, alpha=0,transition=easing.outCirc, onComplete=function(u) u.y=80 ;d=u end}) transition.scaleTo(g[2],{time=vitesse, y=-80, xScale=0.6, yScale=0.6, onComplete=function(u) a=u end}) transition.scaleTo(g[3],{time=vitesse, y=0, xScale=1, yScale=1, onComplete=function(u) b=u end}) transition.scaleTo(g[4],{time=vitesse, y=80, alpha=1, xScale=0.6, yScale=0.6, transition=easing.inExpo, onComplete=function(u) c=u end}) timer.performWithDelay(vitesse+500, function() g:insert(a);g:insert(b);g:insert(c);g:insert(d) end) //here I switch end timer.performWithDelay(2\*vitesse,spin,0)
There is no border on the bottom of the image, but it’s very the same lol.
For transition, you have also transition.scaleTo() 
Good night.