gpt4 book ai didi

ios - 为 CALayer 的 shadowPath 设置动画时的平滑动画

转载 作者:可可西里 更新时间:2023-11-01 03:55:52 25 4
gpt4 key购买 nike

在我的应用程序中,我有一个使用 CALayer 来实现阴影的 UIView:

@implementation MyUIView

- (instancetype) initWithFrame:(CGRect)frame {
self = [super initWithFrame:frame];
if(!self) return self;

self.layer.shadowColor = [UIColor colorWithWhite:0 alpha:.2].CGColor;
self.layer.shadowOffset = CGSizeMake(0, 2);
self.layer.shadowOpacity = 1;
self.layer.shadowRadius = 1;

return self;
}

@end

如果我想要任何接近合理性能的东西,我必须定义 CALayershadowPath:

@implementation MyUIView

- (void) setFrame:(CGRect)frame {
[super setFrame:frame];

self.layer.shadowPath = CGPathCreateWithRect(self.bounds, NULL);
}

@end

每当我为这个 UIView 设置动画时,我注意到两件事:

  1. 如果我使用shadowPath,阴影会随着旋转和帧大小的变化而很好地动画化。这里需要注意的是动画速度非常慢,并且普遍缺乏性能。

  2. 如果我使用shadowPath 每当UIView 动画时动画是流畅和及时的,但是阴影的过渡本身与没有 shadowPath 的情况相比,它更像 block (并且更不平滑)。

示例:

编辑:

值得注意的是,这些动画是隐式的——我自己并没有调用它们。它们是 UIViewController 随设备方向旋转的结果。阴影位于 UIView 上,在旋转期间会改变大小。

最佳答案

我试图重现您提供的两个 gif 中显示的行为,但没有成功(也许您可以使用动画代码编辑您的问题,例如 UIView animateWithDuration:animations:)。

然而,在我脑海深处的某个地方,我记得我偶尔遇到过类似的问题,结果我不得不光栅化 View 以使其平滑。

所以我不能保证它能解决你的问题,但试一试:

self.layer.shouldRasterize = YES;
self.layer.rasterizationScale = [[UIScreen mainScreen] scale];

关于ios - 为 CALayer 的 shadowPath 设置动画时的平滑动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28787395/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com