2015-06-08 1 views
1

Я собираю каждый кадр вывода видео и обрабатывая его, добавляю CALayer к оверлейу, который должен быть преобразован в соответствии с результатами обработки кадра.iOS Применить CATransform3D на каждом кадре

Этот CALayer в основном знает, как нарисовать стрелу. Если я просто добавлю CALayer в каждый кадр, он работает, но если я применил на нем преобразование, он вообще не будет отображаться.

- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection 
{ 
    dispatch_async(dispatch_get_main_queue(), ^(void) 
    { 
     firstLayer.transform = CATransform3DMakeRotation(M_PI_2, 1, 0, 0); 

     [firstLayer setNeedsDisplay]; 
    }); 

} 

Что не так? Как я могу сделать наложение показать слой, преобразованный на каждом кадре?

+0

Если CALayer может отображать стрелок без преобразования, вам нужно проверить, если вы даете правильный CTM. является ли вектор (1,0,0) действительным в вашем случае? – Wingzero

ответ

0

Вы поворачиваете свой слой на π/2 радиан (90 °) вокруг оси X, делая ваш слой абсолютно невидимым, потому что вы смотрите на него точно на краю.

Я предполагаю, что вы решили повернуть его на 90 ° по оси Z, ось, о которой вы можете думать, указывая в/из экрана. Если это то, что вы хотели сделать, то вращаться вокруг этой оси, а не, как это:

firstLayer.transform = CATransform3DMakeRotation(M_PI_2, 0, 0, 1); 
+1

Thx! Это было самое глупое ночное программирование, когда-либо ... Pi/2! .. Конечно, ничего не видно. Я бы выбрал smth более интересный для этих целей тестирования) – Fawkes