Как добавить продолжительность времени при выполнении переворота с использованием CATransform3DRotate

Спасибо за помощь из моего первого поста здесь, чтобы я мог сделать вертикальный переворот, и код выглядит

  @interface ViewController (){
        CALayer *plane;
    }
    @end

    @implementation ViewController

    -(void)viewDidLoad
    {
        [super viewDidLoad];

        [self addALayer];


    }
    - (void)addALayer{


        plane                   =   [CALayer layer];
        plane.backgroundColor   =   [[UIColor orangeColor] CGColor];
        //[plane insertSublayer:normalBackground atIndex:0];

        plane.opacity           =   1;
        plane.frame             =   CGRectMake(0, 0, 300, 100);
        plane.position          =   CGPointMake(250, 150);
        plane.anchorPoint       =   CGPointMake(0.5, 0.5);
        plane.borderColor       =   [UIColor whiteColor].CGColor;
        plane.borderWidth       =   3;
        plane.cornerRadius      =   10;
        [self.view.layer addSublayer:plane];

    }
- (IBAction)click:(id)sender {
    BOOL isClicked                  =   ((UIButton*)sender).selected;
    ((UIButton*)sender).selected    =   !((UIButton*)sender).selected;
    CATransform3D transfrom         =   CATransform3DIdentity;
    transfrom.m34                   =   -1.0/ 500;
    if ( !isClicked ) {
        transfrom                   =   CATransform3DRotate(transfrom, degToRad(180.0), 1, 0, 0);
        plane.transform             =   transfrom;
    }
    else 
        plane.transform                 =   transfrom;

}

Мой вопрос, как можно сделать это с анимацией. Я пытался использовать

UIView animateWithDuration(NSTimeInterval) delay:(NSTimeInterval) options:(UIViewAnimationOptions) animations:^(void)animations completion:(BOOL finished)completion

но все равно не работает. Я не уверен, что блок анимации - хорошая идея для этой анимации.

Ребята, у вас есть идеи по этому поводу.

1 ответ

Решение

Использовать CATransaction изменить неявные значения по умолчанию

[CATransaction begin];
[CATransaction setAnimationDuration:1]; // in seconds

// Change layer animatable properties
plane.transform = transform;    

[CATransaction commit];
Другие вопросы по тегам