В моей игре в слова у меня есть коготь, который выскакивает ненужные плитки с экрана (подумайте, что игра с когтями в аркадном стиле опускается на призы). Когда он захватывает плитку, я применяю перспективное преобразование к плитке, чтобы она выглядела, как будто она лежит ровно, используя:
var transform = tile.layer.transform
transform.m34 = -1.0 / 100.0
transform = CATransform3DRotate(transform, getRadians(degrees: 70), 1.0, 0.0, 0.0)
UIView.animate(withDuration: 0.2, delay: 0.0, options: .curveEaseIn, animations: {
self.tile.layer.transform = transform
})
Это прекрасно работает, если к плитке не применен какой-либо существующий поворот и плитка лежит ровно, как показано на рисунке 1 в приложении. Если к плитке применено существующее вращение, однако она наклоняется в одну сторону в зависимости от угла поворота, как показано на изображении 2.
Что можно сделать, чтобы повернутая плитка лежала плоско, как на изображении 1 не прибегая к использованию CATransform3DIdentity - это заставляет плитку вращаться до тех пор, пока она не вернется к идентичности, что выглядит странно Я предполагаю, что должен где-то сместить вращение, и я знаю, как получить существующее вращение, используя atan2, но не уверен, что с ним делать.
Приветствия
Перспектива