Принудительно перерисовать UIView немедленно, а не во время следующего цикла выполнения - PullRequest
9 голосов
/ 14 мая 2010

Я создал UIImagePicker / представление камеры, с панелью инструментов и пользовательской кнопкой для создания снимка. Я не могу по-настоящему перейти к использованию способа по умолчанию из-за пользовательской кнопки, и я рисую поверх вида.

Когда вы нажимаете кнопку, я хочу сделать скриншот с помощью UIGetScreenImage (); тем не менее, панель инструментов отображается на изображении, даже если я сперва ее скрываю:

//hide the toolbar
self.toolbar.hidden = YES; 

// capture the screen pixels
CGImageRef screenCap = UIGetScreenImage();

Я почти уверен, что это потому, что хотя панель инструментов скрыта, она перерисовывается, когда функция возвращается, и мы входим в следующий цикл выполнения - после вызова UIGetScreenImage.

Я попытался сделать следующее дополнение, но это не помогло:

//hide the toolbar
self.toolbar.hidden = YES; 
[self.toolbar drawRect:CGRectMake(0, 0, 320, 52)];

// capture the screen pixels
CGImageRef screenCap = UIGetScreenImage();

Я также пытался использовать setNeedsDisplay, но это тоже не работает, потому что снова происходит отрисовка после возврата текущей функции.

Есть предложения? Спасибо!

Ответы [ 2 ]

8 голосов
/ 04 января 2011

Обновление выполняется в цикле выполнения.

Просто добавьте:

self.toolbar.hidden = YES;

[[NSRunLoop currentRunLoop] runUntilDate: [NSDate dateWithTimeIntervalSinceNow: 0.01]];

CGImageRef screenCap = UIGetScreenImage ();

3 голосов
/ 14 мая 2010

Попробуйте скрыть элементы пользовательского интерфейса в отдельном селекторе и использовать метод -performSelectorOnMainThread:withObject:waitUntilDone:, используя YES в качестве аргумента waitUntilDone. Затем добавьте другой селектор для захвата экрана.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...