2010-08-14 2 views
1

У меня есть определенная функция в приложении, предназначенном для работы на iPhone 4 и iPad. У меня пока нет iPad (потому что Apple забыла мою страну), поэтому я должен проверить его на симуляторе.iphone - захват содержимого главного экрана

У меня есть метод, который должен захватить содержимое основного экрана как CGImageRef.

У меня есть этот метод:

- (CGImageRef)takeScreenshot { 
    UIWindow *theScreen = [[UIApplication sharedApplication].windows objectAtIndex:0]; 
    UIGraphicsBeginImageContext(theScreen.frame.size); 
    [[theScreen layer] renderInContext:UIGraphicsGetCurrentContext()]; 
    UIImage *screenshot = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 
    return screenshot.CGImage; 
} 

Когда я скомпилировать и протестировать версию iPhone моего приложения для iPhone, он прекрасно работает. Но когда я компилирую и тестирую версию iPad на симуляторе iPad, он возвращает черный экран.

Для этого я должен изменить «objectAtIndex: 0» на «objectAtIndex: 1» на второй строке.

Есть ли какая-либо логика для этого или это просто ошибка симулятора? Насколько мне известно, индекс 0 всегда является основным экраном.

Есть ли другой способ захвата содержимого основного экрана из другого класса?

благодарит заранее.

+0

Я тоже думаю об этом. Я думал, что это незаконно с точки зрения яблок, чтобы захватить экран (или это было с использованием частного api)? – Remover

ответ

2

Возможно, вы используете keyWindow для того, чтобы получить прямое окно?

UIWindow *theScreen = [[UIApplication sharedApplication] keyWindow]; 

Для проблемы с городом - рассмотрите возможность заказа из другой страны. ;-)

+0

СПАСИБО, код работает сейчас !!!!!! Не могли бы вы рассказать мне, какова роль этого свойства keyWindow? Будет ли keyWindow всегда основным? Я боюсь использовать это, не зная последствий, или пользователь получит черные экраны. Что касается проблем страны, Apple не будет продавать и из другой страны и запрещает любому дилеру делать это. Мой единственный вариант - ebay. Слишком рискованно, и у меня будет устройство без гарантии (Apple просто покрывает гарантии в оригинальной стране, купленной устройством). – SpaceDog

+1

keyWindow - это экран, который в настоящее время активно отображается. Я думаю, что возиться с массивом окон слишком глубоко в рамках и налагает (недопустимые) предположения. Как правило, есть один вызов makeKeyAndVisible где-то в вашей настройке запуска. Я полностью понимаю проблему с warrenty и т. Д., Купив мой на ebay перед официальным выпуском в Германии с премией ... – Eiko

+0

еще раз спасибо !!! – SpaceDog

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