Как вычислить фрейм 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)
}
}