-2
신속하게 UIView의 위쪽면에만 테두리를 설정하는 방법이 있습니까?테두리의 테두리 중 하나를 설정하는 방법 UIView
신속하게 UIView의 위쪽면에만 테두리를 설정하는 방법이 있습니까?테두리의 테두리 중 하나를 설정하는 방법 UIView
여러 가지 방법이 있지만 테두리를 직접 그릴 때 조금 더 조정할 수 있습니다. 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
경계와 같은 역할을하는보기에 하위보기를 추가 할 수 있습니다. –