iOS:带有锐利边缘的投影效果

3
我正在尝试为我的一个视图添加一些阴影,并且想要实现的效果是只在一个侧面绘制阴影并让其具有清晰的边缘。我已经尝试了很多方法,但都没有成功(使用视图CALayer + UIBezierPaths的阴影相关属性)。然而,iOS始终会呈现像这样带有软边缘的阴影: enter image description here 但是我真正想要实现的是这样的效果(除了圆角和两侧的锐利边缘除外): enter image description here 是否有任何优雅的方式来实现这一点,或者我必须使用CoreGraphics自己绘制阴影? 附注:我忘了提到,我的视图应该实际上是一个自定义的UIButton,因此在这里重写drawRect:将是一种痛苦的方式。

嘿YllierDev,你能否解释一下你的最终代码块是什么样子以实现上述效果?我正在尝试学习如何在按钮上应用投影效果,只在右侧显示投影。如果你能帮助我,那就太棒了!提前感谢你。 - Pavan
2个回答

4

我曾经使用面罩消除了阴影...也许你可以尝试一下。

    CALayer *mask = [[[CALayer alloc] init] autorelease];
    mask.backgroundColor = [UIColor blackColor].CGColor;
    mask.frame = CGRectMake(0.0, 0.0, yellowView.bounds.size.width + shadowWidth, yellowView.bounds.size.height);
    yellowView.layer.mask = mask;

听起来是个不错的建议。为什么我没想到呢...(扇自己一巴掌) - YllierDev
谢谢Matt,使用掩码是正确的选择。我真的不知道为什么我没有想到那个 :D - YllierDev

2

我认为您想要更改的是shadowRadius值 - 将其设置为零,您应该会得到您想要的锋利边缘:

myView.layer.shadowRadius = 0;

谢谢您的建议,但将shadowRadius设置为0会导致所有边缘都很锐利,而我只想在一侧保留锐利的边缘。 - YllierDev
抱歉,我错过了问题的那一部分。你尝试使用类似这样的东西吗:yellowView.layer.shadowPath = CGRectMake(yellowView.bounds.size.width, 0, 1, yellowView.bounds.size.height);?这可能会让你走得更远,但是对于模糊效果,模糊可能会超出视图的边界上下移动。 - Rob Reuss
如果您无法覆盖drawRect,则可能需要使用子视图来实现此目的,因此父视图为clipsToBounds = YES,并且您有一个子视图用于黄色补丁,其中宽度比右侧边缘短10像素,然后在黄色补丁上放置阴影。如果您认为这对您有用,我将在更完整的答案中编写它。 - Rob Reuss

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接