我想在Mac应用程序中为NSButton设置动画。
我也按照以下链接进行操作,但是以下代码适用于iOS,不适用于Mac。
How to rotate a flat object around its center in perspective view?
我要实现的目标:
基本上,我想从图像的中心点顺时针旋转图像,就像上面的代码适用于iOS一样。
当前存在的问题:
在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"];
答案 0 :(得分:2)
旋转发生的点受图层的position
和anchorPoint
属性的影响,请参见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"];
设置这些属性的顺序实际上并不重要,结果应该是围绕按钮中心点旋转图像。