Возникла проблема с CGAffineTransform в NIB - PullRequest
0 голосов
/ 11 февраля 2019

У меня 2 просмотра (viewLeft, viewRight).Я поворачиваю эти виды с помощью ангела 0 (начальная настройка), вычисляя ту же опорную точку, чтобы было похоже, что виды вращаются через шарнир.

Я сделал приведенный ниже код, который работает нормально, если я взял представления в раскадровке (viewcontroller), и не работает, если я копирую и вставляю одинаковые виды и код в кончик.В Nib, в 0, вид ангела оставляет некоторое пространство между ними.Это странное поведение, я проверил все выходы кода и ограничения, все хорошо, но не смог понять, почему он не работает.

Я хочу, чтобы он работал в NIB.

Любая помощь будет ощутима.

Github фиктивная ссылка на проект здесь

Выходы:

С раскадровки

enter image description here

Из XIB

enter image description here

Код работы

Установить опорную точку

extension UIView {
    func setAnchorPoint(_ point: CGPoint) {
        var newPoint = CGPoint(x: bounds.size.width * point.x, y: bounds.size.height * point.y)
        var oldPoint = CGPoint(x: bounds.size.width * layer.anchorPoint.x, y: bounds.size.height * layer.anchorPoint.y);

        newPoint = newPoint.applying(transform)
        oldPoint = oldPoint.applying(transform)

        var position = layer.position

        position.x -= oldPoint.x
        position.x += newPoint.x

        position.y -= oldPoint.y
        position.y += newPoint.y

        layer.position = position
        layer.anchorPoint = point
    }
}

Функция вращения

func rotateView(_ addAngel : CGFloat) {

    let rotateToAngel = angel + addAngel

    guard rotateToAngel <= 0.6 && rotateToAngel >= -0.6  else {
        return
    }
    angel = rotateToAngel
    let anchorPointLeft = CGPoint(x: (viewLeft.frame.width - viewLeft.frame.height/2)/viewLeft.frame.width,
                                  y: ( viewLeft.frame.height/2)/viewLeft.frame.height)

    viewLeft.setAnchorPoint(anchorPointLeft)

    let anchorPointRight = CGPoint(x: (viewRight.frame.height/2/viewRight.frame.width),
                                   y: ( viewRight.frame.height/2)/viewRight.frame.height)

    viewRight.setAnchorPoint(anchorPointRight)


    self.viewLeft.transform = CGAffineTransform.init(rotationAngle: rotateToAngel)
    self.viewRight.transform = CGAffineTransform.init(rotationAngle: -rotateToAngel)

}
...