CATransform3d一个UIButton

5
我似乎无法在按钮上使用简单的三维变换,文档也没有提供帮助。我从View-based应用程序模板开始。我添加了QuartzCore框架并在ViewController头文件中导入它。在界面构建器中,我拖出两个Round Rect Buttons,并将它们分别连接到button1和button2,并将它们都连接到buttonPressed: 方法。
取消注释动画并快速运行可验证仅被点击的按钮更改其标签。
将动画添加回来后,我遇到了错误: "sender.transform = t;" 行中参数1不兼容 'setTransform:' (现在已更正为 [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) {

                     }];

}
2个回答

2

M_PI是一个旋转180度的值,这意味着你需要旋转90次360度。
尝试使用t = CATransform3DRotate(t, M_PI, 0.0, 1.0, 0.0);
对于setter错误,请尝试使用[sender.layer setTransform:t];
因为你只需要转换层

最后,在动画结束时需要提交动画,否则它将不会执行动画
[UIView commitAnimations];


谢谢,我知道M_PI是180,看起来我错过了除以180的部分。(我现在会修复它)当我回到我的Mac时,我会尝试剩下的部分。 - Joe_Schmoe
将sender.transform = t;更改为[sender.layer setTransform:t];,现在按钮可以旋转了。我不需要添加[UIView commitAnimations];这一行。我认为由于使用了块,这是不必要的。现在我该如何让它旋转360度呢?当我从180度切换到360度时,我假设它不知道要完全旋转,而是因为起点和终点相同,所以没有地方可以进行动画处理。 - Joe_Schmoe
我也问了自己这个问题,但没有找到好的解决方案,我的解决方法是将动画做两次。 - Seega

1

尝试这个:

  1. 旋转 1/3 个完整的旋转
  2. 执行动画

你可能已经弄清楚了,因为你的帖子已经过去一年了,但对于任何有同样问题的人,请尝试这样做,应该可以解决。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接