Главная » iPhone » Выполнение дампа экрана iPhone

0

Класс UIApplication содержит метод __dumpScreenContents, который может использоваться на iPhone для выполнения мгновенных снимков (screenshots) экрана. Этот метод записывает на диск файл /tmp/foo_0.png.

Чтобы выполнить дамп содержимого экрана из вашего приложения, вызовите метод _dumpScreenContents из вашего класса UIApplication: [ self _dumpScreenContents: nil ];

Чтобы сделать мгновенный снимок экрана, вам потребуется, по крайней мере, вид основного окна с содержимым. В результате каждого вызова dumpScreenContents файл записывается на одно и то же место, /tmp/foo_0.png, поэтому если вы делаете несколько мгновенных снимков, то каждый раз перемещайте его из этого места.

Пример: программа захвата экрана из командной строки

Данный пример делает мгновенный снимок экрана прямо из командной строки, позволяя пользователю войти в систему посредством SSH и захватить экран приложения, выполняемого в текущий момент. Выполнять мгновенные снимки из командной строки может только фирменное программное обеспечение iPhone версии \ .х. Версии 2.x и старше могут делать мгновенные снимки только из вашего приложения, поэтому если вы работаете с версией 2.л\ то вам потребуется интегрировать этот код в ваш проект. Данный пример создает невидимое окно и вид, сквозь который на экране просвечивается текущее приложение. При запуске данный пример незамедлительно делает дамп содержимого экрана в файл /tmp/foo_().png.

Чтобы скомпилировать это приложение из командной строки, воспользуйтесь пакетом инструментов следующим образом:

$ arm-apple-darwin9-gcc -о ScreenDump ScreenDump.m -lobjc

-framework UIKit -framework CoreFoundation -framework Foundation

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

ldid:

$ scp ScreenDump root@iphone:/usr/bin

SSH в iPhone запустите из командной строки:

$ ssh -1 root iphone # /usr/bin/ScreenDump

Листинг П1 содержит соответствующий код.

| Листинг П1. Пример выполнения мгновенного снимка (ScreenDump.h)

………………………………………………………… ! ННК&яШпяН..                     

#import <UIKit/UIKit.h>

^interface ScreenDumpApp : UIApplication {

UIWindow *window;

}

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification; @end

@implementation ScreenDumpApp                      .

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification { CGRect rect = [ UIHardware fullScreenApplicationContentRect ];

window = [ [ UlWindow alloc ] initWithContentRect: rect ]; [ window orderFront: self ]; [ window makeKey: self J; [ window _setHidden: YES ]; [ window setContentView: [

[ UlView alloc ] initWithFrame: rect ]

];

printf("Dumping screen contents…\n"); [ self _dumpScreenContents: nil ]; [ self terminate ];

}

int main(int argc, char *argv[]) {

NSAutoreleasePool *autoreleasePool = [ [ NSAutoreleasePool alloc ] init

] ;

int returnCode = UIApplicationMain(argc, argv,

@"ScreenDumpApp", @"ScreenDumpApp"); [ autoreleasePool release ]; return returnCode;

}

@end

Как это работает

Вот как работает пример с мгновенным снимком:

1. При порождении приложения сразу же создаются объекты uiwindow и uiview. Чтобы сделать окно скрытым, используется метод setHidden окна.

2.      Вызывается метод экземпляра dumpScreenContents класса uiApplication, который делает дамп содержимого экрана в файл /tmp/foo_0.png.

3.     Затем приложение вызывает собственный завершающий метод, вполне эффективно удаляя себя.

Источник: Здзиарски Дж. iPhone. Разработка приложений с открытым кодом: Пер„с англ. — 2-е изд., перераб. и доп. — СПб.: БХВ-Петербург, 2009. — 368 е.: ил.

По теме:

  • Комментарии