быстрая визуализация скриншота CONTEXT: drawViewHierarchyInRect: обновления после экрана:

#ios #ios7 #screenshot

#iOS #ios7 #скриншот

Вопрос:

  (UIImage *)screenshot_1
{

    UIGraphicsBeginImageContextWithOptions(self.view.bounds.size, NO, 0);   
    [self.view.layer renderInContext:UIGraphicsGetCurrentContext()];   
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    return image;   
}
  

 (UIImage *)screenshot_2
{

    UIGraphicsBeginImageContextWithOptions(self.view.bounds.size, NO, 0);    
    [self.view drawViewHierarchyInRect:self.view.bounds afterScreenUpdates:YES];    
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    return image;  
}
  

затем оба в ios 7.0:

 CFAbsoluteTime start = CFAbsoluteTimeGetCurrent();
UIImage *image = [self screenshot_1];
CFAbsoluteTime end = CFAbsoluteTimeGetCurrent();
NSLog(@"cost : %f ms", (end - start) * 1000);
  

а затем печать: стоимость: 10.128021 мс

 CFAbsoluteTime start = CFAbsoluteTimeGetCurrent();   
UIImage *image = [self screenshot_2];  
CFAbsoluteTime end = CFAbsoluteTimeGetCurrent();  
NSLog(@"cost : %f ms", (end - start) * 1000);  
  

а затем печать: стоимость: 68.924010 мс

мой вопрос в том, что быстрее?

Ответ №1:

Ну, поскольку 10 мс <68 мс, первый, очевидно, быстрее, однако будьте осторожны, первый метод не будет применять некоторые преобразования, которые может иметь ваше представление, в то время как второй будет. Если вы планируете часто использовать эти функции, вам следует найти способ повторного использования общего контекста резервного копирования.