Цель состоит в том, чтобы получить реальные кадры на странице pdf, чтобы определить искомую строку, я использую PDFKitten lib, чтобы выделить текст, который был обыскан, и попытаться выяснить, как получить кадры для выделенного текста. Метод ядра является следующим:Получить реальный кадр после аффинного преобразования
- (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx
{
CGContextSetFillColorWithColor(ctx, [[UIColor whiteColor] CGColor]);
CGContextFillRect(ctx, layer.bounds);
// Flip the coordinate system
CGContextTranslateCTM(ctx, 0.0, layer.bounds.size.height);
CGContextScaleCTM(ctx, 1.0, -1.0);
// Transform coordinate system to match PDF
NSInteger rotationAngle = CGPDFPageGetRotationAngle(pdfPage);
CGAffineTransform transform = CGPDFPageGetDrawingTransform(pdfPage, kCGPDFCropBox, layer.bounds, -rotationAngle, YES);
CGContextConcatCTM(ctx, transform);
CGContextDrawPDFPage(ctx, pdfPage);
if (self.keyword)
{
CGContextSetFillColorWithColor(ctx, [[UIColor yellowColor] CGColor]);
CGContextSetBlendMode(ctx, kCGBlendModeMultiply);
for (Selection *s in self.selections)
{
NSLog(@"layer.bounds = %f, %f, %f, %f", layer.bounds.origin.x, layer.bounds.origin.y, layer.bounds.size.width, layer.bounds.size.height);
CGContextSaveGState(ctx);
CGContextConcatCTM(ctx, s.transform);
NSLog(@"s.frame = %f, %f, %f, %f", s.frame.origin.x, s.frame.origin.y, s.frame.size.width, s.frame.size.height);
CGContextFillRect(ctx, s.frame);
CGContextRestoreGState(ctx);
}
}
}
Размер слоя (612,000000, 792,000000), но размер s.frame есть (3,110400, 1,107000). Как я могу получить реальный кадр из прямоугольника, который заполнен желтым?
Вся концепция 'frame' не имеет смысла, если не преобразование личности. Документы вполне понятны. – matt
Итак, нет способа сделать это? Правильно? –
Я не знаю, что означает «сделать это». Я не знаю, что вы думаете, что вы пытаетесь сделать; вы даже не объяснили, что есть! Но ваш _question_ - это 'frame', а' frame' - чисто построенное понятие, которое не имеет смысла при преобразовании. – matt