2

我正在尝试顺时针旋转 NSButton 直到用户手动中断它。这是我用来完成此操作的代码。我知道它曾经在某个时候起作用。知道如何解决吗?提前致谢!

 
    CABasicAnimation *a = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];
    a.fromValue = [NSNumber numberWithFloat:0];
    a.toValue = [NSNumber numberWithFloat:-M_PI*2];
    [self.reloadButton.layer setAnchorPoint:CGPointMake(0.5, 0.5)];
    a.duration = 2.0; // seconds
    a.repeatCount = HUGE_VAL;
    [self.reloadButton.layer addAnimation:a forKey:nil];
 
4

3 回答 3

0

只要我设置,您的代码对我来说就可以正常工作reloadButton.wantsLayer = YES;


在您的应用程序中启用核心动画支持

在 iOS 应用程序中,Core Animation 始终处于启用状态,并且每个视图都由一个层支持。在 OS X 中,应用程序必须通过执行以下操作显式启用 Core Animation 支持:

  • 链接到 QuartzCore 框架。(iOS 应用只有在明确使用 Core Animation 接口时才必须链接到这个框架。)
  • 为一个或多个 NSView 对象启用层支持
于 2015-07-10T00:19:11.093 回答
0

尝试这个

    CABasicAnimation *rotation;
    rotation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];
    rotation.fromValue = [NSNumber numberWithFloat:0];
    rotation.toValue = [NSNumber numberWithFloat:(M_PI)];
    rotation.duration = 0.2; // Speed
    rotation.repeatCount = 1; // Repeat forever. Can be a finite number.
    [yourButton.layer addAnimation:rotation forKey:@"Spin"];
    [yourButton.layer setZPosition:100];
    yourButton.transform = CGAffineTransformMakeRotation(M_PI_2);

您可以根据自己的方便更改/设置持续时间、repeatCount 和 toValue。

于 2015-07-10T06:29:25.813 回答
-2

[编辑1]

在看到这是针对 NS 与 UI 按钮之后,有几个选项:

1)为您的 OSX 版本使用 NSTimer 和正确的轮换例程(请参见下面的链接)

http://digerati-illuminatus.blogspot.com/2009/09/how-do-you-rotate-nsbutton-nstextfield.html

2) 如果您使用的是 OSX 10.5 或更高版本,则支持 CoreAnimation,并且实际上应该支持以下 NSButtons。

维基链接

http://en.wikipedia.org/wiki/Core_Animation

[ORIGINAL] 试试这个代码:

[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:5000000];
CGAffineTransform rr=CGAffineTransformMakeRotation(5000000);
reloadButton.transform=CGAffineTransformConcat(reloadButton.transform, rr);
[UIView commitAnimations];

这是一个显示两种方法的 SO 问题的链接

UIView 旋转

于 2012-06-28T00:54:34.293 回答