我试图将UIView中的大量数据绘制为UIScrollView的子视图。为了克服围绕巨大的UIViews的内存限制,我计划,一旦scrollview的偏移量达到最大或最小偏移量,用新数据重绘视图,如果达到最小值,则用较小的“x”值或签证反之亦然,然后将视图的偏移增加到其当前位置的相反位置(即MAX - > MIN和MIN - > MAX)。我尝试使用以下代码。
- (void)scrollViewDidScroll:(UIScrollView *) scrollViewer {
CGPoint p = scrollViewer.contentOffset;
if(p.x==0){
if(appDel.windownum>0){
appDel.windownum--;
[graphview setNeedsDisplay];
}
}
if(p.x==1000){
if(appDel.pcont>appDel.windownum*100){
appDel.windownum++;
[graphview setNeedsDisplay];
}
}
}
appDel.windownum
是视图当前显示的图表部分的参考。如果它等于零,则显示前100个值。如果它是1,接下来的一百,等等。在appDelegate中重置此变量后,将使用新的索引值重新绘制图形,并重置scrolloffset。但是,运行此代码时,程序崩溃。有错误:
TERMINATING_DUE_TO_UNCAUGHT_EXCEPTION
它在模拟器中崩溃了。我做错了什么?
XCode 3.2.1 iPhone固件3.1.3
答案 0 :(得分:0)
它会使模拟器崩溃。产生的错误是:TERMINATING_DUE_TO_UNCAUGHT_EXCEPTION。
答案 1 :(得分:0)
我没有看到您的代码出现问题(需要更多详细信息),但我确实对显示大图的问题有设计建议。
我最近迷上了使用iPhone上的表格。您可以在表格中显示任何内容,并且可以保存任何视图。听起来你正在显示一个很大的长图,你可以在一个表中执行此操作,让表为您处理显示。
您需要创建一个可以显示图表切片的自定义UITableViewCell。它会像你现在使用的视图一样工作,除了它会在图表中显示一个固定的范围。 (您的数据模型必须能够将数据切割成行/范围。)然后显示没有行的单元格。
这样,tableview只处理绘制图表中立即显示的那些部分。这将有助于记忆和响应。从用户的角度来看,它看起来像一个任意长的滚动图。