Я рисую PDF-страницу в CGContext.
Чтобы правильно нарисовать его, я применяю некоторые преобразования к контексту.
Отрисованный прямоугольник страницы PDF меньше, чем прямоугольник представления.
Я хочу создать третье представление, которое имеет точно такой же кадр, что и часть представления, в которой отображается PDF.
Мое решение работает, но не полностью. Иногда (много раз) прямоугольник неправильный.
Вот что я делаю:
- (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)context {
CGContextSaveGState(context);
// apply transforms to context
// draw pdf page
CGRect calculatedFromRect = CGRectApplyAffineTransform(pageRect, CGContextGetCTM(context));
CGContextRestoreGState(context);
// now draw a green rect to test the frame on a not transformed context
GContextSetFillColorWithColor(context, [UIColor greenColor].CGColor);
CGContextFillRect(context, calculatedFromRect);
self.thirdView.frame = calculatedFromRect;
}
Третий вид - красный. Когда оба ребра (вид и рисунок) равны, я вижу коричневый прямоугольник на экране (красный с альфа на вершине зеленого прямоугольника). Но иногда я вижу, что они два отделены друг от друга (смещение и разница в размере ... когда это происходит, третий вид.фрейм больше, чем calclaredRect).
Поскольку все задействованные виды имеют одинаковый размер и координаты, проблема не заключается в преобразовании координат с помощью convertRect: fromView:. Но я попробовал это, и результат был тот же.