在CATransform3dRotate之后更改CALayer的锚点会产生奇怪的结果。我认为问题是,anchorPoint属性是在图层的先前状态(无变换)上设置的,而不是图层的当前状态(变换后)。
有没有办法改变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度变换。所以看起来这本书放在桌子上。
为了旋转,设置锚点是必要的。如果没有,请另外建议......
答案 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以获取更多参考资料。
让我知道它是否有效。