Пользовательская граница UIImageView - PullRequest
0 голосов
/ 10 мая 2019

Я пытаюсь создать такую ​​рамку:

Screen

С этим кодом:

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

Получается:

Screen2

Как добавить «интервал» между границей и фактическим изображением?

Ответы [ 3 ]

1 голос
/ 10 мая 2019

Вы можете добиться этого, используя расширение ниже

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
    }
}

Используйте приведенный ниже код, чтобы добавить пробел между изображением и границей, я добавляю сюда 20, вы можете указать свое собственное пространство

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

Надеюсь, это поможет!

0 голосов
/ 10 мая 2019

бег на детской площадке

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)
0 голосов
/ 10 мая 2019

Вместо того, чтобы пробовать пространство между ними, возьмите один UIView внутри, который поместит ваш UIImageView.UIImageView должно иметь меньше width and height, затем добавьте corner radius к обоим, но добавьте border color к UIVIew.

Ваш пользовательский интерфейс должен быть таким:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...