Добавление CALayer в UIView с возможностью перерисовки при изменении ориентации

У меня есть подкласс UIView, который присваивается backgroundView UITableVieCell. В моем подклассе UIView я добавляю 2 CALayers в методе initWithFrame:.

При изменении ориентации меняется высота ячеек, и мне нужно перенастроить позиции моих CALayers; в основном перерисовывать.

Поскольку CALayers добавлены в метод initWithFrame:, я не могу их перерисовать, вызвав setNeedsDisplay.

Я новичок в работе с CALayers и не знаю, как правильно это сделать. Как я могу добавить свои CALayers таким образом, чтобы они перерисовывали изменение ориентации/или любое событие, которое могло бы изменить размеры в целом?

2 ответа

В подклассе UIView реализует метод - (void)layoutSubviews;. Это называется каркасом при изменении геометрии представлений. Вы можете внести соответствующие изменения в свои слои там.

В CoreAnimation, если вы являетесь подклассовыми слоями, существует также метод layoutSublayers.

Надеюсь, что это поможет.


На самом деле, проще было бы использовать KVO для наблюдения за изменениями свойства границ слоя представления.

[self.layer addObserver:self forKeyPath:@"bounds" options:0 context:nil];

Затем сделайте все, что вам нужно, в вашем методе -observeValueForKeyPath:ofObject:change:context:.

Не забывайте removeObserver:self, когда закончите.

licensed under cc by-sa 3.0 with attribution.