UIView 图层阴影在旋转后变暗

Posted

技术标签:

【中文标题】UIView 图层阴影在旋转后变暗【英文标题】:UIView layer shadow darkens after rotation 【发布时间】:2013-04-11 15:47:25 【问题描述】:

我有一个 UIView 用作标题,并且我已将阴影应用到此视图。它按照我的意图出现在屏幕上,但是在旋转之后,阴影会变暗两倍,就好像它被重新绘制在自身之上一样。随后的旋转使其更暗。这是标题和阴影的代码:

self.header = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, HEADER_HEIGHT)];
self.header.backgroundColor = [UIColor whiteColor];
self.header.autoresizingMask = UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleWidth;

// Drop shadow.
self.header.layer.shadowColor = [UIColor blackColor].CGColor;
self.header.layer.shadowOpacity = 0.5;
self.header.layer.shadowRadius = 2.0;
self.header.layer.shadowOffset = CGSizeMake(0, 2);
//        self.header.layer.shouldRasterize = YES;
//        self.header.layer.rasterizationScale = [UIScreen mainScreen].scale;

这段代码都出现在我的View Controller的viewWillLayoutSubviews中,在方法的开头调用了[super willLayoutSubviews]。我尝试将相同的代码放在 viewWillAppear:animated 中无效。

【问题讨论】:

【参考方案1】:

在写出这个问题时,我想出了解决方案。 每次调用 viewWillLayout 子视图时,我都在重新初始化标题。 除了效率低下之外,这也导致阴影由于某种原因而被自身覆盖。 我通过在 loadView 中初始化所有视图并在 viewWillLayoutSubviews 中进行框架设置来解决此问题。这解决了问题,并且更好,因为我没有重新初始化已经存在的对象。

【讨论】:

以上是关于UIView 图层阴影在旋转后变暗的主要内容,如果未能解决你的问题,请参考以下文章

向我的 UIView 添加阴影的最佳方法是啥

使用 UIBezierPath 向 UIView 添加阴影

带有切出段和阴影的 UIView

UIView iOS Swift下的多个阴影

three.js:在一定距离内,整个场景在阴影中变暗

ps如何设置阴影