簡體   English   中英

快速為Ui集合視圖創建弧

[英]create an Arc in swift for Ui collection view

嗨,我想在ios swift中創建以下視圖以添加到UIcollection視圖中,如何實現呢?

我當前繪制的代碼正在返回圓視圖

@IBInspectable public var fillColor: UIColor = #colorLiteral(red: 0.8078431487, green: 0.02745098062, blue: 0.3333333433, alpha: 1)    { didSet { setNeedsLayout() } }
@IBInspectable public var strokeColor: UIColor = #colorLiteral(red: 0.9254902005, green: 0.2352941185, blue: 0.1019607857, alpha: 1)  { didSet { setNeedsLayout() } }
@IBInspectable public var lineWidth: CGFloat = 0     { didSet { setNeedsLayout() } }

lazy private var shapeLayer: CAShapeLayer = {
    let _shapeLayer = CAShapeLayer()
    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: 90, clockwise: true).cgPath
    shapeLayer.fillColor = fillColor.cgColor
    shapeLayer.strokeColor = strokeColor.cgColor
    shapeLayer.lineWidth = lineWidth



}

在此處輸入圖片說明

嘗試此操作並根據需要設置角度

  let circlePath = UIBezierPath(arcCenter: CGPoint(x: 100,y: 100), radius: CGFloat(20), startAngle: CGFloat(0), endAngle:CGFloat(Double.pi / 2), clockwise: true)

  let shapeLayer = CAShapeLayer()
  shapeLayer.path = circlePath.cgPath

  //change the fill color
  shapeLayer.fillColor = UIColor.clear.cgColor
  //you can change the stroke color
  shapeLayer.strokeColor = UIColor.red.cgColor
  //you can change the line width
  shapeLayer.lineWidth = 3.0

  view.layer.addSublayer(shapeLayer)

您可以使用BezierPath在視圖中繪制圓弧。 將此arcView添加到集合視圖單元格中。

讓我們看一下ArcView:

class ArcView : UIView {

override init(frame: CGRect) {
    super.init(frame: frame)
    backgroundColor = .white
}

required init?(coder aDecoder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
}

override func draw(_ rect: CGRect) {
    super.draw(rect)
    createArc(rect: rect)
}

private func createArc(rect : CGRect) {

    let center = CGPoint(x: rect.width/2, y: rect.height/2)
    let lineWidth : CGFloat = 50.0
    let radius = rect.width / 2 - lineWidth
    let startingAngle = CGFloat(-10.0/180) * CGFloat.pi
    let endingAngle = CGFloat(-80/180.0) * CGFloat.pi
    let bezierPath = UIBezierPath(arcCenter: center, radius: radius, startAngle: startingAngle , endAngle: endingAngle, clockwise: false)
    bezierPath.lineWidth = lineWidth
    UIColor(red: 249/255.0, green: 179/255.0, blue: 127/255.0, alpha: 1.0).setStroke()
    bezierPath.stroke()
}
}

弧的中心是視線的中心。 沿逆時針方向從-10度到-80度繪制圓弧。

在ViewController的視圖層次結構中添加ArcView(您將在collectionView單元中添加此視圖)

 import UIKit

 class ViewController: UIViewController {

     private var arcView : ArcView!

     override func viewDidLoad() {
        super.viewDidLoad()

        arcView = ArcView(frame: view.frame)
        view.addSubview(arcView)
        arcView.setNeedsDisplay()
     }

   }

輸出:

弧線

示例代碼在這里

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM