HTML5   发布时间:2022-04-27  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了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它看起来很奇怪

ios – 如何使用蒙版为圆形图像添加边框

ios – 如何使用蒙版为圆形图像添加边框

这是一个自动布局问题吗?没有边框,自动布局工作正常.这是我第一次使用面具,所以我不确定我所做的是否正确.

在viewDidLayoutSubviews中调用round函数.

有什么想法吗?

解决方法

例如,如果你有子类UIImageView,你可以覆盖layoutSubviews,以便它(a)更新掩码; (b)删除任何旧边界; (C)增加新的边界.在Swift 3中:

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的圆角,它会导致奇怪的瑕疵(看看圆形边框下部非常细的灰线):

ios – 如何使用蒙版为圆形图像添加边框

如果使用bezier路径方法,则不会产生此类工件:

ios – 如何使用蒙版为圆形图像添加边框

有关Swift 2.3示例,请参阅earlier revision of this answer.

大佬总结

以上是大佬教程为你收集整理的ios – 如何使用蒙版为圆形图像添加边框全部内容,希望文章能够帮你解决ios – 如何使用蒙版为圆形图像添加边框所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。