1

我试图以UIImageview以下方式在一个阴影上放置阴影:

imageView.layer.shadowColor = [UIColor purpleColor].CGColor;
imageView.layer.shadowOffset = CGSizeMake(0, 1);
imageView.layer.shadowOpacity = 1;
imageView.layer.shadowRadius = 1.0;
imageView.clipsToBounds = NO;

但是当UIImageview没有图像或背景颜色作为清晰的颜色阴影时不显示。我什至尝试放置透明图像,但它仍然没有显示。请帮忙。

4

2 回答 2

5

如果图像视图不包含任何内容,则没有什么可以制作阴影。在这种情况下,您可以做的是定义一个明确的阴影矩形,而不是使用图像内容:

CGPathRef shadowPath = CGPathCreateWithRect(imageView.bounds, NULL);
imageView.layer.shadowPath = shadowPath;
CGPathRelease(shadowPath);

事实上,在一般情况下添加阴影时,这种技术可以提供显着的性能提升,因为不需要根据图层内容动态计算阴影。例如,您可以使用此技术来提高滚动性能。Apple 在他们的一个 WWDC 视频中提到了这一点。

于 2013-04-12T12:30:58.847 回答
0

如果您想要一个没有图像的阴影,那么请寻求Mike Weller's解决方案,explicit shadow rect老实说,我比我的更喜欢这个答案,但作为替代方案,您可以尝试设置maskToBOundsNO添加一个shadowPath喜欢:

 // Set your basic shadow properties.
 imageView.layer.shadowColor = [[UIColor purpleColor] CGColor];
 imageView.layer.shadowOpacity = 1.0f;
 imageView.layer.shadowOffset = CGSizeMake(0, 1.0f);
 imageView.layer.shadowRadius = 1.0;

 // Unmask from bounds
 imageView.layer.masksToBounds = NO;

 // Create a UIBezierPath
 UIBezierPath *path = [UIBezierPath bezierPathWithRect:imageView.bounds];

 // Set the UIBezierPath (path) to the shadowPath
 imageView.layer.shadowPath = [path CGPath];

预先警告,如果用于很多事情,这会影响性能,但如果用于一两件事情,我只会注意到如果有任何性能影响较小。

但就像我说我喜欢Mike Weller's解决方案一样,我非常喜欢它,我可能会自己更改代码。我只提供一个替代方案。

于 2013-04-12T12:46:31.303 回答