如何将Z字形边框添加到圆形图像视图

问题描述 投票:0回答:1

我有一个图像视图,我需要像图像一样添加一个Z字形边框

Image wih zigzag border

我怎样才能做到这一点?任何帮助表示赞赏。

谢谢你的眼睛Arora

swift swift4 calayer uibezierpath cashapelayer
1个回答
3
投票

使用直线的简单示例(曲线更复杂,如果您需要,我建议在绘图程序中创建蒙版!)。

此代码假定故事板中的UIImageView ...

class DemoViewController: UIViewController {

    @IBOutlet weak var imageView: UIImageView!

    override func viewDidLoad() {
        super.viewDidLoad()
        setImageMask()
    }

    func setImageMask() {

        // Set the center and radius (pure circle rather than rectangle)
        let center = CGPoint(x: imageView.bounds.midX, y: imageView.bounds.midY)
        let radius = min(imageView.bounds.midX, imageView.bounds.midY)

        // Inset radius is the amount that the inner points are inset by
        let insetRadius: CGFloat = radius * 0.85

        // Calculate the segment arc sizes
        let numberOfPoints = 17
        let segmentArcSize = 360.0 / CGFloat(numberOfPoints)
        let arcMid = segmentArcSize / 2.0

        // Start at the top of the circle, but subtract half an arc so the outer point is at the top
        var angle = -90.0 - arcMid

        // Create the path
        let path = UIBezierPath()

        // Move to the inner starting point
        let startPoint = CGPoint(x: center.x + insetRadius * cos(angle.toRadians()) , y: center.y + insetRadius * sin(angle.toRadians()))
        path.move(to: startPoint)

        // Loop and draw the jagged points around the circlw
        for _ in 0 ..< numberOfPoints {

            // Outer point
            let midAngle = angle + arcMid
            let midPoint = CGPoint(x: center.x + radius * cos(midAngle.toRadians()), y: center.y + radius * sin(midAngle.toRadians()))
            path.addLine(to: midPoint)

            // Inner point
            let endAngle = angle + segmentArcSize
            let endPoint = CGPoint(x: center.x + insetRadius * cos(endAngle.toRadians()) , y: center.y + insetRadius * sin(endAngle.toRadians()))
            path.addLine(to: endPoint)
            angle += segmentArcSize
        }

        // End drawing
        path.close()

        // Mask the image view
        let mask = CAShapeLayer()
        mask.path = path.cgPath
        imageView.layer.mask = mask
    }

}


extension CGFloat {

    // Convert degrees to radians

    func toRadians() -> CGFloat {
        return self * CGFloat.pi / 180.0
    }
}

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.