UIView transitionWithView: отсечение моего UITextView - PullRequest
2 голосов
/ 21 июля 2010

У меня UITextView с отключенной прокруткой, и я использую переход Page-curl для изменения текста внутри.Вот код, который я использую:

myView.text = nextString;

[UIView transitionWithView:myView duration:PAGE_CURL_DURATION options:UIViewAnimationOptionTransitionCurlDown animations:nil completion:nil];

Все работает нормально, за исключением того, что в новой текстовой строке больше строк, чем в старой, она будет обрезана до завершения анимации.Похоже, что contentSize меняется после анимации.Я попытался добавить myView.contentSize = myView.bounds.size;, но это ничего не изменило.Я также отключил «клипы подпредставлений», но безрезультатно.

Вот как это выглядит сразу после анимации: альтернативный текст http://i26.tinypic.com/21ahi0o.png

через мгновение текст больше не обрезается.

Есть идеи, как предотвратить обрезку?

Ответы [ 3 ]

2 голосов
/ 30 июля 2010

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

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

Чтобы получить размер текста, посмотрите UIStringDrawing.h в структуре UIKit.В частности, я думаю об использовании: - (CGSize) sizeWithFont: (UIFont *) шрифт дляWidth: (CGFloat) width lineBreakMode: (UILineBreakMode) lineBreakMode;вместе с UILineBreakModeWordWrap.

другой альтернативой получению размера может быть эта функция в UILabel: - (CGRect) textRectForBounds: (CGRect) bounds limitedToNumberOfLines: (NSInteger) numberOfLines;и передавая в границах максимально возможного текстового представления.

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

0 голосов
/ 28 июля 2010

Самый простой способ решить вашу проблему - установить для свойства UITextView "clipsToBounds" значение NO.Это сделает ваш текстовый вид доступным для рисования за его пределами

0 голосов
/ 26 июля 2010

Это довольно странно.contentSize не должен обрезать содержимое, а только определять поведение при прокрутке.Это, однако, единственное, что меняется от до анимации до.И снятие отметки Clip Subviews всегда работало для меня.

Несколько вариантов:

Я полагаю, ваш UITextView.frame достаточно большой, чтобы изначально содержать самый большой из обоих текстов?Если вы установите его непосредственно перед началом анимации, возможно, вы опоздали.В таких случаях такие трюки, как [self performSelector(continueWithStuff:) withObject:object afterDelay:0.01], делают чудеса, потому что вы даете пользовательскому интерфейсу время, необходимое для выполнения ваших изменений, прежде чем анимация определит начальное состояние.

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

Другим углом может быть встраивание вашего UITextView в UIView, который вы затем анимируете.При чтении документов аргумент view должен быть следующим: « контейнерное представление , которое содержит представления, участвующие в переходе».Игнорирование этого факта может дать ваши удивительные результаты.

...