これはかなり単純なものですIBDesignable
丸いラベル。これはInterface Builderとシミュレータで実行されたときにうまく描画されます。ビューをUIStackView
に追加すると、IBでうまく描画されますが、コーナーの半径は左上隅にのみ適用されます。UIStackViewに追加するとIBDesignableが機能しない
import UIKit
@IBDesignable class RoundedLabel: UILabel {
@IBInspectable var cornerRadius : CGFloat = 46 {
didSet {
self.drawTheLabel()
}
}
@IBInspectable var roundRightCorners : Bool = false {
didSet {
self.drawTheLabel()
}
}
@IBInspectable var roundLeftCorners : Bool = false {
didSet {
self.drawTheLabel()
}
}
@IBInspectable var borderRadius : CGFloat = 3 {
didSet {
self.layer.borderWidth = borderRadius
}
}
@IBInspectable var borderColor : UIColor = .black {
didSet {
self.layer.borderColor = borderColor.cgColor
}
}
private func drawTheLabel() {
var tCorners : UIRectCorner = []
if roundRightCorners {
tCorners.insert(.topRight)
tCorners.insert(.bottomRight)
}
if roundLeftCorners {
tCorners.insert(.bottomLeft)
tCorners.insert(.topLeft)
}
let path = UIBezierPath(roundedRect:self.bounds,
byRoundingCorners:tCorners,
cornerRadii: CGSize(width: cornerRadius, height: cornerRadius))
let maskLayer = CAShapeLayer()
maskLayer.path = path.cgPath
self.layer.mask = maskLayer
self.layer.masksToBounds = true
}
}
ないでuistackview
uistackview
ありがとうございます!実行時に境界をチェックすることはありませんでした。/ – MjZac