2017-01-09 10 views
0

Я пытался захватить и сохранить изображение на заставке в application:didFinishLaunchingWithOptions: используя следующий код:iOS: возможно ли захватить изображение заставки?

UIWindow *w = [[[UIApplication sharedApplication] windows] firstObject]; 

UIGraphicsBeginImageContext(w.bounds.size); 
[w.layer renderInContext:UIGraphicsGetCurrentContext()]; 
UIImage *img = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 

NSString *applicationDocumentsDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 
time_t unixTime = (time_t) [[NSDate date] timeIntervalSince1970]; 
NSString *storePath = [NSString stringWithFormat:@"%@/%ld.png", applicationDocumentsDir, unixTime]; 
[UIImagePNGRepresentation(img) writeToFile:storePath atomically:YES]; 

Однако, к сожалению, изображение сохраняется как прозрачное изображение. Вероятно, потому, что мой объект UIWindow не является правильным. Может ли кто-нибудь направить меня на успех?

ответ

0

Почему бы вам не попробовать приведенный ниже код после установки идентификатора раскадровки для LaucnhScreen.storyboard контроллер просмотра файлов.

UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"LaunchScreen" 
                  bundle: nil]; 

    UIViewController *controller = (UIViewController*)[mainStoryboard 
                 instantiateViewControllerWithIdentifier: @"Launch"]; 
    UIGraphicsBeginImageContext(w.bounds.size); 
    [controller.view.layer renderInContext:UIGraphicsGetCurrentContext()]; 
    UIImage *img = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 

    NSString *applicationDocumentsDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 
    time_t unixTime = (time_t) [[NSDate date] timeIntervalSince1970]; 
    NSString *storePath = [NSString stringWithFormat:@"%@/%ld.png", applicationDocumentsDir, unixTime]; 
    [UIImagePNGRepresentation(img) writeToFile:storePath atomically:YES]; 
+0

Спасибо за ответ, но это не ответ на мой вопрос. Мой экран заставки основан на статических изображениях, а не на раскадровке. Я не могу изменить его для проекта, над которым я работаю – ishahak

0

Что касается из answer The UIApplicationDelegate обычно имеет ссылку на "главного окна":

[[[UIApplication sharedApplication] delegate] window]; 
+0

Спасибо за ответ, но в этом окне нет доступа к заставке – ishahak

 Смежные вопросы

  • Нет связанных вопросов^_^