Работа с аналитической панелью

Требования к операционной системе: 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];

После выполнения любой из указанных строк кода панель измерений будет скрыта.

См. также:

Примеры использования компонентов