Как вычислить фрейм UIView до преобразования?

Вопрос

у меня есть UIView и я применяю к этому CGAffineTransform, Я хотел бы иметь возможность узнать структуру представления, если преобразование не было применено.

Я ищу (простое) решение, которое обрабатывает случай, когда преобразование является "преобразованием нуля" (которое не является обратимым).

Моя попытка

Следующее не работает для "нулевого преобразования", я думаю.

CGRect result ;

CGAffineTransform transform = self.transform ;

result = CGRectApplyAffineTransform(self.frame, CGAffineTransformInvert(transform)) ;

return result ;

Зачем?

Мне нужно сделать это для анимации:

  • начальные настройки: я установил transform "до 0". Представление вставлено, но рамки всех элементов делают так, как будто представления не было здесь.
  • Окончательные настройки: я вычисляю кадры всех своих элементов, и на этот раз я принимаю во внимание новый вид. Я установил его transform "до 1".

замечания

Мое преобразование является преобразованием масштаба.

2 ответа

Решение

transform не влияет center ни bounds,

Таким образом, вы можете рассчитать его с помощью этого простого кода:

    CGPoint center = view.center;
    CGSize size = view.bounds.size;

    CGRect frameForTransformIdentity = CGRectMake(
        center.x - size.width / 2,
        center.y - size.height / 2,
        size.width,
        size.height
    );

Версия Swift 4.1:

extension UIView
{
    var frameWithoutTransform: CGRect
    {
        let center = self.center
        let size   = self.bounds.size

        return CGRect(x: center.x - size.width  / 2, 
                      y: center.y - size.height / 2,
                  width: size.width,
                 height: size.height)
    }
}
Другие вопросы по тегам