У меня есть UIView с рисунком, который состоит из CALayers, создаваемых из аппаратного устройства, затем я генерирую UIBezierPaths и добавляю так:
self.layer.addSublayer(currentLayer)
Если мой рисунок сделан после поворота устройства, скажем, на 90˚, изображение подходит. Однако после поворота назад изображение перекошено и не отображается должным образом. По сути, я хочу перерисовывать мой CALayer с новым кадром каждый раз, когда устройство поворачивается.
Я попробовал несколько вещей, для начала я попытался вращать сам UIView. Затем я попытался продублировать слой, который был нарисован, и повернуть его, затем удалить все подслои из моего UIView и нарисовать повернутый слой, не работает.
let layerZrotation = self.layer
self.layer.sublayers?.forEach { $0.removeFromSuperlayer() }
if(doRotate == nil) { doRotate = 0}
layerZrotation.transform = CATransform3DMakeRotation(degree2radian(a:doRotate), 0.0, 0.0, 1.0)
self.layer.addSublayer(layerZrotation)
Я ожидал полного поворота, когда телефон переключается из портретного в альбомный режим на основании установки doRotate следующим образом:
override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
if UIDevice.current.orientation.isLandscape {
drawingViewTablet.doRotate = 90.0
buttonsShowing.doRotate = 90.0
} else {
drawingViewTablet.doRotate = -90.0
buttonsShowing.doRotate = -90.0
}
}