2012-06-05 2 views
2

Я новичок в мире CGAffine. Кто-нибудь знает, почему моя трансформация не работает/не принимается?CGRectApplyAffineTransform ничего не делает?

  1. У меня есть действительное PDFContext созданного с UIGraphicsBeginPDFContextToData и следующая текущая матрица:

    CGAffineTransform curMat = CGContextGetCTM(context); 
    NSLog (@"current context matrix: %f %f %f %f %f %f", curMat.a, curMat.b, curMat.c, curMat.d, curMat.tx, curMat.ty); 
    
  2. значение NSLog:

    текущей матрица: 1,000000 0,000000 -0,000000 -1,000000 0,000000 792,000000

  3. Я создаю матрицу преобразования с:

    CGAffineTransform xform = CGAffineTransformMake(a, b, c, d, tx, ty); 
    
  4. NSLog значения:

    матрицы преобразования: 0,062500 0,000000 0,000000 0,062500 0,000000 0,000000

  5. Я получаю мой прямоугольник от:

    значений
    CGRect pdfBounds = UIGraphicsGetPDFContextBounds(); 
    
  6. NSLog:

    pdfBounds: 0,000000 0,000000 612,000000 792,000000

  7. Я применить матрицу преобразования с:

    CGRectApplyAffineTransform (pdfBounds, xform); 
    
  8. Затем я вновь проверить текущее значение матрицы с:

    CGAffineTransform curMat2 = CGContextGetCTM(context); 
    NSLog (@"current context matrix after transformation: %f %f %f %f %f %f", curMat2.a, curMat2.b, curMat2.c, curMat2.d, curMat2.tx, curMat2.ty) 
    
  9. и значения NSLog такие же, как в начале ,

    текущая матрица контекста после преобразования: 1,000000 0,000000 -0,000000 -1,000000 0,000000 792,000000

Что мне не хватает? Почему трансформация не происходит? Спасибо.

ответ

1

Вы игнорируете результат прикладного преобразования, и вы также не применяете никакого преобразования к контексту.

Шаг 7 должен быть:

CGContextConcatCTM(context, xform); 
+0

Спасибо! Теперь работает. Я должен помнить разницу между получением результата трансформации и ее применением. – TrekOnTV2017

+1

Нет проблем, исходные шаги 5-7 больше не нужны. В этом примере вы можете применить преобразование непосредственно к контексту. – Joe

+0

Да, вы правы. похоже, что CGContextConcatCTM может самостоятельно определить правильный CGRect из контекста – TrekOnTV2017

Смежные вопросы