使用下面的代码,我一直在试图让我的CALayer的缩放围绕其中心 - 但它通过扩展左/顶(0,0)。 我看到了这样一个问题: 锚定点的CALayer ,并尝试设置anchorPoint -但它是[3.5,0.5]之前我将它设置和设置都没有区别。 也尝试设置contentsGravity
。
该设置是我一个CAShapeLayer
加入self.view.layer
我做一些图中,然后加入CABasicAnimation。 动画罚款运行 - 但它向顶部/左鳞 - 视图的不是中心。
一直在摆弄这几个小时 - 它必须是简单的东西,但我没有得到它。
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
绘制形状,种类覆盖的,独立的contents
(以及bounds
和contentsGravity
等),您会在普通使用CALayer
。 它可以是一个有点混乱。
另外,还要确保您要添加动画在创建视图之后。 如果你想在viewDidLoad中添加动画,它可能会无法正常工作。 尝试添加它,而不是到viewDidAppear。
我只知道斯威夫特,但这里有一个例子:
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")
}
这是一个古老的线程,但在此情况下,任何人帮助。
此保险业监督的坐标空间的问题。 你只需要设置绘图空间和路径的空间。 此代码的工作对我来说...
......只是把这个在动漫创作方法的开始(在方法中父视图)...
// add animation to remap (without affecting other elements)
let animationLayer = CALayer()
layer?.addSublayer(animationLayer). // (don't use optional for iOS)
// set the layer origin to the center of the view (or any center point for the animation)
animationLayer.bounds.origin .x = -self.bounds.size.width / 2.0
animationLayer.bounds.origin .y = -self.bounds.height / 2.0
// make image layer with circle around the zero point
let imageLayer = CAShapeLayer()
animationLayer.addSublayer(imageLayer)
let shapeBounds = CGRect(x: -bounds.size.width/2.0,
y:-bounds.size.height/2.0,
width: bounds.size.width,
height: bounds.size.height)
imageLayer.path = CGPath(ellipseIn: shapeBounds, transform: nil)
imageLayer.fillColor = fillColour
// **** apply your animations to imageLayer here ****
此代码适用于iOS和MacOS不变 - 除了可选的需要上层为MacOS。
(顺便说一句,你需要在动画完成后删除动画层!)
我花了几个小时,以找出如何做到这一点根据的中心,但找不到任何OSX的解决方案。 我决定用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));