我似乎无法在按钮上进行简单的 3D 转换,并且文档似乎没有帮助。我从基于 View 的应用程序模板开始。我添加了 QuartzCore 框架并将其导入到 ViewController header 中。在界面生成器中,我拖出两个圆形矩形按钮并将它们分别连接到button1和button2,并将它们连接到buttonPressed:方法。
快速运行注释掉的动画可验证只有单击的按钮才会更改其标签。
当动画恢复后,我收到错误“sender.transform = t;”上的“setTransform:”参数 1 的类型不兼容行(现在固定行更改为 [sender.layer setTransform:t];)
如何让它旋转 360 度。我认为问题在于开始和结束状态是相同的,所以它不知道在任何地方旋转。
这是 .h,(由于格式原因,我在本文中省略了导入)
@interface animation2ViewController : UIViewController {
IBOutlet UIButton *button1;
IBOutlet UIButton *button2;
}
-(IBAction) buttonPressed:(UIButton *)sender;
@end
以及 .m 文件
#import "animation2ViewController.h"
@implementation animation2ViewController
-(IBAction)buttonPressed:(UIButton *)sender {
[sender setTitle:@"new title" forState:UIControlStateNormal];
[UIView animateWithDuration:1.0
delay:0.0
options:UIViewAnimationCurveEaseInOut
animations:^{
CATransform3D t = CATransform3DIdentity;
t.m34 = -1 / 1000;
t = CATransform3DRotate(t, 360 * M_PI / 180, 0.0, 1.0, 0.0); //ultimately want 360 degrees but starting here first
[sender.layer setTransform:t];
}
completion:^(BOOL finished) {
}];
}
最佳答案
M_PI 是 180° 旋转,因此这意味着您旋转 360° 90 次。
尝试 t = CATransform3DRotate(t, M_PI, 0.0, 1.0, 0.0);
对于 setter 错误,请尝试 [sender.layer setTransform:t];
因为你可以直接变换图层
最后你需要在最后提交动画,否则它不会动画
[UIView commitAnimations];
关于iphone - CATransform3d 一个 UIButton,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5163160/