У меня есть View
с некоторыми subviews
, такими как Labels
и ImageViews
.subviews
может иметь любое преобразование.Я должен преобразовать View
в PDF , используя CGContext
.Файл PDF создан, но есть проблема в позициях label
в конечном файле PDF , когда я поворачиваю их в View
.Я не знаю, где я делаю неправильно.Я использую иерархию «Категория для рисования».
Ниже приведен мой код и вид исходного кода, а также окончательный вариант PDF .
UIGraphicsBeginPDFContextToFile(myPathDocs, CGRectMake(0, 0, 612, 792), nil);
// Mark the beginning of a new page.
UIGraphicsBeginPDFPageWithInfo(CGRectMake(0, 0, 612, 792), nil);
CGContextSetFillColorWithColor(UIGraphicsGetCurrentContext(),bgColor.CGColor);
CGContextFillRect(UIGraphicsGetCurrentContext(),CGRectMake(0, 0, 612, 792));
[_pdfView drawHierarchy];
UIGraphicsEndPDFContext();
// Category
#import "UIView+HierarchicalDrawing.h"
@implementation UIView (HierarchicalDrawing)
- (void)drawHierarchy {
[self layoutSubviews];
CGContextRef c = UIGraphicsGetCurrentContext();
CGContextSaveGState(c);
CGContextTranslateCTM(c, self.frame.origin.x, self.frame.origin.y);
if (self.backgroundColor != nil) {
CGContextSetFillColorWithColor(c, [self.backgroundColor CGColor]);
CGContextFillRect(c, self.bounds);
}
if ([self isKindOfClass:[UIImageView class]]) {
if(self.layer.shadowColor) {
CGContextSetShadowWithColor(c, self.layer.shadowOffset, 0.0, self.layer.shadowColor);
}
}
if ([self isKindOfClass:[UILabel class]]) {
CGPoint centrePoint = self.center;
CGFloat angle = atan2f(self.transform.b, self.transform.a);
CGContextRotateCTM(c, angle);
}
[self drawRect:self.bounds];
if(self.clipsToBounds) CGContextClipToRect(c, self.bounds);
for(UIView *v in self.subviews) {
if(v.hidden) continue;
[v drawHierarchy];
}
// NSLog(@"counter is %d",counter);
CGContextRestoreGState(c);
}
@end