如何从可可中的中心点沿顺时针方向旋转NSButton?

时间:2018-06-30 09:24:23

标签: objective-c cocoa animation rotation

我想在Mac应用程序中为NSButton设置动画。

我也按照以下链接进行操作,但是以下代码适用于iOS,不适用于Mac。

How to rotate a flat object around its center in perspective view?

我要实现的目标:

基本上,我想从图像的中心点顺时针旋转图像,就像上面的代码适用于iOS一样。 Below result is from iOS which I want.

当前存在的问题:

在Mac应用中,图像从其角点旋转,而不是从中心旋转。

CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];
    animation.fromValue = [NSNumber numberWithFloat:0];
    animation.toValue = [NSNumber numberWithFloat:2 * M_PI];
    animation.duration = 1.0;
    animation.repeatCount = INFINITY;
    animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear];
    [btnScan setWantsLayer:YES];
    [btnScan.layer addAnimation:animation forKey:@"transform.rotation.z"];

This is the result I'm getting currently in mac app.

1 个答案:

答案 0 :(得分:2)

旋转发生的点受图层的positionanchorPoint属性的影响,请参见Anchor Points Affect Geometric Manipulations。这些属性的默认值似乎与文档不匹配,至少在macOS 10.11下以及您使用的哪个版本中都是如此。

尝试通过添加以下四行来设置它们:

[btnScan setWantsLayer:YES];

CALayer *btnLayer = btnScan.layer;
NSRect frame = btnLayer.frame;
btnLayer.position = NSMakePoint(NSMidX(frame), NSMidY(frame)); // position to centre of frame
btnLayer.anchorPoint = NSMakePoint(0.5, 0.5); // anchor point to centre - specified in unit coordinates

[btnScan.layer addAnimation:animation forKey:@"transform.rotation.z"];

设置这些属性的顺序实际上并不重要,结果应该是围绕按钮中心点旋转图像。