我有一个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进行旋转后的平移