CGContextConcatCTM против CALayer affineTransform - PullRequest
2 голосов
/ 26 сентября 2011

Я пытаюсь изменить аффинное преобразование CALayer, чтобы то, что нарисовано в нем, искажалось.

Сначала я делал это без CALayers, просто перерисовывал с другим CGAffineTransform, переданным в CGContextConcactCTM.

Это сработало, но было недостаточно быстро, поэтому я решил сделать это с CALayer, чтобы он не перерисовывался каждый раз. Это просто трансформируется.

Проблема в том, что настройка myLayer.affineTransform = myTransform; похоже, не имеет такого эффекта, как перерисовка с CGContextConcatCTM (myTransform);

Я новичок в Objective-C и довольно слабо разбираюсь в математике, поэтому я уверен, что делаю что-то не так. Но я не вижу, что.

Спасибо.

1 Ответ

0 голосов
/ 27 сентября 2011

Хорошо, не важно, я узнал.

Оказывается, myLayer.affineTransform выполняет преобразование относительно центра слоя, где CGContextContactCTM делает это относительно источника.

Итак, я только что соединил 2 других преобразования:

    CGPoint center;
    center.x = capa.bounds.origin.x + capa.bounds.size.width/2;
    center.y = capa.bounds.origin.y + capa.bounds.size.height/2;        
    CGAffineTransform trf1 = CGAffineTransformMakeTranslation(center.x, center.y);
    CGAffineTransform trf2 = CGAffineTransformMakeTranslation(-center.x, -center.y);        
    capa.affineTransform = CGAffineTransformConcat(trf1, CGAffineTransformConcat(mat, trf2));      
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...