如何animation层shadowOpacity?

我有一个视图,我已经把layerOpacity设置为1。

theView.layer.shadowOpacity = 1.0; 

当视图更靠近屏幕时,这看起来很好。 当我把这个观点与另一个有阴影的观点齐平时,他们看起来不太好。 有没有一种方法可以使我的图层上的shadowOpacityanimation为0? 我尝试使用animation块,但似乎这个属性是不可animation的。

替代文字

编辑:请求代码不起作用:

 [UIView animateWithDuration:1.0 animations:^{ splitView2.layer.shadowOpacity = 0;} completion:NULL]; 

这将正常工作:

 #import <QuartzCore/CAAnimation.h> CABasicAnimation *anim = [CABasicAnimation animationWithKeyPath:@"shadowOpacity"]; anim.fromValue = [NSNumber numberWithFloat:1.0]; anim.toValue = [NSNumber numberWithFloat:0.0]; anim.duration = 1.0; [vv.layer addAnimation:anim forKey:@"shadowOpacity"]; vv.layer.shadowOpacity = 0.0; 

对于Swift 3.0:

  let animation = CABasicAnimation(keyPath: "shadowOpacity") animation.fromValue = layer.shadowOpacity animation.toValue = 0.0 animation.duration = 1.0 view.layer.add(animation, forKey: animation.keyPath) view.layer.shadowOpacity = 0.0 

下面的代码适用于我

1)添加QuartzCore框架工作2)导入QuartzCore框架工作

在需要的地方添加下面的代码

 UIImageView * glowimageview = [[[UIImageView alloc]init]autorelease]; [glowimageview setFrame:CGRectMake(500,400,200,200)]; [glowimageview setImage:[UIImage imageNamed:@"144.png"]]; [sender addSubview:glowimageview]; glowimageview.layer.shadowColor = [UIColor redColor].CGColor; glowimageview.layer.shadowRadius = 10.0f; glowimageview.layer.shadowOpacity = 1.0f; glowimageview.layer.shadowOffset = CGSizeZero; CABasicAnimation *shadowAnimation = [CABasicAnimation animationWithKeyPath:@"shadowOpacity"]; shadowAnimation.duration=1.0; shadowAnimation.repeatCount=HUGE_VALF; shadowAnimation.autoreverses=YES; shadowAnimation.fromValue = [NSNumber numberWithFloat:1.0]; shadowAnimation.toValue = [NSNumber numberWithFloat:0.0]; [glowimageview.layer addAnimation:shadowAnimation forKey:@"shadowOpacity"]; 

它会起作用。 根据您的要求更改代码的格式

这里有一个像animation一样的上面的一些材料devise它也可以在这里作为框架通过迦太基https://github.com/sevenapps/SVNMaterialButton

 public init(frame: CGRect, color: UIColor) { super.init(frame: frame) self.backgroundColor = color self.layer.masksToBounds = false self.layer.borderWidth = 1.0 self.layer.shadowColor = UIColor.black.cgColor self.layer.shadowOpacity = 0.8 self.layer.shadowRadius = 8 self.layer.shadowOffset = CGSize(width: 8.0, height: 8.0) } required public init?(coder aDecoder: NSCoder) { fatalError("This class is not set up to be instaciated with coder use init(frame) instead") } public override func layoutSubviews() { super.layoutSubviews() self.layer.cornerRadius = self.frame.height / 4 } public override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { self.animate(to: 0.5, and: CGSize(width: 5.0, height: 5.0), with: 0.5) super.touchesBegan(touches, with: event) } public override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) { self.animate(to: 0.8, and: CGSize(width: 8.0, height: 8.0), with: 0.5) super.touchesBegan(touches, with: event) } private func animate(to opacity: Double, and offset: CGSize, with duration: Double){ CATransaction.begin() let opacityAnimation = CABasicAnimation(keyPath: "shadowOpacity") opacityAnimation.toValue = opacity opacityAnimation.duration = duration opacityAnimation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseOut) opacityAnimation.fillMode = kCAFillModeBoth opacityAnimation.isRemovedOnCompletion = false let offsetAnimation = CABasicAnimation(keyPath: "shadowOffset") offsetAnimation.toValue = offset offsetAnimation.duration = duration offsetAnimation.timingFunction = opacityAnimation.timingFunction offsetAnimation.fillMode = opacityAnimation.fillMode offsetAnimation.isRemovedOnCompletion = false self.layer.add(offsetAnimation, forKey: offsetAnimation.keyPath!) self.layer.add(opacityAnimation, forKey: opacityAnimation.keyPath!) CATransaction.commit() }