【问题标题】:Question about anchor point关于锚点的问题
【发布时间】:2011-09-27 15:54:06
【问题描述】:

所以我最近一直在玩动画,我遇到了锚点。我了解锚点默认为 (0.5, 0.5),即视图的中间,您可以更改它,使锚点位于其中一个边框上。我的问题是,如果我希望我的视图围绕视图超级视图中的特定点旋转,我该怎么做?非常感谢任何帮助

【问题讨论】:

    标签: animation calayer rotation


    【解决方案1】:

    查看这个问题how to rotate CALayer at one point

    另外——虽然我猜你可能已经这样做了——阅读核心动画编程指南,Layer Geometry and Transforms

    您的问题不同之处在于您要指定视图的超级视图中的旋转点。为此,您需要将该超级视图点转换为子视图。你可以这样做:

    1. 获取您的超级视图边界,例如(0, 0, 500, 500)
    2. 获取您的子视图框架,例如(50、50、100、100)
    3. 获取您的超级视图旋转点,例如(75, 75)
    4. 将其转换为相对于子视图的点,如下所示:

      CGFloat subviewX = 75.0f - subview.frame.x;
      CGFloat subviewX = 75.0f - subview.frame.y;
      
    5. 这给出了预期的结果 (25.0f, 25.0f)

    要使用 CABasicAnimation 旋转 CALayer,请查看此问题的选定答案:CALayer with rotation animation

    【讨论】:

    • 谢谢,但我正在使用 CABasicAnimation 执行此操作,因此您在这里给我的内容不适用于我的情况...知道其他方法吗?谢谢!
    • 好吧,我现在有点困惑。链接真的只告诉我如何使用我已经知道的 CABasicAnimation 进行旋转。我要找的基本上就是你上面做的,在superview中计算旋转点,但是你做的对我不起作用,因为图层中的坐标系不同,如果(0.5,0.5)是中心,例如,25 会在屏幕外方式...这让我发疯了,您可以给我任何进一步的建议吗?
    【解决方案2】:

    我自己想通了:我希望锚点位于屏幕左边框上,所以我做了以下操作:

    CGFloat subviewX = ((1/view.frame.size.width)*view.frame.origin.x) * (-1);
    CGFloat subviewY = 0.5;
    

    【讨论】:

    • 优秀。本来打算回答的,但今天有点被虫子缠住了!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多