No sé cuál es tu verdadera intención, pero esto dibujará la vista dos veces, la interacción del usuario, etc. no funcionará en la segunda vista. Además, esta solución no se ocupa de los diferentes tamaños de cuadros.
cabecera de la vista que se desea clonar
@interface SrcView : UIView
@property(nonatomic, readonly, strong) UIView *cloneView;
@end
@interface CloneView : UIView
@property(nonatomic, weak) UIView *srcView;
- (id)initWithView:(UIView *)src;
@end
aplicación de la vista que se desea clonar
#import "SrcView.h"
#import "CloneView.h"
@implementation SrcView
@synthesize cloneView;
- (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx{
[cloneView setNeedsDisplay];
}
- (UIView *)cloneView {
if (!cloneView) {
cloneView = [[CloneView alloc] initWithView:self];
}
return cloneView;
}
@end
@implementation CloneView
@synthesize srcView;
- (id)initWithView:(UIView *)src {
self = [super initWithFrame:src.frame];
if (self) {
srcView = src;
}
return self;
}
- (void)drawRect:(CGRect)rect
{
[srcView.layer renderInContext:UIGraphicsGetCurrentContext()];
}
@end
ahora sólo puede llamar cloneView y añadirlo en algún lugar que desee.
¿Se representa de otra manera que no sea crear una nueva instancia? Es un objeto, después de todo. – jmstone617