更改CALayer锚点

时间:2014-10-19 07:09:43

标签: ios core-animation calayer

在CATransform3dRotate之后更改CALayer的锚点会产生奇怪的结果。我认为问题是,anchorPoint属性是在图层的先前状态(无变换)上设置的,而不是图层的当前状态(变换后)。

enter image description here

有没有办法改变CALayer当前状态的锚点?

转换代码:

     CATransform3D transform = CATransform3DIdentity;

        transform.m34 = -(1.0/800.0);

        videoPlayerView.layer.zPosition = 100;
videoPlayerView.layer.transform = CATransform3DRotate(transform, (30*M_PI)/180, 1.0f, 0.0f, 0.0f);

更改锚点的代码

if(videoPlayerView.layer.anchorPoint.x != 0.0)
{
    videoPlayerView.layer.anchorPoint = CGPointMake(0.0, 0.5);

    videoPlayerView.layer.position = CGPointMake(videoPlayerView.layer.frame.origin.x - videoPlayerView.layer.frame.size.width/2,videoPlayerView.layer.position.y);
}

基本上,我必须像书翻一样旋转图层。我已经在不使用30度transofrm的情况下完成了这项工作,但我希望它看起来更加3D,因此沿x轴应用了30度变换。所以看起来这本书放在桌子上。

为了旋转,设置锚点是必要的。如果没有,请另外建议......

1 个答案:

答案 0 :(得分:0)

而非更改anchorPoint使用

CATransform3DTranslate(transform, 50.0000f, 0.0000f, 0.0000f);

沿X翻译50.00分
应用0.40%的透视图,或者您可以使用现在使用的相同代码

使用Y旋转CAlayer。

CATransform3D transform = CATransform3DIdentity;
CATransform3D tmp = CATransform3DIdentity;
transform = CATransform3DRotate(transform, 0.0146f, 0, 1, 0);
transform = CATransform3DTranslate(transform, 50.0000f, 0.0000f, 0.0000f);
tmp = CATransform3DIdentity;
tmp.m34 = 0.0040f;
transform = CATransform3DConcat(transform, tmp);

查看link以获取更多参考资料。

让我知道它是否有效。

相关问题