Пользовательский класс не рисуется в центре - Swift - PullRequest
0 голосов
/ 04 ноября 2018

У меня есть UIView с пользовательским классом TimerView. Я пытаюсь нарисовать точку в точном центре UIView, но она появляется внизу немного от центра:

UIView

Пользовательский класс здесь:

import UIKit

class TimerView: UIView {
    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        drawDot()
    }

    func drawDot() {

        let midViewX = self.frame.midX
        let midViewY = self.frame.midY

        let dotPath = UIBezierPath(ovalIn: CGRect(x: midViewX, y: midViewY, width: 5, height: 5))

        let dotLayer = CAShapeLayer()
        dotLayer.path = dotPath.cgPath
        dotLayer.strokeColor = UIColor.blue.cgColor

        self.layer.addSublayer(dotLayer)
    }
}

1 Ответ

0 голосов
/ 04 ноября 2018

Вот повторная реализация класса TimerView. Для UIView, init - не лучшее место для получения значений frame/bounds, поскольку оно может измениться, когда autolayout применяет ограничения во время выполнения. layoutSubviews - лучшее место для получения правильных значений frame/bounds для родительских / дочерних представлений и для настройки свойств дочернего пространства. Во-вторых, вы должны использовать родительское представление bounds, чтобы настроить frame.

ребенка.
class TimerView: UIView {

    private var dotLayer: CAShapeLayer?

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)

        dotLayer = CAShapeLayer()
        dotLayer?.strokeColor = UIColor.blue.cgColor
        self.layer.addSublayer(dotLayer!)
    }

    override func layoutSubviews() {
        super.layoutSubviews()

        drawDot()
    }

    func drawDot() {

        let midViewX = self.bounds.midX
        let midViewY = self.bounds.midY

        let dotPath = UIBezierPath(ovalIn: CGRect(x: midViewX, y: midViewY, width: 5, height: 5))
        dotLayer?.path = dotPath.cgPath
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...