をUIImageViewのサブクラスである円形画像表示を行うことができる場合に円を追加したビューを作成します。
@IBDesignable class CircleView: UIView {
@IBInspectable public var fillColor: UIColor = #colorLiteral(red: 0, green: 0, blue: 1, alpha: 1) { didSet { shapeLayer.fillColor = fillColor.cgColor } }
@IBInspectable public var strokeColor: UIColor = #colorLiteral(red: 1, green: 1, blue: 1, alpha: 0) { didSet { shapeLayer.strokeColor = strokeColor.cgColor } }
@IBInspectable public var lineWidth: CGFloat = 0 { didSet { setNeedsLayout() } }
lazy private var shapeLayer: CAShapeLayer = {
let _shapeLayer = CAShapeLayer()
_shapeLayer.fillColor = self.fillColor.cgColor
_shapeLayer.strokeColor = self.strokeColor.cgColor
self.layer.insertSublayer(_shapeLayer, at: 0)
return _shapeLayer
}()
override func layoutSubviews() {
super.layoutSubviews()
let center = CGPoint(x: bounds.midX, y: bounds.midY)
let radius = (min(bounds.size.width, bounds.size.height) - lineWidth)/2
shapeLayer.path = UIBezierPath(arcCenter: center, radius: radius, startAngle: 0, endAngle: .pi * 2, clockwise: true).cgPath
shapeLayer.lineWidth = lineWidth
}
}
Nそれは@IBDesignable
なので、Interface Builderでそれを使うことができます。別のターゲット( "File" - "New" - "Target ...")を作成し、 "Cocoa Touch Framework"を選択して適切な名前を付けてください(例:あなたのアプリが "Foo"の場合、 "FooKit")。そして、そのフレームワークに上記UIView
サブクラスを追加し、あなたがIBでこのクラスを参照することができます(ただUIView
オブジェクトを追加し、CircleView
にその基底クラスを変更):
出典
2017-02-18 15:24:38
Rob