2016-09-25 10 views

答えて

3

さまざまな方法がありますが、境界線を自分で描画すると、少しだけコントロールすることができます。 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

関連する問題