1

我有一个 UIbutton。我希望它从 A 点移动到 B 点。在移动时,该按钮必须进行完整的 360 度旋转。

在某些事件之后,我希望 UIButton 回到它的位置,这次是反向旋转。

我写了这段代码,但是没有用。我看到按钮以意想不到的方式旋转。我在这里想念什么?

移动:

    [UIView animateWithDuration:0.3 animations:^{

        CGAffineTransform rotate360AntiClockWise = CGAffineTransformMakeRotation(M_PI_2);

        CGRect initialFrame = button.frame;
        [button setTransform:rotate360AntiClockWise];
        [button setFrame:CGRectMake(initialFrame.origin.x - 140.0, initialFrame.origin.y, initialFrame.size.width, initialFrame.size.height)];

    }];

回到原来的位置

   [UIView animateWithDuration:0.4 animations:^{
        CGAffineTransform rotate360ClockWise = CGAffineTransformMakeRotation(-M_PI_2);

        [button setFrame:originalFrame]; //for movement 
        [button setTransform:rotate360ClockWise];

    }];

}
4

3 回答 3

0

我目前无法尝试,但如果我记得正确使用框架会在应用转换时出现问题。您是否尝试过设置按钮的中心?

[button setCenter:newCenter]

newCenter对应的在哪里CGPoint

于 2013-01-09T10:46:54.273 回答
0

在不弄乱视图的变换矩阵的情况下进行旋转和变换的最简单方法是:

  • 将按钮放置在具有相同帧大小且原点为 0|0 的视图 (moveView) 内

  • 当你想旋转时,旋转按钮

  • 当你想移动按钮时,翻译 moveView

于 2013-01-09T10:47:02.690 回答
0

请分三步完成

CGAffineTransform matOne = CGAffineTransformMakeTranslation(x_offset, y_offset);
CGAffineTransform matTwo = CGAffineTransformMakeRotation(M_PI_2);
CGAffineTransform matResult = CGAffineTransformConcat(matOne, matTwo);
// Finally
[button setTransform:matResult];

我希望这可以帮助你。请确保 Concat 将 matOne 作为第一个参数。

这也是另一个问题的可能重复: translation after rotation view using CGAffine

于 2013-01-09T10:57:21.863 回答