Как исправить проблему перевода при рисовании метки с вращением - PullRequest
0 голосов
/ 29 января 2019

У меня есть View с некоторыми subviews, такими как Labels и ImageViews.subviews может иметь любое преобразование.Я должен преобразовать View в PDF , используя CGContext.Файл PDF создан, но есть проблема в позициях label в конечном файле PDF , когда я поворачиваю их в View.Я не знаю, где я делаю неправильно.Я использую иерархию «Категория для рисования».

Ниже приведен мой код и вид исходного кода, а также окончательный вариант PDF .Original View PDF File created

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
...