移动和旋转uibutton



我有一个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];
    }];
}

我现在不能尝试,但是如果我记得正确使用框架会在应用转换时导致问题。你试过把按钮调到中间吗?

[button setCenter:newCenter]

其中newCenter为对应的CGPoint

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

  • 将按钮放置在与原点0|0相同帧大小的视图(moveView)中

  • 当你想做一个旋转,旋转按钮

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

请分三步完成

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

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

这也可能是另一个问题的重复:使用CGAffine进行旋转后的平移

最新更新