1
votes

I've got the following trouble. In my app i'm implementing flip-clock. I've got 3 CATransformLayers and can swipe them up-down and down-up. I always have two layers on top with indexes 1 at top and 0 at bottom and one layer down with index 2. So, when i flip down-up, i quickly rotate layer 0 down and transform layer 2 up, so layer 0 could already be visible.

i'm using the following code to do this :

    auto CATransform3D t3d = CATransform3DIdentity;
    t3d.m34 = 1.0/-500.0;
    layer2.sublayerTransform =  CATransform3DRotate(t3d,  -angle  , 1.0, 0.0, 0.0) ;

to flip layer at index 2 ( bottom layer ) up. After this, i immedeately do the following with the layer at index 0 :

    auto CATransform3D t3d = CATransform3DIdentity;
    t3d.m34 = 0.0; // for make sure m34 is zero - excess code
    layer0.sublayerTransform = CATransform3DRotate(t3d,  M_PI  , 1.0, 0.0, 0.0) ;

After all animation completed - of up-down direction - i rearrange transform sublayers to make this action more and more times :

               [container.layer insertSublayer:layer0 above:(CALayer*)[container.layer.sublayers  objectAtIndex:2]] ;

Container is flip-clock's holder base view. The problem is, that when i flip one time - zero layer falls down on the back view normally. After second flip - it's all right too. But after third flip - the layer, that was flipped the very first time ( former layer 2) falls in the back scene with perspective, not looking at the fact, that i reset transformation to m34 = 0.0. What can be the reason for this? As always, any help would be appreciated.

1

1 Answers

0
votes

well, the problem was in transformation speed - i increased it to 2000 ( it was 0.5 ) and the back layer isn't visible anymore!