调整大小时淡入 UIView 阴影

Posted

技术标签:

【中文标题】调整大小时淡入 UIView 阴影【英文标题】:Fading in a UIView shadow while resizing 【发布时间】:2012-10-28 03:56:55 【问题描述】:

我正在尝试在淡入阴影的同时缩放我的UIView,使用以下方法:

    myController.view.layer.shadowOffset = CGSizeMake(0, 3);
    myController.view.layer.shadowColor = [UIColor blackColor].CGColor;
    myController.view.layer.shadowOpacity = 0.0;
    myController.view.layer.shadowPath = [UIBezierPath bezierPathWithRect:myController.view.bounds].CGPath;

    [UIView animateWithDuration:0.3
                     animations:^
                         //shrink the view
                         myController.view.transform = CGAffineTransformMakeScale(0.8, 0.8);

                         //fade in the shadow
                         myController.view.layer.shadowOpacity = 0.8;
                     
                     completion:^(BOOL finished)
                          ...etc

视图正确调整大小,但阴影立即出现而不是淡入。

我做错了吗?我认为shadowOpacity 是可动画的?

【问题讨论】:

【参考方案1】:

您必须使用核心动画来为视图层属性设置动画:

#import <QuartzCore/CAAnimation.h>

CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"shadowOpacity"];
animation.fromValue = [NSNumber numberWithFloat:1.0];
animation.toValue = [NSNumber numberWithFloat:0.8];
animation.duration = 1.0;
[myView.layer addAnimation:animation forKey:@"shadowOpacity"];
myView.layer.shadowOpacity = 0.0;

【讨论】:

您发送给 addAnimation: 的“anim”参数是什么?另外,最后一行是触发动画的部分,还是只是在动画后移除阴影? @Ryan 抱歉,错字,已修复。

以上是关于调整大小时淡入 UIView 阴影的主要内容,如果未能解决你的问题,请参考以下文章

调整 UIView 大小时动画无法按预期工作

在 UWP 中动态调整阴影大小

调整 uiview 的大小以及 uiimageview 的旋转

UIView 调整大小但不是子视图

触发 UITextField 时同步向上滑动 UIView 并调整 UITableView 的大小

通过动画调整 UIView 大小时约束不起作用