Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone UIScrollView contentSize是否有最大值?_Iphone_Uiscrollview_Contentsize - Fatal编程技术网

Iphone UIScrollView contentSize是否有最大值?

Iphone UIScrollView contentSize是否有最大值?,iphone,uiscrollview,contentsize,Iphone,Uiscrollview,Contentsize,我正在开发一款带有甘特图的小型iPad应用程序,它将显示过去25小时内发生的事件。我有5个缩放级别,分别为1小时、30分钟、15分钟、5分钟和1分钟。我的单元格宽度为30像素。从每小时Zoomlevel开始,我有25*30像素=750宽度的内容(无需滚动)。当缩放单元格宽度保持不变时,只会有更多单元格,我可以水平滚动。它适用于30、15和5分钟。当谈到1分钟的水平(45000像素(30*1500)的宽度时,事情开始出错。滚动视图冻结(我仍然可以滚动,但显示没有更新) drawRect:已经运行过

我正在开发一款带有甘特图的小型iPad应用程序,它将显示过去25小时内发生的事件。我有5个缩放级别,分别为1小时、30分钟、15分钟、5分钟和1分钟。我的单元格宽度为30像素。从每小时Zoomlevel开始,我有25*30像素=750宽度的内容(无需滚动)。当缩放单元格宽度保持不变时,只会有更多单元格,我可以水平滚动。它适用于30、15和5分钟。当谈到1分钟的水平(45000像素(30*1500)的宽度时,事情开始出错。滚动视图冻结(我仍然可以滚动,但显示没有更新)

drawRect:已经运行过了(因此应该正确绘制)。我可以在按钮处看到一个小滚动条(它甚至到达了末尾)。因此我尝试小心宽度,似乎问题从16300像素宽度开始。 有解决这个问题的办法吗?或者任何解决方案

我使用一个包含uiview(GantChartView)的ScrollView,其中drawRect:我已经重载了

放大单元格宽度为30且缩放级别为25、50、75、300、1500的区域

 -(IBAction) zoomIn:(id)sender {
    self.zoomIndex++;
    int width = CELL_WIDTH * [[self.zoomLevels objectAtIndex: self.zoomIndex] intValue];
    self.frame = CGRectMake(self.frame.origin.x, self.frame.origin.y, width, self.frame.size.height);
    [self.parentView setContentSize: CGSizeMake(self.frame.size.width, self.frame.size.height)];
    [self setNeedsDisplay];
}
drawRect用于绘制线条的位置

CGContextRef context=UIGraphicsGetCurrentContext();
CGContextSetStrokeColorWithColor(上下文[UIColor blackColor].CGColor);
CGContextSetLineWidth(上下文,2.0);
int interval=[[self.zoomLevels objectAtIndex:self.zoomidex]intValue];
int width=单元格宽度;
对于(int i=0;i
据我所知,
contentSize
没有最大值,直到内存用完为止

把它当作一个桶,你可以在里面装满水,但只有当水溢出来的时候,你才能把它装满。这里的情况也是如此


因此,建议使用
UITableView
,因为它具有更好的内置内存管理。

我建议对此类应用使用无限滚动视图。这包括一种基于固定(且有限)内容大小的编码技巧,使用户可以体验无限滚动。 WWDC 2011展示了一个很好的例子,因此,如果您有开发人员帐户,您可以下载视频(有专门用于滚动视图的部分)。 或者你也可以参考网上的一些例子。
当然,你需要重构你的代码,只加载所需的内容,而不是整个内容来填满可用的内存。

Hmm,这确实是一个想法。我必须看一下。感谢链接。我必须看一下。
- (void)drawRect:(CGRect)rect {
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSetStrokeColorWithColor(context, [UIColor blackColor].CGColor);
    CGContextSetLineWidth(context, 2.0);        
    int interval = [[self.zoomLevels objectAtIndex: self.zoomIndex] intValue];
    int width = CELL_WIDTH;
    for (int i = 0; i < interval; i++) {
        CGContextMoveToPoint(context, width * (i +1), START_AT); 
        CGContextAddLineToPoint(context, width * (i +1), rect.size.height); 
        CGContextStrokePath(context);
    }
    for (int i = 0; i < NUMBER_OF_ROWS; i++) {
        CGContextMoveToPoint(context, 0, START_AT + i * CELL_WIDTH); 
        CGContextAddLineToPoint(context, rect.size.width, START_AT + i * CELL_WIDTH); 
        CGContextStrokePath(context);
    }
}