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, вы просто создаете его еще один экземпляр.