У меня 2 просмотра (viewLeft
, viewRight
).Я поворачиваю эти виды с помощью ангела 0 (начальная настройка), вычисляя ту же опорную точку, чтобы было похоже, что виды вращаются через шарнир.
Я сделал приведенный ниже код, который работает нормально, если я взял представления в раскадровке (viewcontroller), и не работает, если я копирую и вставляю одинаковые виды и код в кончик.В Nib, в 0, вид ангела оставляет некоторое пространство между ними.Это странное поведение, я проверил все выходы кода и ограничения, все хорошо, но не смог понять, почему он не работает.
Я хочу, чтобы он работал в NIB.
Любая помощь будет ощутима.
Github фиктивная ссылка на проект здесь
Выходы:
С раскадровки
![enter image description here](https://i.stack.imgur.com/BUirV.png)
Из XIB
![enter image description here](https://i.stack.imgur.com/WuSQH.png)
Код работы
Установить опорную точку
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)
}