У меня есть UIView, к которому применяются различные масштабы и вращения CGAffineTransforms в ответ на жесты сенсорного экрана.Применение только компонента шкалы CGAffineTransform к UIView
Когда масштабная операция завершена, я хочу настроить границы вида на новый размер, а затем иметь представление, чтобы повторно рисовать себя по шкале от 1,0, сохраняя при этом все остальные компоненты преобразования одинаковыми.
Для регулировки границы представления, я использую:
self.myView.bounds = CGRectApplyAffineTransform(self.myView.bounds, self.myView.transform);
«отменить» масштаб преобразования, я пытаюсь это:
self.myView.transform = CGAffineTransformConcat(self.myView.transform, CGAffineTransformMakeScale(1, 1));
затем вызывая [myView setNeedsDisplay]
, чтобы получить представление перерисовать себя.
Однако это не дает желаемых результатов, и когда применяется преобразование вращения, приведенный выше код, по-видимому, вызывает то, что выглядит как боковое трансляционное преобразование.
Каков самый чистый способ «отменить» только масштабное преобразование и перерисовать вид в 1: 1 со всеми остальными непокрытыми остатками?
Благодаря borrrden. Причина, по которой я меняю границы, - это то, что я хочу, чтобы представление перерисовывало себя без какого-либо преобразования масштаба, чтобы содержимое было четким, а не размытым, как при применении масштабного преобразования. –
Если вы используете CoreGraphics для рисования, вы можете попробовать установить contentScale на слое в соответствии с масштабом. По моему опыту это приводит к резкой перерисовке. Если вы настаиваете на использовании метода bounds, тогда вы должны сохранить масштаб в другом месте, вы можете его отменить (разделите ширину и высоту границ по шкале). Вероятно, вам также придется переделать все операции, поскольку умножение матрицы не * коммуникативно. – borrrden