如何在UIView上设置渐变边框?
在UIView
上添加一个简单的边界非常简单。 你只需链接到QuartzCore
,导入它,并使用:
self.view.layer.borderColor = [UIColor redColor].CGColor; self.view.layer.borderWidth = 2.0f;
我的问题是…有没有办法使这个边界使用渐变。 我知道如何将渐变遮罩应用于整个视图,而不仅仅是边界。 我假设这可能涉及到一个自定义的视图和CoreGraphics
绘图内drawRect:
但我不知道从哪里开始。
我不完全确定你的意思是“渐变”。 既然你已经说过你已经使用核心graphics来对graphics应用渐变,那么我会假定你的意思是(而不是前面的答案所指的阴影)。
您不能将渐变应用于边框。 但是,您可以使用自定义形状创build自己的边框。 最简单的方法是创build两个path,一个外部path和一个内部path。 为了简单起见,我们假设path是一个简单的矩形(在drawRect
给出的矩形):
UIBezierPath *path = [UIBezierPath bezierPathWithRect:rect];
第二条path将是比第一条path小的内部path(足以构成边界):
//To create a 1.0f borderWidth CGRect innerRect = rect; innerRect.origin.x += 1.0f; innerRect.origin.y += 1.0f; innerRect.size.width -= 2.0f; innerRect.size.height -= 2.0f; UIBezierPath *innerPath = [UIBezierPath bezierPathWithRect:innerRect];
现在,将内部path附加到正常path,并确保path使用evenOddFillRule。 evenOddFillRule将告诉核心graphics只填充外部,留下内部的一部分。 哦,你会想剪辑到path:
[path appendPath:innerPath]; path.usesEvenOddFillRule = YES; [path addClip];
如果对此形状应用渐变,它将填充内部path外部和外部path内部,使渐变形成边框。
UPDATE
如果你的目标iOS 5.0可能有更好的方法来做到这一点。 我发现了一个名为CGPathCreateCopyByStrokingPath()的显着的新path函数。 查看链接的细节,但基本上,它创build了一个新的path,是原来的斯托克(s),所以,如果你填充新的path,它会创build相同的图像抚摸旧path。 这太棒了,因为不是填充新的path,你可以剪裁它,然后填充一个渐变,给你一个渐变边框。 这比我之前提到的方法要容易得多,当然,它只在iOS 5.0中可用。 这也将使得创build新的复杂形状变得更容易。
我创build了第二个渐变图层,使颜色在数组中反转,然后使第二个图层的框架比第一个图层略小。 创build边框的外观。