Требования к операционной системе: iOS 5.0 и выше.
Мобильное устройство: iPad.
В данном примере описываются некоторые приёмы работы с аналитической панелью. После запуска примера выполняются следующие операции:
на основе данных создаётся аналитическая панель;
включается и отключается полноэкранный режим отображения аналитической панели;
отображается и скрывается панель измерений в полноэкранном режиме;
включается режим слайд-шоу.
Для выполнения примера необходимо разместить взамен метода executeExample класса ViewController (см. раздел «Отображение аналитической панели») следующий код:
// Выполняет пользовательский пример, размещённый в теле данного метода
-(void) executeExample {
// Получаем контроллер аналитической панели
MADashboardReportViewController *dashboard = (MADashboardReportViewController *)m_controller;
// Получаем делегат контроллера аналитической панели
MADashboardReportDelegateImpl *delegate = (MADashboardReportDelegateImpl*)[dashboard delegate];
// Определяем путь к ресурсам
NSArray *resourcesPaths = [delegate dashboardResourcesPath];
// Определяем MIME-типы ресурсов
NSArray *resourcesMimesTypes = [delegate dashboardResourcesMimeTypes];
// Определяем путь к xml-файлу
NSString *xmlPath;
for (int i = 0; i < [resourcesMimesTypes count]; i++) {
if ([(NSString *)[resourcesMimesTypes objectAtIndex:i] isEqualToString:@"application/xml"]) {
xmlPath = (NSString *)[resourcesPaths objectAtIndex:i];
}
}
// Получаем данные из XML-файла
NSData *xmlData = [NSData dataWithContentsOfFile:xmlPath];
APXMLParserObject *structure = [APXMLParser parseXML:xmlData];
// Создаём аналитическую панель
APKap *kap = [APKap alloc];
[kap initWithParserObject:structure delegate: dashboard];
if ([[kap compositeBlocks] count] == 0) {
kap = [dashboard report];
[kap setDelegate: dashboard];
}
// Получаем делегат аналитической панели
MADashboardReportViewController *kapDelegate = (MADashboardReportViewController *)[kap delegate];
[kapDelegate setValue:kap forKey:@"m_report"];
// Получаем справочник составных блоков
NSMutableDictionary *compositeBlocks = [kap compositeBlocks];
if ([[compositeBlocks allKeys] count] > 0) {
// Получаем ключ последнего составного блока
NSString *blockKey = [[compositeBlocks allKeys]
objectAtIndex:([compositeBlocks count] - 1)];
// Устанавливаем ключ блока, находящегося в полноэкранном режиме
[kap setFullScreenBlockKey:blockKey];
// Получаем заголовок последнего составного блока
NSString *title = [kap titleForCompositeBlock:blockKey];
if (title != nil) {
// Добавляем заголовок в справочник заголовков составных блоков
[[kap dataViewsTitles] setObject:title forKey:blockKey];
NSLog(@"Заголовок последнего составного блока: %@", title);
}
// Разрешаем использование полноэкранного режима
[kap setIsfullScreenEnabled:YES];
// Разрешаем переключение аналитической панели в режим слайд-шоу
[kap setSlideMode:YES];
// Обновляем аналитическую панель
[self refreshKap:kap];
}
}
// Обновляем аналитическую панель
-(void)refreshKap: (APKap*) kap {
// Получаем объект для работы с контейнером, разделённым на два представления данных
SplitViewController *split = (SplitViewController*)[m_controller splitViewController];
if([kap isfullScreenEnabled]) {
// Отображаем элементы управления для полноэкранного режима
[kap showFullscreenCompositeBlockWithKey: [kap fullScreenBlockKey]];
// Отображаем панель измерений
[split setFirstViewVisible:YES];
// Получаем последний составной блок
APCompositeBlock *compositeBlock = [[kap dataViews] objectForKey:[kap fullScreenBlockKey]];
// Отображаем данный блок во весь экран
[split setSecondView:[compositeBlock view]];
}
if ([kap slideMode]) {
// Создаём скриншот текущего окна с задержкой, равной 1 секунде
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 1.0 * NSEC_PER_SEC), dispatch_get_main_queue(), ^{
// Создаём скриншот
UIImage *image = [m_controller screenshot];
MADashboardReportDelegateImpl *delegate = (MADashboardReportDelegateImpl*)[m_controller delegate];
// Устанавливаем скриншот
[delegate setScreenshot:UIImagePNGRepresentation(image)];
UIImageView *imageView = [[UIImageView alloc] initWithImage: image];
// Отображаем скриншот в правой половине окна
[split setSecondView: imageView];
});
}
}
В результате выполнения примера аналитическая панель была отображена в полноэкранном режиме и в режиме слайд-шоу. Слева от отчёта отображена панель измерений, справа - ранее созданный скриншот отчёта панели.
В консоли среды разработки был выведен заголовок последнего составного блока:
Заголовок последнего составного блока: GDP per capita,
PPP (constant 2005 international $)
Результат останется тем же, если удалим строку кода:
[kap showFullscreenCompositeBlockWithKey: [kap fullScreenBlockKey]];
И на её место добавим следующую строку:
[(MADashboardReportViewController *)[kap delegate] showControlsForFullscreenBlock:[kap fullScreenBlockKey]];
Далее уничтожим панель измерений, расположенную слева. Для этого добавим к содержимому метода executeExample следующую строку кода:
[kap dismissFullscreenCompositeBlock];
После повторного запуска примера боковая панель будет скрыта. Аналогичный результат получим после выполнения любой из приведённых ниже строк кода:
// Сообщаем о выходе из полноэкранного режима отображения составного блока [kap fullscreenViewDismissed]; [kapDelegate dismissControlsForFullscreenBlock]; [kapDelegate hideControlsForFullscreenBlock:blockKey];
После выполнения любой из указанных строк кода панель измерений будет скрыта.
См. также: