I am using PDFKit
and create a subclass of PDFAnnotation
, I want to set my custom padding when I create a free text annotation, so I try to override drawRect function as below
- (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();
}
The padding works well but the text is upside down.
I try to add the context flipping code based on this link https://forums.developer.apple.com/thread/103683
CGContextTranslateCTM(context, 0.0, self.bounds.size.height);
CGContextScaleCTM(context, 1.0, -1.0);
after the line CGContextSaveGState(context);
But it will make the text disappear! Anyone know the reason or meet the similar issue? Thanks!
I have found the answer, in case someone meets the same problem. Actually the CGContextTransform are based on the page coordinate system, so when you use transform
CGContextScaleCTM(context, 1.0, -1.0);
the context is outside the page range. What we need to get isX1 = X2; Y1 + Y2 = 2 * (self.bounds.origin.y + self.bounds.size.height / 2)
, so apply transformCGContextConcatCTM(context, CGAffineTransformMake(1, 0, 0, -1, 0.0, 2 * self.bounds.origin.y + self.bounds.size.height));
works for me.