Показать часть круга - PullRequest
       4

Показать часть круга

0 голосов
/ 24 сентября 2018

Я хочу отобразить произвольную часть круга.Я знаю, как получить раунд, используя layer.cornerRadius, теперь я хочу видеть только часть этого круга (для любого заданного значения радианта).Было бы хорошо, если бы все остальное было просто спрятано под чем-то белым.Любые идеи, как этого добиться?

редактировать: я написал класс для моего представления:

class Circle:UIView {
var rad = 0

    let t = CGFloat(3.0)

    override func draw(_ rect: CGRect) {
        super.draw(rect)
        let r = self.frame.width / CGFloat(2)
        let center = CGPoint(x: r, y: r)
        let path = UIBezierPath()

        path.move(to: CGPoint(x: t, y: r))

        path.addLine(to: CGPoint(x: 0.0, y: r))

        path.addArc(withCenter: center, radius: CGFloat(r), startAngle: CGFloat(Double.pi), endAngle: CGFloat(Double.pi+rad), clockwise: true)

        let pos = path.currentPoint
        let dx = r - pos.x
        let dy = r - pos.y
        let d = sqrt(dx*dx+dy*dy)
        let p = t / d
        path.addLine(to: CGPoint(x: pos.x + p * dx, y: pos.y + p * dy))
        path.addArc(withCenter: center, radius: r-t, startAngle: CGFloat(Double.pi+rad), endAngle: CGFloat(Double.pi), clockwise: false)


        UIColor(named: "red")?.setFill()
        path.fill()
    }
}

public func setRad(perc:Double) {
    rad = Double.pi * 2 * perc

}

в моем контроллере представления я звоню

    circleView.layer.cornerRadius = circleView.frame.size.width / 2
    circleView.clipsToBounds = true
    circleView.layer.borderWidth = 1
    circleView.layer.borderColor = UIColor.darkGray.cgColor

    circleView.layer.shadowColor = UIColor.black.cgColor
    circleView.layer.shadowOpacity = 1
    circleView.layer.shadowOffset = CGSize.zero
    circleView.layer.shadowRadius = 3
    circleView.layer.masksToBounds = false

    circleView.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(self.onTap)))

сейчася получаю полный квадратный вид с черным кругом из угла и красной дугой, которую я рисую.При необходимости завтра выложу картинку

1 Ответ

0 голосов
/ 24 сентября 2018

Один из способов сделать это - нарисовать UIBezierPath.

. Если вам нужна дуга, вы можете вызвать инициализатор init(arcCenter:radius:startAngle:endAngle:clockwise:).Не забудьте указать начальный и конечный углы в радианах!

enter image description here

После этого вы можете установить цвет обводки и вызвать stroke

Если вы хотите сектор круга,Вы можете создать UIBezierPath с инициализатором без параметров, затем move(to:) центр круга и затем addLine(to:) начало дуги.Вероятно, вы можете рассчитать, где эта точка, с помощью тригонометрии.После этого позвоните addArc, как я описал выше, затем addLine(to:) точка, с которой вы начали.После этого вы можете fill путь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...