难以找到旋转变换的正确锚点

时间:2011-11-10 17:41:02

标签: objective-c cocoa-touch core-animation ios5 cgaffinetransform

我正在设置按钮位置的动画,围绕一个圆圈旋转。这会产生类似UISwitch的行为,除非它更加花哨。按钮旋转,但最终离开所需位置约0.25弧度。我正在试图弄清楚锚点的位置,使按钮围绕其原点旋转一个完美的圆圈。

这是我用来使按钮“轨道”的代码,其原始位置的半径为120像素。

float offsetX=120;
float offsetY=0;

enableDisableButton.layer.anchorPoint =
     CGPointMake(offsetX/enableDisableButton.frame.size.width,                 
                 offsetY/enableDisableButton.frame.size.height);

我使用以下方法进行计算。为degrees传递90的参数,我希望看到按钮从180˚位置开始移动到90˚,距其原点120像素

-(CGAffineTransform)calculateLabelPositionFromFixedPointWithOffsetClockwiseInDegrees:(float)degrees
{

    float rotation = degrees*(2*M_PI/360);
    CGAffineTransform transform24 = CGAffineTransformMakeRotation(rotation);
    NSLog(@"rotation: %f", rotation);
    return transform24;
}

这个小的0.25弧度偏差意味着我需要在视觉上确认每个按钮的位置,并且不能以编程方式轻松调整其位置。任何帮助确定旋转按钮的正确方法都是值得赞赏的。

我尝试了其他旋转对象的方法。例如,我有一个箭头 <--------x,我想围绕x围绕这个箭头旋转。此操作的正确定位点是什么?是[1,0.5]吗?

执行此类旋转的更简单方法是将对象放在对称UIView内,将其居中于所需的旋转点并指定旋转变换。这有效,但要求视图大两倍:

Y----x----Y&lt;这使Y绕中心点X旋转而没有任何锚点调整。这是在模拟仪表等中旋转箭头的非常有用的方法。

2 个答案:

答案 0 :(得分:0)

&#34;进行这种旋转的一种更简单的方法是将对象放在对称的UIView中,将其置于所需的旋转点并指定旋转变换。&#34;这样很好。

答案 1 :(得分:0)

示例中enableDisableButton的定位点是

CGPointMake(offsetX/enableDisableButton.frame.size.width, 0)

即。没有垂直居中的按钮。围绕锚点旋转将导致按钮偏移到期望位置的顶部或底部。变换看起来不错,所以我认为它只是一个锚点。它应该是:

CGPointMake(offsetX/enableDisableButton.frame.size.width, 0.5f)