перерисовать CALayer с новым фреймом swift 4 - PullRequest
0 голосов
/ 12 января 2019

У меня есть 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 
    }
}
...