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