2011-12-30 2 views
1

У меня есть UIView с прозрачным фоном и некоторыми кнопками. Я хотел бы захватить рисунок вида, сжать его и перерисовать (зеркально) его в другом месте на экране. (В верхней части другого вида.) Кнопки могут меняться, поэтому они не являются статическими.Зеркало UIView

Что было бы лучшим способом сделать это?

ответ

2

Общая идея: получить UIViewlayer, чтобы привлечь себя к контексту, а затем извлечь из него UIImage.

UIGraphicsBeginImageContext(view.frame.size); 

[view.layer renderInContext:UIGraphicsGetCurrentContext()]; 
UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext(); 

UIGraphicsEndImageContext(); 

Вы также должны #import <QuartzCore/QuartzCore.h>

+0

Итак, я бы масштабировал UIImage и нарисовал его там, где я хочу? И сохранит ли он прозрачность? Благодарю. –

+0

Да и Да, он должен сохранять прозрачность. –

+0

Можно ли использовать 'CGContext' напрямую, без накладных расходов, если UIImage? –

0

Если вы на самом деле не нужно захвата рисунок (от того, что вы описали, это кажется маловероятным, что вам нужно изображение), создать еще один экземпляр представление и применить преобразование. Что-то вроде ...

UIView* original [UIView alloc] initWithFrame:originalFrame]; 
UIView* copy = [[UIView alloc] initWithFrame:copyFrame]; 

// Scale down 50% and rotate 45 degrees 
// 
CGAffineTransform t = CGAffineTransformMakeScale(0.5, 0.5); 
copy.transform = CGAffineTransformRotate(t, M_PI_4); 

[someSuperView addSubview:original]; 
[someSuperView addSubview:copy]; 

// release, etc. 

Я добавил поворот, чтобы показать, что вы можете делать различные вещи с преобразованиями.

+0

И как я могу нарисовать содержимое исходного 'UIView' до меньшего? –

+0

Если это экземпляр того же класса, не будет ли он рисовать то же самое, как только добавлено в супервизор? – nloko

+0

Обновленный ответ для наглядности. – nloko

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