CALayer – CABasicAnimation无法缩放中心/ anchorPoint

使用下面的代码,我一直试图让我的CALayer围绕其中心缩放 – 但它通过左/顶(0,0)缩放。 我看到这个问题: CALayer中的锚点,并试图设置锚点 – 但它是[.5,.5]之前,我设置和设置没有什么区别。 还尝试了设置contentsGravity

设置是我有一个CAShapeLayer添加到CAShapeLayer我做了一些绘图,然后添加CABasicAnimation。 animation运行良好 – 但是它向顶部/左侧缩放 – 而不是视图的中心。

几个小时以来一直在修补这件事 – 这一定是简单的,但我没有得到它。

 shapeLayer.anchorPoint = CGPointMake(.5,.5); shapeLayer.contentsGravity = @"center"; printf("anchorPoint %f %f\n", shapeLayer.anchorPoint.x, shapeLayer.anchorPoint.y); CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"transform.scale"]; animation.fromValue = [NSValue valueWithCATransform3D:CATransform3DIdentity]; animation.toValue = [NSValue valueWithCATransform3D:CATransform3DMakeScale(0.1, 0.1, 1.0)]; [animation setDuration:1.0]; animation.fillMode=kCAFillModeForwards; animation.removedOnCompletion=NO; [shapeLayer addAnimation:animation forKey:@"zoom"]; 

什么是你的图层的bounds

我敢打赌,它有零大小; 尝试将其大小设置为与您的形状相同的大小。

CAShapeLayer将这种形状绘制成一种叠加的forms,与您在普通CALayer使用的contents (以及boundscontentsGravity CAShapeLayer等)无关。 这可能有点混乱。

还要确保在创build视图之后添加animation 如果你想在viewDidLoad中添加animation,它可能不起作用。 尝试将其添加到viewDidAppear。

我只知道Swift,但这里有一个例子:

 override func viewDidAppear (animated: Bool) { addPulsation(yourButton) } func addPulsation (button: UIButton) { let scaleAnimation:CABasicAnimation = CABasicAnimation(keyPath: "transform.scale") scaleAnimation.duration = 1.0 scaleAnimation.repeatCount = 100 scaleAnimation.autoreverses = true scaleAnimation.fromValue = 1.05; scaleAnimation.toValue = 0.95; button.layer.addAnimation(scaleAnimation, forKey: "scale") } 

我花了几个小时来找出如何做到这一点,但没有find任何OSX的解决scheme。 我决定使用CATransform3DMakeTranslation来移动图层,并结合这两个转换。

我的代码:

 NSView *viewToTransform = self.view; [viewToTransform setWantsLayer:YES]; viewToTransform.layer.sublayerTransform = CATransform3DConcat(CATransform3DMakeScale(-1.0f, -1.0f, 1.0f), CATransform3DMakeTranslation(viewToTransform.bounds.size.width, viewToTransform.bounds.size.height, 0));