【问题标题】:Changing the CALayer anchor point更改 CALayer 锚点
【发布时间】:2014-10-19 07:09:43
【问题描述】:

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

有没有办法改变一个CALayer当前状态的anchorPoint??

转换代码:

     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 度变换的情况下完成了此操作,但我希望它看起来更 3D,因此沿 x 轴应用了 30 度变换。这样看起来这本书就放在桌子上。

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

【问题讨论】:

  • 你能说一下你想达到什么目标吗?到底应该怎么看?
  • 基本上,我必须像翻书一样旋转图层。我已经这样做了,但我希望它看起来更 3D,所以沿 x 轴应用了 30 度变换。所以看起来这本书是放在桌子上的。请检查已编辑的问题。

标签: ios core-animation calayer


【解决方案1】:

而不是改变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 以获得更多参考。

让我知道它是否有效。

【讨论】:

    猜你喜欢
    • 2010-12-30
    • 2011-09-16
    • 1970-01-01
    • 2018-08-17
    • 1970-01-01
    • 2015-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多