2012-04-28 10 views

Respuesta

14

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.

+0

Funciona de maravilla. Magnífico Ejemplo ... Gracias mucho –

5

Esto parece ser una pregunta frecuente aquí en StackOverflow. Por ejemplo:

iphone, ipad Duplicate UIView - Cloned View

Copying the drawn contents of one UIView to another

UIView duplicate

Duplicate, clone or copy UIView

Pero si se me hace esto, mi primer enfoque sería la de obtener un identificador para el UIView quiero copie, luego itere recursivamente todos los subviews y luego copie & agrégalos como subvistas al UIView Quiero copiar el UIView principal en.

No puedo imaginar que haya demasiadas operaciones de capa con esto, pero es probable que deba averiguar cómo restablecer canales y/o acciones mediante programación.

+2

Cuando los agrega como subvistas, esencialmente está moviendo esos elementos en otra vista principal, moviendo sin copiar –

0

Cree otra instancia de la UIView que desea "clonar" y agréguela como una subvista a otra vista. Realmente no clona un objeto UIView , simplemente crea otra instancia del mismo.

2

No hay una manera fácil de clonar una vista y luego actualizar dos vistas por una línea de código. Porque sus CALayers subyacentes son diferentes. Sin embargo, para duplicar un UIView, aquí es un nuevo método que puede utilizar: Método de Uso UIView:

- (UIView *)snapshotViewAfterScreenUpdates:(BOOL)afterUpdates 

Esta es la manera más rápida para dibujar una vista. Disponible en iOS 7.

Cuestiones relacionadas