Рисование PDF-файла из двух представлений

#ios #objective-c #pdf #uiview

#iOS #objective-c #PDF #uiview

Вопрос:

У меня есть первый вид firstView , а также нарисовать второй вид secondView и добавить его в качестве подвида firstView . Также у меня есть метод, который создает из firstView файла PDF:

 -(void)createPDFfromUIView:(UIView*)firstView
{

    NSMutableData *pdfData = [NSMutableData data];

    UIGraphicsBeginPDFContextToData(pdfData, self.view.bounds, nil);
    UIGraphicsBeginPDFPage();
    CGContextRef pdfContext = UIGraphicsGetCurrentContext();


    [firstView.layer drawInContext:pdfContext];

    UIGraphicsEndPDFContext();

    NSArray* documentDirectories = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask,YES);

    NSString* documentDirectory = [documentDirectories objectAtIndex:0];
    NSString* documentDirectoryFilename = [documentDirectory stringByAppendingPathComponent:@"resolution.pdf"];

    [pdfData writeToFile:documentDirectoryFilename atomically:YES];
    NSLog(@"documentDirectoryFileName: %@",documentDirectoryFilename);
}
 

Как я могу нарисовать один PDF-файл из этих двух представлений, поэтому файл PDF должен содержать на одной странице FirstView и secondView

Добавлено

В ViewController в loadView методе

         AWFirstView *firstView = [[AWFirstView alloc] init];
    self.view = firstView;

    self.secondView = [[AWSecondtView alloc] initWithFrame:CGRectMake(0, 50, 300., 300.)];
    [self.secondView setBackgroundColor:[UIColor clearColor]];

     self.createPDFButton = [UIButton buttonWithType:UIButtonTypeCustom];
    self.createPDFButton.frame =CGRectMake(0, 0, 88., 50.);
    [self.createPDFButton setBackgroundColor:[UIColor whiteColor]];
    [self.createPDFButton addTarget:self action:@selector(createPDF) forControlEvents:UIControlEventTouchUpInside];
    [self updateView];
    [self.view addSubview:self.drawWindow];
    [self.view addSubview:self.createPDFButton];
 

В UpdateView это что-то вроде этого:

     -(void)updateView
{
    if(![self isViewLoaded])
        return;

    [[AWServices services].uiContext updateObjectInCurrentContext:amp;_resolution];


    AWFirstView *view = (AWFirstView *)self.view;
    view.post = _resolution.contact.officialPersonPost;
    view.name = _resolution.contact.officialPersonFullname;

    [view.superview setNeedsDisplay];
 

В

 -(void)createPDF{
[self createPDFfromUIView:self.view];
 

}

Ответ №1:

Попробуй это:

 UIGraphicsBeginPDFContextToData(pdfData, firstView.bounds, nil);
UIGraphicsBeginPDFPage();
CGContextRef pdfContext = UIGraphicsGetCurrentContext();

[firstView.layer drawInContext:pdfContext];
 

Обратите внимание, что сейчас я посылаю drawInContext: в firstView , а не myView так, как это делали вы. Если firstView передается в метод, то это должно дать ожидаемый результат.

РЕДАКТИРОВАТЬ: вы не добавляете secondView в качестве подвида; сделайте так (третья строка):

 self.secondView = [[AWSecondtView alloc] initWithFrame:CGRectMake(0, 50, 300., 300.)];
[self.secondView setBackgroundColor:[UIColor clearColor]];
[self.firstView addSubview:self.secondView];
 

Кроме того, то задание self.view , которое вы выполняете, на самом деле выглядит не очень хорошо:

 self.view = firstView;
 

Либо ты это сделаешь:

 [self.view addSubview:self.firstView];
 

или вы определяете loadView в своем контроллере представления и назначаете там self.view .

Комментарии:

1. он сохраняет только FirstView

2. если secondView является подвидом FirstView, он также должен быть сохранен в том же формате PDF. можете ли вы показать, как вы создаете FirstView, secondView и как вы делаете последнее подвидом первого?

3. Я добавил его, но это мне не помогает. Я передаю в UIGraphicsBeginPDFContextToData(pdfData, self.firstView.bounds, nil); FirstView, который находится в @property, я также передаю его, [self.firstView.layer drawInContext:pdfContext]; поэтому я больше не передаю его даже в -(void)createPDF{ [self createPDFfromUIView] методе. Если я проверю self.FirstView.subviews, он отобразит мне secondView как subview

Ответ №2:

Ну, я добавил

 [self.secondView.layer drawInContext:pdfContext];
 

-(void)createPDFfromUIView и это сработало. Но является ли это правильным решением?