CGAffineTransformScale изменяется после поворота устройства

У меня есть мнение, что я выполняю преобразование на

originalTransform = self.appContainer.transform;
self.appContainer.transform = CGAffineTransformMakeScale(.8, .8);

Оригинальное вращение

Если я не поворачиваю устройство, я могу вернуть его обратно к оригиналу, используя

self.appContainer.transform = CGAffineTransformScale(originalTransform, 1, 1);

К сожалению, если я поверну устройство, матрица преобразования для вида будет изменена поворотом вида и нарушит исходный масштаб. Если я отменю шкалу после поворота, у меня останется UIView не возвращаясь к своему первоначальному размеру.

После вращения

После оригинальной шкалы

Я уверен, что мне нужно сделать вычисления между исходной матрицей преобразования и новой, но я не уверен, как это сделать. Единственное, что мне удалось сделать, это вернуть шкалу обратно в 1 до поворота

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    self.appContainer.transform = CGAffineTransformScale(originalTransform, 1, 1);
}

А затем измените масштаб с помощью измененного преобразования после

-(void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation               {
    self.appContainer.transform = CGAffineTransformMakeScale(.8, .8);
}

Это заставляет его работать так, как я ожидаю, но вместо того, чтобы вернуться к полноэкранному режиму, а затем вернуться к 0,8 масштабе, я бы хотел, чтобы он перешел от своего нового преобразования к правильному 0,8 масштабу.

2 ответа

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

[self.appContainer setAutoresizingMask:UIViewAutoresizingNone];

Если вы хотите вернуть его к оригиналу, попробуйте установить преобразование в CGAffineTransformIdentity.

self.appContainer.transform = CGAffineTransformIdentity;
Другие вопросы по тегам