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));
работает для меня.