移动和旋转UIButtons

时间:2013-01-09 10:16:05

标签: ios objective-c uikit

我有一个UI按钮。我希望它从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];

    }];

}

3 个答案:

答案 0 :(得分:0)

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

[button setCenter:newCenter]

其中newCenter是对应的CGPoint

答案 1 :(得分:0)

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

  • 将按钮放在视图(moveView)中,其内容大小与原点0 | 0

  • 相同
  • 如果要进行旋转,请旋转按钮

  • 如果要移动按钮,请翻译moveView

答案 2 :(得分: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