iPhone - изменения ориентации UIView - PullRequest
2 голосов
/ 20 июля 2010

Я получил подкласс UIView, в котором я рисую объект NSString, используя метод drawInRect:withFont:lineBreakMode:alignment:.

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

Как мне решить эту проблему?

1 Ответ

4 голосов
/ 20 июля 2010

Это часть того, как Core Animation анимирует переходы. Снимок вашего вида снимается, а затем растягивается / перемещается на новое место.

Есть несколько способов справиться с этим. Прежде всего, вы можете попробовать это:

self.contentMode = UIViewContentModeRedraw;

Это может быть все, что вам нужно, и Core Animation скажет перерисовать ваше содержимое вместо использования снимка. Если у вас все еще есть проблемы, вы можете попытаться определить растягиваемую область, которая растягивается вместо вашего текста.

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

CGFloat stretchStartX = 25.0f;
CGFloat stretchEndX = 30.0f;

/* Content stretch values are from 0.0-1.0, as a percentage of the view bounds */
self.contentStretch = CGRectMake(stretchStartX / self.bounds.size.width,
                                 0.0f,
                                 stretchEndX / self.bounds.size.width,
                                 1.0f);

Это приводит к тому, что ваш вид растягивается только между значениями x 25 и 30.

...