6

我有以下代码在 Y 轴上将 CALayer 旋转 -45 度:

#define D2R(x) (x * (M_PI/180.0))

- (void) swipe:(UISwipeGestureRecognizer *)recognizer
{        
    CATransform3D transform = CATransform3DMakeRotation(D2R(-45), 0, 1.0, 0);
    transform.m34 = -1.0 / 850;

    CABasicAnimation *transformAnimation = [CABasicAnimation animationWithKeyPath: @"transform"];
    transformAnimation.fillMode = kCAFillModeForwards;
    transformAnimation.removedOnCompletion = NO;
    transformAnimation.toValue = [NSValue valueWithCATransform3D:transform];
    transformAnimation.duration = 0.5;

    [self.layer addAnimation:transformAnimation forKey:@"transform"];
}

动画有效,但没有透视结束 - 如果我理解正确,请忽略我的 m34 设置。

半途:

在此处输入图像描述

在最后:

在此处输入图像描述

我究竟做错了什么?

4

2 回答 2

2

动画仅在动画期间影响视图的外观。动画结束后它不会应用于视图。你需要自己做这件事。我猜想在添加动画后这样的事情会起作用:

self.layer.transform = transform;

您可以立即执行此操作,因为动画将隐藏它直到动画完成。

于 2013-04-20T00:17:04.987 回答
0

尝试这个 :

- (void) swipe:(UISwipeGestureRecognizer *)recognizer
{        

    CATransform3D transform = CATransform3DIdentity;
    transform.m34 = -10 / 850.0;
    transform = CATransform3DRotate(transform, D2R(-45), 0, 1.0, 0);

    CABasicAnimation *transformAnimation = [CABasicAnimation animationWithKeyPath: @"transform"];
    transformAnimation.fillMode = kCAFillModeForwards;
    transformAnimation.removedOnCompletion = NO;
    transformAnimation.toValue = [NSValue valueWithCATransform3D:transform];
    transformAnimation.duration = 0.5;

    [self.layer addAnimation:transformAnimation forKey:@"transform"];
}

最终效果是这样的:

在此处输入图像描述

于 2013-04-20T09:43:43.463 回答