Как восстановить сохраненное преобразование при переворачивании - PullRequest
3 голосов
/ 10 ноября 2011

Я сохраняю трансформацию и фрейм объекта. Когда приложение перезагружается, мне просто нужно восстановить кадр и преобразование в новом виде. Вы могли бы подумать, что вы можете просто установить кадр и преобразовать в сохраненные значения, но вы не можете. Это приводит к нежелательным результатам.

http://iphonedevelopment.blogspot.com/2008/10/demystifying-cgaffinetransform.html

Говорит: «Когда вы применяете преобразования успеха, порядок имеет значение. Вращение и затем перевод даст вам другой результат, чем перевод и вращение. Это может укусить вас, если вы не будете осторожны».

У меня возникают проблемы с преобразованием, только когда я сохраняю преобразование, которое было FLIPPED & ROTATED . Мои сохраненные значения идентичны значениям, которые применяются к восстановленному представлению.

Фактические результаты:

При выполнении:

myNewView.frame = сохраненный кадр

myNewView.transform = saveTransform

Мой взгляд сместится вниз и вправо (не к месту).

Может ли кто-нибудь помочь мне восстановить преобразование в правильном порядке операций?

Опять же, я подтвердил, что мои сохраненные и загруженные данные преобразования являются идеальными, поэтому я знаю, что это проблема порядка операций, я просто недостаточно умен, чтобы понять, что делать дальше: P

1 Ответ

4 голосов
/ 10 ноября 2011

Чтобы отменить сохраненное преобразование, вам нужно обратное преобразование.Смотрите заголовок Шаг назад на странице, на которую вы ссылаетесь.Попробуйте:

myNewView.transform = CGAffineTransformInvert(savedTransform);

Произвольная матрица не всегда обратима, но вы обычно в безопасности с аффинным преобразованием. Здесь - это некоторые особые случаи, на которые следует обратить внимание.

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

РЕДАКТИРОВАТЬ:

Перечитав вопрос, я подозреваю, что происхождение преобразования могло измениться.Когда происходит вращение, вращение вокруг другого источника будет выглядеть как неожиданный перевод.Исходя из документов , источником является либо центр вида, либо точка привязки слоя.Я предлагаю проверить эти свойства при сохранении преобразования и посмотреть, отличаются ли они при восстановлении.

...