【问题标题】:Strange behaviour of rotation transform for CALayerCALayer 旋转变换的奇怪行为
【发布时间】:2013-08-06 02:24:35
【问题描述】:

我正在将 CALayer 用于交互式图书引擎,并希望围绕它的中心旋转 CALayer,但是当我将旋转变换(使用基于用户输入的角度)应用到 CALayer 时,它变得疯狂:图层以非常奇怪的方式拉伸和移动并消失。我要做的是

[CATransaction begin];
[CATransaction setValue: (id) kCFBooleanTrue forKey: kCATransactionDisableActions];
...
layer.transform = CATransform3DMakeRotation(angle, 0, 0, 1);
...
[CATransaction commit];

有趣的是,当我的角度是 M_PI 或 M_PI/2 时,或者它的比例变换一切正常,但是当它的旋转和任何其他角度层变得疯狂时。

有人知道发生了什么以及如何解决吗?

【问题讨论】:

  • CALayer 的原点在中心吗?如果没有,您需要先将原点转换为中心,进行旋转,然后再将其转换回来。
  • 试试这个layer.anchorPoint = CGPointMake(0.5, 0.5);
  • 您的图层是否属于视图?如果是这样,视图是否使用自动布局?自动布局系统将尝试设置视图的框架,如果您的视图被转换,这通常会导致奇怪的结果。
  • 是的,我的原点在中心,我尝试强制使用建议的layer.anchorPoint = CGPointMake(0.5, 0.5);,但没有任何改变。这不是视图层 - 我用 [CALayer 层] 创建它

标签: ios objective-c calayer quartz-graphics


【解决方案1】:

我自己找到了原因:这是因为我并行使用 .frame 而不是 .position 属性移动了层:框架属性本身是根据变换计算的,因此设置它会产生“疯狂”的行为。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-06
    • 2017-03-07
    • 1970-01-01
    相关资源
    最近更新 更多