Извлечение CGRect из преобразованного CGContext и применение к UIView - PullRequest
4 голосов
/ 15 марта 2012

Я рисую 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:. Но я попробовал это, и результат был тот же.

...