iOS在图像周围包装文本

时间:2011-07-15 20:03:20

标签: iphone ios4

在我的应用视图中,我有一些短文字段,我想把它放在图像周围。通常,图像将位于文本的左侧,文本将按照您通常的预期流动。图像具有不同的高度和宽度以及尺寸,4-30kb png文件。文本的长度各不相同,可以是2个句子到几个段落之间的任何一个。有文本标记,因此可以相应地格式化不同的行。

我一直在我的UIView中使用UIWebView以最快的方式执行此操作,但我注意到即使我的文本和图像是本地的,但是当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 个答案:

答案 0 :(得分:1)

我认为你的基本策略应该是(1)尝试将UIWebView的性能提升到可接受的水平,(2)如果失败了,这非常重要,请滚动你自己的文本布局代码。

一些想法:

  • 尝试在屏幕上显示内容之前尽早将内容加载到UIWebView类中。
  • 查看使用内联样式(而不是链接样式表)是否可以缩短加载时间。
  • 查看使用内嵌图像(使用<img src="data:...")是否可以缩短加载时间。

如果这些都不起作用,并且您想要自己动手,那么您将不得不编写自己的文本布局代码。您可以通过使用NSString的UIKit添加来实现此目的:将文本拆分为单词,计算每个单词的大小(使用sizeWithFont:),并逐行布局文本。您应该逐个字地计算,但实际上一次绘制一条整线,应该表现得更好。或者你可以创建一个新的字符串,在正确的位置插入换行符并一次性绘制整个内容。

祝你好运!

答案 1 :(得分:0)

请尝试以下操作。这是没有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];