2010-02-03 1 views
0

Я пытаюсь нарисовать большие объемы данных в UIView как подвид UIScrollView. Чтобы преодолеть ограничения памяти вокруг огромных UIViews, я планирую, как только смещение scrollview достигло максимального или минимального смещения, чтобы перерисовать представление с новыми данными либо с меньшим значением «x», если оно достигло минимума, либо в виде визы наоборот, а затем увеличьте смещение представления до противоположного его текущего положения (т.е. MAX -> MIN и MIN -> MAX). Я попытался сделать это со следующим кодом.iPhone - Графическое отображение больших объемов данных в одном UIView

- (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 является опорным для секции графа вид в настоящее время отображаются. Если он равен нулю, он отображает первые сотни значений. Если это одна, следующая сотня и т. Д. После того, как эта переменная была сброшена в appDelegate, график будет перерисован с новым индексом значений, и скроллинг будет сброшен. Однако, когда этот код запускается, программа вылетает из строя. С и ошибка:

TERMINATING_DUE_TO_UNCAUGHT_EXCEPTION

Это сбой в симуляторе. Что я сделал не так?

XCode 3.2.1 iPhone Firmware 3.1.3

+0

Также, как правильно получить код для отображения на этом форуме. Мне кажется, что это не работает для меня ....:/ – James

+0

О том, как правильно отобразить код, по крайней мере 4 пробела перед каждой строкой кода сделают магию ... –

+0

Теперь о проблеме: Сбой также одного симулятора ? Какое исключение вы получаете? Вы пытались отлаживать? Сбой при первом запуске этого кода? –

ответ

0

Я не вижу проблемы с вашим кодом, представленным (нужно больше деталей), но у меня есть предложение по дизайну проблемы отображения большого графика.

В последнее время я влюбился в использование столов на iPhone. Вы можете отображать что-либо в таблице, и они могут содержать любые виды. Похоже, вы показываете большой длинный график, и вы можете сделать это в таблице и позволить таблице обрабатывать отображение для вас.

Вам нужно будет создать пользовательский UITableViewCell, который может отображать фрагмент диаграммы. Он будет работать точно так же, как и вы, который теперь используется, но он отображает фиксированный диапазон в диаграмме. (Модель данных должна была бы иметь возможность обрезать данные в строки/диапазоны.) Затем отобразите ячейки без строк.

Таким образом, в режиме tableview обрабатываются только те части графика, которые сразу отображаются. Это поможет как с памятью, так и с реагированием. С точки зрения пользователя он будет выглядеть как один произвольно длинный график прокрутки.

+0

Я отдам это. Благодарю. – James

+0

Хорошо, немного проблема с этим решением. Мой график будет отображаться в портретном режиме и будет прокручиваться влево-вправо. UITableViews, похоже, может только прокручивать вверх и вниз и не масштабируется по оси x. Учитывая эти критерии, может ли ваше решение по-прежнему работать? – James

+0

Нет, но почему это должно быть в портрете? Для iPhone-приложений вполне нормально работать в ландшафте. Пейзаж, похоже, даст вашим пользователям более широкий обзор графика. Даже если вы идете с портретом, вы, вероятно, захотите реализовать какое-то решение для обмена мнениями, которое имитирует таблицу, идущую вбок. У мобильных платформ просто нет лошадиных сил для обработки большой графики. Вы должны расколоть их. – TechZen

0

Это делает аварии тренажера. Произошла ошибка: TERMINATING_DUE_TO_UNCAUGHT_EXCEPTION.

+0

Вы должны добавить эту дополнительную информацию в основной корпус. Я пойду вперед и сделаю это для вас, так как я здесь. Вы всегда должны добавлять дополнительную информацию в тело вопроса. Этот формат отличается от традиционного форума. – TechZen

+0

Простите, я не создал учетную запись bona-fide, поэтому я не мог редактировать тело ... Думаю. В любом случае проблема решена. Я просто забыл синтезировать windownum в appDelegate (duuhhh). Спасибо, в любом случае. – James

+0

Вы должны проверить этот ответ как правильный, чтобы система узнала, что на вопрос ответили. – TechZen