iOS обтекание текста вокруг изображения - PullRequest
4 голосов
/ 16 июля 2011

У меня есть несколько коротких абзацев текста, которые я хотел бы поместить в изображение вокруг моего приложения. Как правило, изображение будет на левой стороне текста, и текст будет течь, как вы обычно ожидаете. Изображение имеет различную высоту, ширину и размер, png файлы 4-30kb. Текст имеет различную длину и может быть где угодно от 2 предложений до нескольких абзацев. Есть разметка с текстом, поэтому разные строки могут быть отформатированы соответственно.

Я использовал UIWebView в своем UIView, чтобы сделать это как можно быстрее, но я заметил, что, несмотря на то, что мой текст и изображения локальны, при загрузке UIWebView и показе изображения текст. По сути, вы видите область просмотра пустой, а затем через короткое время вы видите загрузку изображения. В большинстве случаев текст отображается как загруженный перед изображением.

Я использую UIWebView's 'loadHTMLString' для загрузки локального HTML-текста и изображений.

То, чего я хочу достичь, выглядело бы так:

| [     ] | Some text starts here and is long enough to fil until the end of the line. Then
| [image] | the text continues so it wraps around a few more lines to fit the entire
| [     ] | height of the image.
Eventually, we'll show the text below the image, just like you see in a newspaper.
The content would continue at variable length for the rest of the screen.

Есть ли лучший способ отображения форматированного текста с изображениями? Если есть что-то лучше, чем UIWebView, я бы хотел перейти к этому.

Ответы [ 2 ]

1 голос
/ 18 июля 2011

Я думаю, что ваша основная стратегия должна заключаться в том, чтобы (1) попытаться довести производительность UIWebView до приемлемого уровня и (2) если это не помогло, и это действительно важно, развернуть свой собственный код текстового макета.

Некоторые идеи:

  • Попробуйте загрузить контент в класс UIWebView как можно раньше, прежде чем он отобразится на экране.
  • Убедитесь, что использование встроенных стилей (вместо связанной таблицы стилей) улучшает время загрузки.
  • Смотрите, если использование встроенных изображений (с помощью <img src="data:...") улучшает время загрузки.

Если ничего из этого не работает, и вы хотите свернуть свое собственное, вам придется написать собственный код текстового макета. Возможно, вы могли бы сделать это, используя дополнения USSit в NSString: разбить текст на слова, вычислить размер каждого слова (используя sizeWithFont:) и построчно расположить текст. Вы, вероятно, должны вычислять слово за словом, но фактически рисовать целую линию за раз, которая должна работать лучше. Или вы можете создать новую строку с новыми строками, вставленными в нужных местах, и нарисовать все это за один раз.

Удачи!

0 голосов
/ 13 мая 2016

Попробуйте следующее. Это без CoreText и Html

UIBezierPath * imgRect = [UIBezierPath bezierPathWithRect: CGRectMake (0, 0, 100, 100)];

UIImageView *imageView= [[UIImageView alloc]initWithFrame:CGRectMake(0, 0, 100, 100)];
imageView.image=[UIImage imageNamed:@"defaultImage"];
[self.textView addSubview:imageView];
self.textView.textContainer.exclusionPaths = @[imgRect];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...