我正在开发一个带有甘特图的小型 iPad 应用程序,它将显示过去 25 小时内的事件。我有 5 个缩放级别,每个级别为 1 小时、30 分钟、15 分钟、5 分钟和 1 分钟。我的单元格宽度为 30 像素。从每小时缩放级别开始,我有 25 * 30 像素 = 750 宽度的内容(无需滚动)。当缩放单元格宽度保持不变时,只会有更多单元格,我可以水平滚动。它适用于 30、15 和 5 分钟。当谈到 1 分钟级别(宽度为 45000 像素(30 * 1500)时,事情开始出错。滚动视图冻结(我仍然可以滚动,但显示没有更新)。
drawRect: 已经通过(所以它应该被正确绘制)。我可以在按钮上看到一个小滚动条(它甚至到达末尾)。所以我试图警惕宽度,似乎问题从大约 16300 像素宽度开始。有解决办法吗?或者任何一种解决方案?
我使用带有包含 uiview (Ganttchartview) 的 ScrollView,其中 drawRect: 我已重载。
放大,其中 CELL_WIDTH 为 30,zoomLevels 为 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
- (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);
}
}