IOS iPhone можно клонировать UIView и заставить его использовать себя в двух UIViews?

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

Возможно ли это? Требуется ли для этого многослойные операции?

Ответ 1

Не знаю, каково ваше реальное намерение, но это дважды отобразит представление, userinteraction и т.д. не будут работать во втором представлении. Также это решение не заботится о разных размерах рамок.

Заголовок представления, который вы хотите клонировать

@interface SrcView : UIView
@property(nonatomic, readonly, strong) UIView *cloneView;
@end

@interface CloneView : UIView
@property(nonatomic, weak) UIView *srcView;
- (id)initWithView:(UIView *)src;
@end

реализация вида, который вы хотите клонировать

#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

теперь вы можете просто вызвать cloneView и добавить его где угодно.

Ответ 2

Это похоже на часто задаваемый вопрос здесь, на StackOverflow. Например:

iphone, ipad Duplicate UIView - Cloned View

Копирование рисованного содержимого одного UIView в другое

дубликат UIView

Дублировать, клонировать или копировать UIView

Но если бы я это делал, моим первым подходом было бы получить дескриптор UIView, который я хочу скопировать, а затем рекурсивно перечислить все subviews, а затем скопировать и добавить их в качестве подзаголовков в UIView Я хочу скопировать основной UIView в.

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

Ответ 3

Нет простого способа клонировать представление, а затем обновлять два представления по одной строке кода. Потому что их базовые CALayers разные. Но для дублирования UIView, вот новый метод, который вы можете использовать: Используйте метод UIView:

- (UIView *)snapshotViewAfterScreenUpdates:(BOOL)afterUpdates

Это самый быстрый способ сделать вид. Доступно в iOS 7.

Ответ 4

Создайте еще один экземпляр UIView, который вы хотите "клонировать", и добавьте его в качестве представления в другое представление. Вы действительно не клонируете объект UIView, вы просто создаете его еще один экземпляр.