-2
すばやく、UIViewの上部に境界線を設定する方法がありますか?UIViewのエッジの1つにのみ境界線を設定する方法
すばやく、UIViewの上部に境界線を設定する方法がありますか?UIViewのエッジの1つにのみ境界線を設定する方法
さまざまな方法がありますが、境界線を自分で描画すると、少しだけコントロールすることができます。 UIView
をサブクラス化し、これを達成するためにCAShapeLayer
を使用することをお勧めします。 (スウィフト3を使用)の効果に
何か:最大再利用のために
import UIKit
class TopBorderedView: UIView {
//decalare a private topBorder
fileprivate weak var topBorder: CAShapeLayer?
//declare a border thickness to allow outside access to setting it
var topThickness: CGFloat = 1.0 {
didSet {
drawTopBorder()
}
}
//declare public color to allow outside access
var topColor: UIColor = UIColor.lightGray {
didSet {
drawTopBorder()
}
}
//implment the draw method
fileprivate func drawTopBorder() {
let start = CGPoint(x: 0, y: 0)
let end = CGPoint(x: bounds.width, y: 0)
removeIfNeeded(topBorder)
topBorder = addBorder(from: start, to: end, color: topColor, thickness: topThickness)
}
//implement a private border drawing method that could be used for border on other sides if desired, etc..
fileprivate func addBorder(from: CGPoint, to: CGPoint, color: UIColor, thickness: CGFloat) -> CAShapeLayer {
let border = CAShapeLayer()
let path = UIBezierPath()
path.move(to: start)
path.addLine(to: end)
border.path = path.cgPath
border.strokeColor = color.cgColor
border.lineWidth = thickness
border.fillColor = nil
layer.addSublayer(border)
return border
}
//used to remove the border and make room for a redraw to be autolayout friendly
fileprivate func removeIfNeeded(_ border: CAShapeLayer?) {
if let bdr = border {
bdr.removeFromSuperlayer()
}
}
//override layoutSubviews() (probably debatable) and call the drawTopBorder method to draw and redraw if needed
override func layoutSubviews() {
super.layoutSubviews()
drawTopBorder()
}
}
絵コンテの文脈で - 私も、このように一般的なUIパターンのため@IBDesignableと@IBInspectableを使用して見てみましょう。まともなイントロでは、チェックアウトのためにNSHipster: IBDesignable and IBInspectable
境界線のように機能するサブビューをそのビューに追加できます。 –