我在一个特定的位置有一个按钮(实际上有四个),我想同时旋转和平移,因此我选择使用CGAffineTransformMake并提供转换矩阵。
但是我注意到,如果我想翻译x = -100,例如,按钮将首先立即移动x = +200,然后将其转换为x = -100。
有没有办法让它翻译而不会向相反的方向转变?
CGAffineTransform transform = CGAffineTransformMake(-1, 0, 0, -1, -100, 0); // Spins 180° and translates
[UIView beginAnimations:@"Show Menu" context:nil];
[UIView setAnimationDuration:2.4];
_menuButton1.transform = transform;
[_menuButton1 setAlpha:1.0];
[UIView commitAnimations];
答案 0 :(得分:2)
您不应该使用该动画方法。在iOS 4.0之后,Apple不鼓励它。 https://developer.apple.com/library/ios/documentation/uikit/reference/uiview_class/UIView/UIView.html#//apple_ref/occ/clm/UIView/beginAnimations:context:
首选方法是......
[UIView animateWithDelay:0.0
duration:2.4
options:0
animations:^() {
_menuButton1.transform = CGAffineTransformMake(-1, 0, 0, -1, -100, 0);
_menuButton1.alpha = 1.0;
}
completion:nil];
当你回复我的评论时,我会编辑我的答案。
好的,这种转变的原因是你试图在使用AutoLayout约束它时翻译视图。
我不知道它为什么会导致问题,但确实如此。
您修复它的两个选项是......
对于第二种选择,我可以推荐Ray Wenderlich及其团队出版的“iOS6 by Tutorials”一书。
http://www.raywenderlich.com/store/ios-6-by-tutorials
我用它来学习如何正确地进行AutoLayout。
答案 1 :(得分:2)
你可以从其中一个变换开始,让我们说翻译:
CGAffineTransform transform = CGAffineTransformMakeTranslation(-100.0f, 0.0f);
然后添加旋转:
transform = CGAffineTransformRotate(transform, (float)M_PI_2);
最后将此变换设置为视图的transform
属性。