проблема в настройке UIViews, view.bounds.origin.y при использовании в layer renderInContext: - PullRequest
1 голос
/ 10 августа 2011

Я пытаюсь обрезать и затем преобразовать UIView в файл PDF.UIView правильно обрезает для компонента x, ширины и высоты.Но он берет тот же компонент y, то есть 0 для рендеринга. Я хочу обрезать изображение на 110 точек сверху.Это мой код

UIView *tempV;
    tempV=self.view;
    CGRect fram= tempV.bounds;
    fram.origin.x=537;
    fram.origin.y=110;
    fram.size.width=404;
    fram.size.height=772;
    tempV.bounds=fram;
    NSLog(@"Mail");
    NSLog(@"%f,%f,%f,%f",tempV.bounds.origin.x,tempV.bounds.origin.y,tempV.bounds.size.width,tempV.bounds.size.height);
    NSMutableData *pdfData=[NSMutableData data];
    UIGraphicsBeginPDFContextToData(pdfData, tempV.bounds, nil);
    UIGraphicsBeginPDFPage();
    CGContextRef pdfContext= UIGraphicsGetCurrentContext();
    [tempV.layer renderInContext:pdfContext];
    UIGraphicsEndPDFContext();
    MFMailComposeViewController *mailComposer=[[[MFMailComposeViewController alloc]init] autorelease];
    mailComposer.mailComposeDelegate=self;
    [mailComposer addAttachmentData: pdfData mimeType: @"application/pdf" fileName: @"Dudel creation.pdf"];
    [pdfData writeToFile:@"Dudel creation.pdf" atomically:YES];
    [self presentModalViewController: mailComposer animated: YES];

1 Ответ

2 голосов
/ 10 августа 2011

Вы делаете что-то очень неправильное в своей начальной части кода ... Я даже не хочу идти туда, но позвольте мне разбить несколько вещей:

1) UIGraphicsBeginPDFContextToData секундапараметр CGRect.

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

3) Так почему бы просто не избавиться от начальной части вашего кода и сделать это:

CGRect fram = CGRectMake (537, 110, 404, 772); // A rectangle with no other dependency, since you want one very specific.

NSMutableData *pdfData=[NSMutableData data];
UIGraphicsBeginPDFContextToData(pdfData, fram, nil); // Passing the newly created rectangle as the second parameter to the function.
UIGraphicsBeginPDFPage();
CGContextRef pdfContext= UIGraphicsGetCurrentContext();
[tempV.layer renderInContext:pdfContext];
UIGraphicsEndPDFContext();
MFMailComposeViewController *mailComposer=[[[MFMailComposeViewController alloc]init] autorelease];
mailComposer.mailComposeDelegate=self;
[mailComposer addAttachmentData: pdfData mimeType: @"application/pdf" fileName: @"Dudel creation.pdf"];
[pdfData writeToFile:@"Dudel creation.pdf" atomically:YES];
[self presentModalViewController: mailComposer animated: YES];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...