代码之家  ›  专栏  ›  技术社区  ›  swapnil patel

如何从可可豆的中心点顺时针旋转nsbutton?

  •  0
  • swapnil patel  · 技术社区  · 6 年前

    我想在我的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 回复  |  直到 6 年前
        1
  •  2
  •   CRD    6 年前

    发生旋转的点受层的 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"];
    

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