大佬教程收集整理的这篇文章主要介绍了ios – 如何使用蒙版为圆形图像添加边框,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
func round() { let width = bounds.width < bounds.height ? bounds.width : bounds.height let mask = CAShapeLayer() mask.path = UIBezierPath(ovalInRect: CGRectMake(bounds.midX - width / 2,bounds.midY - width / 2,width,width)).CGPath self.layer.mask = mask // add border let frameLayer = CAShapeLayer() frameLayer.path = mask.path frameLayer.lineWidth = 4.0 frameLayer.strokeColor = UIColor.whiteColor().CGColor frameLayer.fillColor = nil self.layer.addSublayer(frameLayer) }
它适用于iphone 6模拟器(故事板的大小为4.7),但在5s和6它看起来很奇怪:
这是一个自动布局问题吗?没有边框,自动布局工作正常.这是我第一次使用面具,所以我不确定我所做的是否正确.
在viewDidLayoutSubviews中调用round函数.
有什么想法吗?
import UIKit @IBDesignable class RoundedImageView: UIImageView { /// saved rendition of border layer private weak var borderLayer: CAShapeLayer? override func layoutSubviews() { super.layoutSubviews() // create path let width = min(bounds.width,bounds.height) let path = UIBezierPath(arcCenter: CGPoint(x: bounds.midX,y: bounds.midY),radius: width / 2,startAngle: 0,endAngle: .pi * 2,clockwise: truE) // update mask and save for future reference let mask = CAShapeLayer() mask.path = path.cgPath layer.mask = mask // create border layer let frameLayer = CAShapeLayer() frameLayer.path = path.cgPath frameLayer.lineWidth = 32.0 frameLayer.strokeColor = UIColor.white.cgColor frameLayer.fillColor = nil // if we had prevIoUs border remove it,add new one,and save reference to new one borderLayer?.removeFromSuperlayer() layer.addSublayer(frameLayer) borderLayer = frameLayer } }
这样,它会响应布局的变化,但它确保清理任何旧边框.
顺便说一句,如果你不是UIImageView的子类,而是将这个逻辑放在视图控制器中,你将覆盖viewWillLayoutSubviews而不是UIView的layoutSubviews.但基本的想法是一样的.
–
顺便说一下,我将一个蒙版与这个形状图层结合使用,因为如果你只是应用UIView的圆角,它会导致奇怪的瑕疵(看看圆形边框下部非常细的灰线):
如果使用bezier路径方法,则不会产生此类工件:
有关Swift 2.3示例,请参阅earlier revision of this answer.
以上是大佬教程为你收集整理的ios – 如何使用蒙版为圆形图像添加边框全部内容,希望文章能够帮你解决ios – 如何使用蒙版为圆形图像添加边框所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。