iOS: текст переворачивается в функции drawRect

Я использую PDFKit и создать подкласс PDFAnnotationЯ хочу установить свой собственный отступ при создании свободной текстовой аннотации, поэтому я пытаюсь переопределить функцию drawRect, как показано ниже

- (void)drawWithBox:(PDFDisplayBox)box inContext:(CGContextRef)context {
      UIGraphicsPushContext(context);
      CGContextSaveGState(context);
      NSAttributedString * mystring = [[NSAttributedString alloc] initWithString:self.contents attributes:@{
                                                                            NSFontAttributeName: self.font,
                                                                 NSForegroundColorAttributeName: UIColor.blackColor  }];

      [mystring drawInRect:CGRectMake(self.bounds.origin.x + 10, self.bounds.origin.y + 10, self.bounds.size.width-20, self.bounds.size.height-20)];
      CGContextRestoreGState(context);
      UIGraphicsPopContext();
}

Заполнение работает хорошо, но текст вверх ногами.

Я пытаюсь добавить код переключения контекста на основе этой ссылки https://forums.developer.apple.com/thread/103683

CGContextTranslateCTM(context, 0.0, self.bounds.size.height);
CGContextScaleCTM(context, 1.0, -1.0);

после линии CGContextSaveGState(context);Но это заставит текст исчезнуть! Кто-нибудь знает причину или встречает подобную проблему? Спасибо!

1 ответ

Я нашел ответ на тот случай, если кто-то столкнется с той же проблемой. На самом деле CGContextTransform основан на системе координат страницы, поэтому при использовании преобразования CGContextScaleCTM(context, 1.0, -1.0); контекст находится за пределами диапазона страниц. Что нам нужно, это получить X1 = X2; Y1 + Y2 = 2 * (self.bounds.origin.y + self.bounds.size.height / 2)так что примените преобразование CGContextConcatCTM(context, CGAffineTransformMake(1, 0, 0, -1, 0.0, 2 * self.bounds.origin.y + self.bounds.size.height)); работает для меня.

Другие вопросы по тегам