滚动到视图时菜单的屏幕外文本出现延迟 - WebView 问题? (iOS)
Posted
技术标签:
【中文标题】滚动到视图时菜单的屏幕外文本出现延迟 - WebView 问题? (iOS)【英文标题】:Offscreen Text of menu experiences delay when scrolled into view - WebView issue ? (iOS) 【发布时间】:2011-08-12 05:31:20 【问题描述】:我的 ios 应用中有一个大的向下钻取菜单。 菜单内容源自 XML。 它存储在 SQLite 数据库中,并且正在使用 Webview。 为什么要使用 Webview?因为文本具有样式(字体大小/颜色)。
问题是:当您向下滚动菜单时,之前在屏幕外的文本栏会在 1/2 秒内保持不可见状态。他们需要一段时间来加载。然后你再次向上滚动,被移出屏幕的最上面的项目现在也需要一些时间才能出现。
在使用 WebView 时,有没有办法提高这种性能?有没有办法消除这种视觉加载时间?有没有我们应该考虑的方法?谢谢你的帮助。
【问题讨论】:
【参考方案1】:您是否将 Web 视图放入 UITableView
中?你真的不能那样做;他们会互相争斗(这被明确记录为不支持)。
有两种主要的解决方案:将程序的这一部分重新设计为 Web 应用程序,或者使用 Core Text 进行布局。在单个 UIWebView
中完成所有工作要快得多,但需要在 javascript 和 Objective-C 之间切换,这很难开发和调试。如果你这样做,我一般建议你将 JavaScript 部分构建为一个“迷你应用”,你可以在 Safari 中开发和调试,然后放入。
对于简单的布局,Core Text 并不太难。如果您创建一个CFAttributedString
,那么您只需绘制一个非常简单的框架:
- (id)initWithFrame:(CGRect)frame
if ((self = [super initWithFrame:frame]))
CGAffineTransform
transform = CGAffineTransformMakeScale(1, -1);
CGAffineTransformTranslate(transform,
0,
-self.bounds.size.height);
self.transform = transform;
self.backgroundColor = [UIColor whiteColor];
return self;
- (void)drawRect:(CGRect)rect
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetTextMatrix(context, CGAffineTransformIdentity);
CGPathRef path = CGPathCreateWithRect(self.bounds, NULL);
CFAttributedStringRef
attrString = (__bridge CFTypeRef)self.attributedString;
// Create the framesetter using the attributed string
CTFramesetterRef framesetter = CTFramesetterCreateWithAttributedString(attrString);
// Create a single frame using the entire string (CFRange(0,0))
// that fits inside of path.
CTFrameRef
frame = CTFramesetterCreateFrame(framesetter,
CFRangeMake(0, 0),
path,
NULL);
// Draw the frame into the current context
CTFrameDraw(frame, context);
CFRelease(frame);
CFRelease(framesetter);
CGPathRelease(path);
还有所需的插件:是的,我的书将包含 20 多页关于各种精美文本布局的内容,主要使用 Core Text(今天刚刚完成该章)。但是对于简单的东西,只要你不需要剪切和粘贴,以上就足够了。
【讨论】:
非常感谢罗布。我们将对此进行调查。即使有一个非常大的向下钻取菜单,您认为 Core Text 方法是否可行,这是什么?我预计源 XML 将是 10MB。 Core Text 是 Cocoa 中最底层的文本布局引擎。这是目前最快的系统。对于我认为可以很好地解决此问题的方法,请参阅github.com/Cocoanetics/NSAttributedString-Additions-for-html以上是关于滚动到视图时菜单的屏幕外文本出现延迟 - WebView 问题? (iOS)的主要内容,如果未能解决你的问题,请参考以下文章
滚动到滚动视图/滚动视图中的特定文本字段 当键盘在屏幕上时停止滚动