2015-02-05 6 views
2

У меня есть одно изображение, которое меняется каждые несколько секунд с завитой анимацией. Я хочу снять видео, так что я делаю это, я снимаю скриншоты каждую секунду и создаю видео. Но я не могу сделать снимок экрана, когда изображение оживляет, в это время он вернет скриншот, в котором изображение стабильно или не оживляет.Снимок экрана с анимированным изображением

Я использую ниже код, чтобы взять скриншот изображения

{ 
    CGSize imageSize = [[UIScreen mainScreen] bounds].size; 
    if (NULL != UIGraphicsBeginImageContextWithOptions) 
     UIGraphicsBeginImageContextWithOptions(imageSize, NO, 0); 
    else 
     UIGraphicsBeginImageContext(imageSize); 

    CGContextRef context = UIGraphicsGetCurrentContext(); 

    // Iterate over every window from back to front 
    for (UIWindow *window in [[UIApplication sharedApplication] windows]) 
    { 
     if (![window respondsToSelector:@selector(screen)] || [window screen] == [UIScreen mainScreen]) 
     { 
      // -renderInContext: renders in the coordinate space of the layer, 
      // so we must first apply the layer's geometry to the graphics context 
      CGContextSaveGState(context); 
      // Center the context around the window's anchor point 
      CGContextTranslateCTM(context, [window center].x, [window center].y); 
      // Apply the window's transform about the anchor point 
      CGContextConcatCTM(context, [window transform]); 
      // Offset by the portion of the bounds left of and above the anchor point 
      CGContextTranslateCTM(context, 
            -[window bounds].size.width * [[window layer] anchorPoint].x, 
            -[window bounds].size.height * [[window layer] anchorPoint].y); 

      // Render the layer hierarchy to the current context 
      [[[window layer] presentationLayer] renderInContext:context]; 

      // Restore the context 
      CGContextRestoreGState(context); 
     } 
    } 

    // Retrieve the screenshot image 
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); 

    UIGraphicsEndImageContext(); 

    return image; 
} 

ли есть какие-либо одна мысль об этом?

Заранее спасибо.

-Austin

+0

попробуйте уменьшить период между скриншотами что-то менее –

+0

да уже пробовал .. – Austin

+0

Что интервал, что и пробовали? –

ответ

1

Я думаю, вы должны использовать:

[[[[window contentView] layer] presentationLayer] renderInContext:context]; 

для того, чтобы захватить текущее состояние анимации, а не происхождение или назначения государства

0

Согласно коду, вы, кажется, снимки экрана. Так просто попробуйте это:

[[UIScreen mainScreen] snapshotViewAfterScreenUpdates:NO] 

В противном случае:

[yourAnimatedView.layer.presentationLayer snapshotViewAfterScreenUpdates:NO] 
Смежные вопросы