2013-06-01 1 views
2

Я использую этот код для визуализации UIView в изображениеКак получить UIView, чтобы правильно расположить перед внесением его в изображение

-(UIImage *)getImageForView:(UIView *)aView {  
UIGraphicsBeginImageContextWithOptions(aView.bounds.size, NO, 0.0); 
[aView.layer renderInContext:UIGraphicsGetCurrentContext()]; 
UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 
return viewImage; 
} 

Вопрос, который я имею, что вид не установлен должным образом используя автозапуск. Что мне делать.

В настоящее время я создаю UIView «viewA» с фреймом, который является правильным размером для моего представления, а затем создайте сложный предполагаемый вид «ViewB» (который имеет автоматическое расположение), а затем добавьте viewB в качестве подзадачи в «viewA «тогда я даю viewA моему методу выше.

Сначала я думал, что viewA не нужно добавлять в какой-либо супервизор, но он не правильно оформлен, должен ли я добавлять viewA с альфой 0 в супервизор, тогда я предполагаю, что может быть использован «layoutIfNeeded», но на каком взгляде я должен это делать?

Edit: Вот код, который создает UIView

UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 439)]; 

//This is the UIView that contains a lot of views 
MyView *myView = [[MyView alloc] init]; 

myView.translatesAutoresizingMaskIntoConstraints = NO; 

[view addSubview:myView]; 

[view addConstraints:[NSLayoutConstraint 
         constraintsWithVisualFormat:@"V:[myView(439)]" 
         options:0 
         metrics:nil 
         views:NSDictionaryOfVariableBindings(myView)]]; 

[view addConstraints:[NSLayoutConstraint 
         constraintsWithVisualFormat:@"H:[myView(320)]" 
         options:0 
         metrics:nil 
         views:NSDictionaryOfVariableBindings(myView)]]; 

работало для меня в конце концов

[myView layoutIfNeeded]; 
[view layoutIfNeeded]; 

Другими словами, называя его на обоих видах.

+0

Показать код для создания представления и добавления подсмотра. вы устанавливаете рамки? – Wain

+0

Готово. Ждем ваших размышлений. – darbid

+0

Попробуйте: MyView * myView = [[MyView alloc] initWithFrame: view.bounds]; – Wain

ответ

5

Отправьте ваше сообщение layoutIfNeeded перед его отображением в контексте вашего изображения.

+0

Я собирался ответить на это сам, но вы в значительной степени правы. Кажется, мне нужно вызвать это на обоих взглядах. Сначала на myView, затем на другом представлении. Затем он правильно устанавливается. – darbid