Помогите изменить пример приложения QuartzDemo - PullRequest
1 голос
/ 22 мая 2010

Может кто-нибудь, о боже, пожалуйста, избавь меня от моих страданий, написав простой пример того, как, черт возьми, ты передаешь число (значение int), которое создается в файле 1 .m, в другой файл .m.

В демонстрационном приложении Apple под названием QuartzDemo есть файл с именем QuartzImages.m

Этот файл имеет следующую строку кода: [CODE] CGPDFPageRef page = CGPDFDocumentGetPage (pdf, 1); [/ CODE] Обратите внимание на (pdf, 1) в этой строке.Это число следует заменить на целочисленную переменную.

Теперь есть также файл с именем MainViewController.m.В этом файле есть метод?call - (void) viewDidLoad

В этом методе я хочу присвоить целочисленной переменной номер, который заменит чертову "1" на любое число, которое я хочу.

Я потянулмои волосы пытаются это сделать, читая начинающую книгу по разработке iPhone 3, документацию для разработчиков и Бог знает, что не без результатов.

Любая помощь будет принята с благодарностью ...

Вздох *.1015 *

1 Ответ

0 голосов
/ 22 мая 2010

Надеюсь, это избавит вас от страданий ...

Класс QuartzPDFView в QuartzImages.m фактически не создается в viewDidLoad MainViewController. Там его идентификатор класса хранится только в словаре / массиве, на который ссылается табличное представление, предоставляющее меню.

Фактические объекты представления кварца хранятся в QuartzViewController, который сам создается в методе didSelectRowAtIndexPath в MainViewController.

Когда QuartzViewController создается и помещается в контроллер навигации, запускается viewDidLoad QuartzViewController, который добавляет self.quartzView в качестве подпредставления. Метод getter для quartzView (над viewDidLoad в QVC) наконец создает объект представления кварца.

Итак, чтобы указать кварцевому представлению загрузить данную страницу, вот один из способов сделать это (может быть, не самый элегантный):

  1. Добавление свойства pageNumber в класс QuartzPDFView
  2. Установите это свойство в методе didSelectRowAtIndexPath в MainViewController

Незначительная проблема заключается в том, что свойство quartzView в QuartzViewController может быть различными видами кварцевых представлений (не только QuartzPDFView). Поэтому вам нужно проверить, что это QuartzPDFView, прежде чем пытаться установить свойство pageNumber.

Шаг 1 : добавление свойства pageNumber в класс QuartzPDFView:

//QuartzImages.h
@interface QuartzPDFView : QuartzView
{
    CGPDFDocumentRef pdf;
    int pageNumber;
}
@property (nonatomic, assign) int pageNumber;
-(void)drawInContext:(CGContextRef)context;
@end

//QuartzImages.m
@implementation QuartzPDFView
@synthesize pageNumber;
...
CGPDFPageRef page = CGPDFDocumentGetPage(pdf, pageNumber);
...

Шаг 2 : установите это свойство в методе didSelectRowAtIndexPath в MainViewController

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    QuartzViewController *targetViewController = [self controllerAtIndexPath:indexPath];
    if ([targetViewController.quartzView isKindOfClass:[QuartzPDFView class]])
    {
        ((QuartzPDFView *)targetViewController.quartzView).pageNumber = 1;
        //replace 1 with whatever number or variable you want
    }
    [[self navigationController] pushViewController:targetViewController animated:YES];
}

Между прочим, PDF в образце приложения не содержит более одной страницы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...