Man*_*ran 16 objective-c uitextview core-text ios
我正在开发一个Reader项目,目前我正在解析XML文件并转换为属性字符串,我在CoreText中渲染它(使用的Apple 示例代码).
XML文件大小超过6 MB.文本正确呈现,但我无法呈现图像和表格(如html表格).
同时我需要管理性能.我也尝试了UITextView,但它只显示了四分之一的文本,之后文本消失了.
有没有其他技术来渲染文本,图像和表格?
PS - 客户不想要UIWebView.
UIScrollView 可能是唯一的可能性。将文档分成几个部分,并将 UITextView、UIImageView 和 UITableView 类的适当子视图放入 UIScrollView 中。为了降低内存占用,请仅保留那些实际可见的子视图。
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
[self removeSubViews];
[self addSubViews];
}
- (void)removeSubViews {
for (UIView *subView in documentScrollView.subviews) {
[subView removeFromSuperview];
}
}
- (void)addSubViews {
NSArray* visibleSubViews = [self getAllSubViewsThatAreVisible];
for (UIView *subView in visibleSubViews) {
[documentScrollView addSubview:subView];
}
}
- (NSArray*)getAllSubViewsThatAreVisible {
NSMutableArray* arrayOfSubViews = [[NSMutableArray alloc] init];
NSArray* arrayOfVisibleComponents = [self getAllVisibleComponents];
for (NSDictionary *component in arrayOfVisibleComponents) {
//there you have to create new UITableView, UITextView, or UIImageView according to what is needed and put this new component into arrayOfSubViews
}
return arrayOfSubViews;
}
- (NSArray*)getAllVisibleComponents {
//this is hard to tell how it should be written as I do not know your data. Lets assume, that you have an array of NSDictionary objects. Check all objects in this array, whether they can be visible or not. You shall know their future coordinates in scrollView, while in scrollView, you get visible part by usig property named contentOffset, which will give you top left corner coordinate and by using also property frame.size, you get whole visible rectangle
}
Run Code Online (Sandbox Code Playgroud)
完成此操作并进行测试后,您可以通过不删除所有子视图并保留那些仍然可见的子视图来优化它。第二个优化是根据 Y 坐标划分组件数组,因此您不必总是迭代整个巨大数组。第三个优化可以是,您不会在每次小滚动后重新绘制,而是会放置一些实际上不可见但接近可见区域的组件,并且在滚动后首先检查是否需要重新绘制。
| 归档时间: |
|
| 查看次数: |
486 次 |
| 最近记录: |