Как я могу правильно получить текущее преобразование presentationLayer? - PullRequest
2 голосов
/ 18 мая 2009

Я пробовал это:

CATransform3D rotationTransform = [[self.layer presentationLayer] transform];

Это не будет работать, так как компилятор выдаст предупреждение и ошибку:

Предупреждение: несколько методов "-transform" найденный. Ошибка: неверный инициализатор.

Итак, я попробовал это:

CATransform3D rotationTransform = [[self.layer presentationLayer] valueForKey:@"transform"];

Ошибка: неверный инициализатор.

Что с этим не так?

1 Ответ

6 голосов
/ 18 мая 2009

-presentationLayer возвращает id. Вы должны привести его обратно к CALayer:

CATransform3D rotationTransform = [(CALayer*)[self.layer presentationLayer] transform];

Чтобы быть в безопасности, вы должны сначала проверить:

CATransform3D rotationTransform = {0};
CALayer* presentationLayer = (CALayer*)[self.layer presentationLayer];
if( [presentationLayer respondsToSelector:@selector(transform)]) {
    rotationTransform = presentationLayer.transform;
}

Но на практике без этой проверки все будет хорошо.

Во втором случае -valueForKey: также возвращает id, который вы пытаетесь присвоить struct, что невозможно сделать неявным образом. Вы не можете просто привести указатель объекта в структуру.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...