Есть ли максимум для UIScrollView contentSize?

Я разрабатываю небольшое приложение для iPad с диаграммой Ганта, которая покажет события за последние 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);
    }
}
6
задан Srikar Appalaraju 22 September 2011 в 12:01
поделиться