Я разрабатываю небольшое iPad-приложение с Ganttchart, которое будет показывать События за последние 25 часов.У меня есть 5 уровней масштабирования каждый в течение 1 часа, 30 минут, 15 минут, 5 минут и 1 минуты.Мои клетки 30 пикселей в ширину.Начиная с часового Zoomlevel, у меня есть 25 * 30 пикселей = 750 ширины для контента (пока не нужно прокручивать).При увеличении ширины ячейки останется то же самое, просто будет больше ячеек, и я могу прокрутить по горизонтали.Он прекрасно работает в течение 30, 15 и 5 минут.Когда дело доходит до 1-минутного уровня (ширина 45000 пикселей (30 * 1500), все начинает идти не так, как надо. Изображение прокрутки зависает (я все еще могу прокрутить, но дисплей не обновляется).
DrawRect: был пройден (поэтому он должен был быть нарисован правильно). Я вижу небольшую полосу прокрутки на кнопке (она даже достигает конца). Поэтому я попытался измерить ширину, и кажется, что проблемы начинаютсяшириной около 16300 пикселей. Есть ли способ обойти это? Или какое-либо решение?
Я использую ScrollView с включенным uiview (Ganttchartview), который 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);
}
}