Estoy tratando de hacer un borde como este:

Screen

Con este código:

self.slot1.layer.cornerRadius = self.slot1.bounds.height / 2
self.slot1.layer.borderWidth = 1.5
self.slot1.layer.borderColor = UIColor.orange.cgColor 

Produce:

Screen2

¿Cómo puedo agregar un "espacio" entre el borde y la imagen real?

0
YakuzaNY 10 may. 2019 a las 13:24

3 respuestas

La mejor respuesta

Puede lograr esto usando la extensión a continuación

extension UIImage {
    func imageWithInsets(insets: UIEdgeInsets) -> UIImage? {
        UIGraphicsBeginImageContextWithOptions(
            CGSize(width: self.size.width + insets.left + insets.right,
                   height: self.size.height + insets.top + insets.bottom), false, self.scale)
        let _ = UIGraphicsGetCurrentContext()
        let origin = CGPoint(x: insets.left, y: insets.top)
        self.draw(at: origin)
        let imageWithInsets = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()
        return imageWithInsets
    }
}

Use el código a continuación para agregar espacio entre la imagen y el borde, agrego aquí 20 puede dar su propio espacio

self.slot1.layer.cornerRadius = self.slot1.bounds.height / 2
self.slot1.layer.borderWidth = 1.5
self.slot1.layer.borderColor = UIColor.orange.cgColor
let image = self.slot1.image?.imageWithInsets(insets: UIEdgeInsets(top: 20, left: 20, bottom: 20, right: 20))
self.slot1.image = image

¡Espero que esto ayude!

1
Kaushik Makwana 10 may. 2019 a las 10:53

En lugar de tratar de hacer espacio en el medio, tome uno UIView dentro que ponga su UIImageView. UIImageView debería tener menos width and height, luego agregue corner radius a ambos pero agregue border color a UIVIew solamente.

Su interfaz de usuario debería ser así:

enter image description here

1
Sharad Chauhan 10 may. 2019 a las 10:32

Correr en el patio de recreo

import PlaygroundSupport
import UIKit

let iv = UIImageView(frame: CGRect(x: 0.0, y: 0.0, width: 200, height: 200))
PlaygroundPage.current.liveView = iv

iv.backgroundColor = .blue
iv.layer.cornerRadius = 100
iv.layer.borderColor = UIColor.red.cgColor
iv.layer.borderWidth = 5
iv.layer.sublayers?.count

let layer2 = CAShapeLayer()
let newFrame = iv.bounds.insetBy(dx: 7, dy: 7)
layer2.path = UIBezierPath(roundedRect: newFrame, cornerRadius: newFrame.height / 2).cgPath
layer2.frame = iv.bounds
layer2.lineWidth = 5
layer2.strokeColor = UIColor.yellow.cgColor
layer2.fillColor = UIColor.clear.cgColor
iv.layer.addSublayer(layer2)
1
ChanOnly123 10 may. 2019 a las 10:45