Как изменить размер представления для всех размеров экрана? - PullRequest
0 голосов
/ 12 апреля 2019

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

На моем iPhone XS Max это выглядит так:

Timer on iPhone XS Max

Нона симуляторе iPhone SE это выглядит так:

Timer on iPhone SE

Как убедиться, что размеры кругов таймера изменяются правильно?

Этомой код для определения размеров окружностей:

private func addTimerCircle() {
    let translateAmount = -(CGFloat.pi/2)

    let circlePath = UIBezierPath(arcCenter: CGPoint.zero, radius: (self.frame.width - 64)/2, startAngle: translateAmount, endAngle: (2*CGFloat.pi)+translateAmount, clockwise: true)

    addTrackLayer(withPath: circlePath)
}

private func addTrackLayer(withPath circlePath: UIBezierPath) {
    let trackLayer = CAShapeLayer()

    trackLayer.path = circlePath.cgPath

    trackLayer.strokeColor = UIColor.red.withAlphaComponent(0.5).cgColor
    trackLayer.lineWidth = 10
    trackLayer.position = CGPoint(x: frame.size.width / 2, y: frame.size.height / 2)
    trackLayer.fillColor = UIColor.clear.cgColor
    layer.addSublayer(trackLayer)
}

Почему circlePath не изменяет размер на основе frame.width на экранах разных размеров?

Спасибо за любую помощь!

1 Ответ

2 голосов
/ 12 апреля 2019

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

Я предполагаю, что вы звоните addTimerCircle() на viewDidLoad(), что происходит до применения окончательного размера.

Вы можете переопределить viewDidLayoutSubviews(), который будет вызываться при изменении размера вида, и добавлять / обновлять форму там, но мое предложение будетбыть подклассом UIView, добавить слой формы как свойство и обновить его фрейм на layoutSubviews.

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