如何在 UIImage 边界上创建阴影效果

Posted

技术标签:

【中文标题】如何在 UIImage 边界上创建阴影效果【英文标题】:How to create shadow effect on UIImage bounds 【发布时间】:2017-08-26 09:07:11 【问题描述】:

我有一个UIImageView,其中我显然有一个UIImage。我只想在UIImage 上创建阴影效果。我的问题是我无法在UIImageView 中获得UIImageCGRect,所以我可以使用以下方法对其应用阴影效果。

[mImageView.layer.shadowColor   = [UIColor grayColor].CGColor;
mImageView.layer.shadowOffset  = CGSizeMake(0.0f, 0.0f);
mImageView.layer.shadowOpacity = 0.9f;
mImageView.layer.masksToBounds = NO;
CGRect imageFrame = mImageView.frame;

UIEdgeInsets shadowInsets     = UIEdgeInsetsMake(0, 0, -1.5f, 0);
UIBezierPath *shadowPath      = [UIBezierPath bezierPathWithRect:UIEdgeInsetsInsetRect(imageFrame, shadowInsets)];
mImageView.layer.shadowPath    = shadowPath.CGPath;

请考虑针对此问题附上的图片。 这个问题也很关键,因为UIImage 可以是一个刚性尺寸的图像,因为它是一个裁剪的图像,正如您在所附图片中看到的那样。

UIImageView’s 边界等于视图的边界。所以当使用上述方法应用效果时,它会在整个UIImageView 上创建一个UIBezierPath,而不仅仅是UIImage。与方法一样,我无法获得UIImage 的确切CGRect

有什么解决办法吗?我错过了什么?

cropped image

【问题讨论】:

为什么我会得到减分 【参考方案1】:

UIImage 总是矩形的,UIImageView 也是如此。我相信您只想在裁剪区域的锯齿状边界周围放置阴影,对吗?如果是这种情况,则不能使用此方法。您需要使用 CoreGraphics 或其他,以获得您想要的效果。例如,您可以在内存中创建此图像的副本,将其变黑,然后对其进行模糊处理并将其粘贴到图像后面以创建阴影效果。

【讨论】:

以上是关于如何在 UIImage 边界上创建阴影效果的主要内容,如果未能解决你的问题,请参考以下文章

如何在不丢失阴影饱和度的情况下将带有阴影的 UIBezierpath 转换为 UIImage

这种 ANDROID边界效果怎么做的.发光或者叫阴影

如何在android中的drawable上添加阴影效果

在 UITextView 上滚动内阴影

如何在CSS圆角上加个阴影效果?

如何利用shader在文字上添加渐变阴影的效果