Поверните UIView вокруг центра, где происхождение отличается от x: 0, y: 0 - PullRequest
0 голосов
/ 13 июня 2018

давайте предположим, что я создал пользовательский UIView так:

let view = CustomView((frame: CGRect(x: 0, y: 44, width: self.view.frame.width, height: self.view.frame.width))
                                           ======

, и я хочу повернуть его таким образом:

// Inside the CustomView    
self.transform = CGAffineTransform(rotationAngle: angle)

Тогда представление не вращается вокруг своего центра,Но если представление создается следующим образом

let view = CustomView((frame: CGRect(x: 0, y: 0, width: self.view.frame.width, height: self.view.frame.width))
                                           =====

(я отметил разницу с =====)

, то представление вращается вокруг своего центра, как и ожидалось.Я понимаю, что центр вращения можно отрегулировать через anchorpoint.Но, насколько я понимаю, CGPoint (0,0) означает «верхний левый угол», CGPoint (0,5, 0,5) означает центр, но это не работает, если ось y начала координат отличается от 0.

Может кто-нибудь сказать мне, как решить эту проблему?

1 Ответ

0 голосов
/ 13 июня 2018

Чтобы установить anchorPoint, используйте следующий метод

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

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

    var position: CGPoint = view.layer.position
    position.x -= oldPoint.x
    position.x += newPoint.x
    position.y -= oldPoint.y
    position.y += newPoint.y

    view.layer.position = position
    view.layer.anchorPoint = anchorPoint
}

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

setAnchorPoint(CGPoint(x: 0.5, y: 0.5), view: view)

И после этого выполнить преобразование.Таким образом, это будет трансформировать вид вокруг точки привязки.

...