2016-12-06 17 views
0

Я сделал рисунок с использованием CALayer на основе фрейма в моем подклассе UIView, мне нужно обновить строки, когда устройство вращается, но в traitCollectionDidChange, кадр все еще удерживает значение перед вращением. Есть ли способ получить обновленные значения кадра после вращения?Рамка UIView не обновляется во время traitCollectionDidChange

Мой рисунок кодов выглядит так, называемый в traitCollectionDidChange его Высказаться контроллер:

func setup() { 

    layer.sublayers?.removeAll() 

    let xAxisLine = UIBezierPath() 
    xAxisLine.move(to: CGPoint(x: 100, y: frame.height)) 
    xAxisLine.addLine(to: CGPoint(x: bounds.width, y: frame.height)) 
    let xAxisLayer = CAShapeLayer() 
    xAxisLayer.path = xAxisLine.cgPath 
    xAxisLayer.lineWidth = 2 
    xAxisLayer.fillColor = UIColor.clear.cgColor 
    xAxisLayer.strokeColor = UIColor.black.cgColor 
    layer.addSublayer(xAxisLayer) 
} 

Эта часть рисует X-ось моего пользовательского графика, но что еще важнее значения кадров является то, что раньше вращения таким образом, весь график неуместен и имеет размер.

От контроллера представления, я назвал его:

override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) { 

    super.traitCollectionDidChange(previousTraitCollection) 

    barView.setup() 
} 
+0

Пожалуйста, обновите вопрос с вашим 'реализации traitCollectionDidChange'. –

+0

Я бы признался, что не должен использовать свои коды настройки для перерисовки, но в настоящее время я сосредоточен на получении новых значений фрейма для перерисовки –

ответ

2

Вы не обновляет свой рисунок вы всегда добавить новый слой на ваш взгляд, когда изменения ориентации.

Вы должны создать слой в viewDidLoad и сохранить ссылку на него. В traitCollectionDidChange вы просто назначаете новый путь к слою.

+0

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

+1

Вместо 'traitCollectionDidChange' вы можете использовать перезаписывать' layoutSubviews' ('UIView') или' viewDidLayoutSubviews' ('UIViewController'). – clemens

0

вы можете использовать событие движения, это поможет полностью обнаружить устройства в ios.

https://developer.apple.com/library/content/documentation/EventHandling/Conceptual/EventHandlingiPhoneOS/motion_event_basics/motion_event_basics.html#//apple_ref/doc/uid/TP40009541-CH6-SW2

+0

Спасибо ... но мне не нужна такая точность вращения устройства. Мне требуется только рама UIView после вращения. Что я позволяю устройству выполнять по собственному расчету –