Как добавить зигзагообразную границу в круговое изображение - PullRequest
0 голосов
/ 19 сентября 2018

У меня есть изображение. Мне нужно добавить к нему зигзагообразную рамку, например:

Image wih zigzag border

Как этого добиться?Любая помощь приветствуется.

Спасибо Chakshu Arora

1 Ответ

0 голосов
/ 19 сентября 2018

Простой пример использования прямых линий (кривые более сложные, и я бы порекомендовал создать маску в программе рисования, если это то, что вам нужно!).

Этот код предполагает 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

...