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
(以及bounds
和contentsGravity
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));