#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
и это сработало. Но является ли это правильным решением?