我正在使用UIBezierPath使我的imageview具有圆角,但我还想为imageview添加边框。请记住,顶部是一个uimage,底部是一个标签。
当前使用此代码生成:
let rectShape = CAShapeLayer()
rectShape.bounds = myCell2.NewFeedImageView.frame
rectShape.position = myCell2.NewFeedImageView.center
rectShape.path = UIBezierPath(roundedRect: myCell2.NewFeedImageView.bounds,
byRoundingCorners: .TopRight | .TopLeft,
cornerRadii: CGSize(width: 25, height: 25)).CGPath
myCell2.NewFeedImageView.layer.mask = rectShape
我想添加一个绿色的边界,但我不能使用
myCell2.NewFeedImageView.layer.borderWidth = 8
myCell2.NewFeedImageView.layer.borderColor = UIColor.greenColor().CGColor
因为它切断了边框的左上角和右上角,如图所示:
有没有一种方法可以在我当前的代码中添加一个带有UIBezierPath的边框?
5条答案
按热度按时间bjp0bcyl1#
可以重用UIBezierPath路径并向视图添加形状图层。下面是一个视图控制器内部的例子。
最终结果如下所示。
请注意,只有当视图的大小固定时,这才能按预期工作。当视图可以调整大小时,您需要创建一个自定义视图类并调整
layoutSubviews
中的图层大小。qlckcl4x2#
正如上面所说:
要做到完美并不容易。
这里有一个简易的解决方案。
这个
2019年...
就这样了
(次要的除外-回想一下,IBDesignable在Xcode故事板中完全被破坏(2023),所以,与任何IBDesignable一样,你不会“在故事板上看到它”。)
评论中问题的初学者帮助。..
1.创建一个名为“Fattie”的“新Swift文件”。(注意,有趣的是,你怎么称呼它实际上并没有什么区别。如果你正处于“不知道如何创建一个新文件”的阶段,请寻求基本的Xcode教程。)
1.把上面所有的代码放到文件中
1.您刚刚向项目中添加了一个类“RoundedCornersAndTrueBorder”。
1.在你的故事板上。将 * 普通UIView添加到场景 *。事实上,让它实际上任何大小/形状,任何你喜欢的。
1.看看“身份检查员”。(如果你不知道这是什么,请寻求基本教程。)只需将类更改为“RoundedCornersAndTrueBorder”。(一旦你开始输入“Roun。..”,它会猜出你指的是哪个类。
1.你完成了-运行项目。
请注意,当然,您必须向UIView添加完整和正确的约束,就像您在Xcode中所做的任何事情一样。好好享受吧
类似的解决方案:
https://stackoverflow.com/a/57465440/294884-图像+圆角+阴影
https://stackoverflow.com/a/41553784/294884-两角点问题
https://stackoverflow.com/a/59092828/294884-“阴影+洞”或“发光盒”问题
https://stackoverflow.com/a/57400842/294884-“边界和间隙”问题
https://stackoverflow.com/a/57514286/294884-基本“添加”边框
也请看下面的备选答案!:)
zf9nrax13#
绝对完美的2019解决方案
言归正传,下面就是你要做的。
1.实际上不要使用视图附带的“基本”图层
1.创建一个新的图层 * 仅用于 * 图像。你现在可以遮罩这个(循环)而不影响下一层
1.为边界创建一个新层。它将安全地不被图片层掩蔽。
关键事实是
1.使用CALayer,您确实可以应用。遮罩***且只影响该层***
1.当画一个圆(或实际上任何边界)时,必须非常小心地注意到你只能得到“一半宽度”的事实-简而言之,永远不要使用你所画的相同路径来裁剪。
1.请注意,原始的猫图像与水平黄色箭头的宽度完全相同。您必须小心绘制图像,以便***整个***图像出现在圆角中,***小于***整个自定义控件。
那么,按常规方式设置
现在仔细地为圆形裁剪的图像制作图层:
接下来作为一个完全独立的层,根据您的意愿绘制边界:
一切都与iOS标准控件一样完美:
一切看不见的东西都是看不见的;您可以透视整个自定义控件后面的任何材质,没有“半厚”的问题或缺少图像材质,您可以按通常的方式设置自定义控件背景颜色等。检查员正确地控制所有工作。(呼!)
类似的解决方案:
https://stackoverflow.com/a/57465440/294884-图像+圆角+阴影
https://stackoverflow.com/a/41553784/294884-两角点问题
https://stackoverflow.com/a/59092828/294884-“阴影+洞”或“发光盒”问题
https://stackoverflow.com/a/57400842/294884-“边界和间隙”问题
https://stackoverflow.com/a/57514286/294884-基本“添加”边框
2ekbmq324#
像这样使用
myView.roundCornersWithBorder(角:[.topLeft,.topRight],半径:8.0)
myView.roundCorners(角:[.topLeft,.topRight],半径:8.0)
5cnsuln75#
当然有!每个视图都有一个
layer
属性(您可以通过给图层添加圆角来了解这一点)。layer
上的另外两个属性是borderColor
和borderWidth
。只需设置这些,您就可以为视图添加边框!(边框将遵循圆角。)确保对borderColor
使用UIColor.CGColor
,因为普通的UIColor
将不匹配类型。