我在思考一种方法,让一个UIView能够在另一个UIView上进行渲染,同时也可以在第一个UIView上进行渲染。所以,我有一个主要的UIView和它的边界,这个UIView也在另一个UIView中进行渲染。
这是否可能?是否需要大量的层操作?
我在思考一种方法,让一个UIView能够在另一个UIView上进行渲染,同时也可以在第一个UIView上进行渲染。所以,我有一个主要的UIView和它的边界,这个UIView也在另一个UIView中进行渲染。
这是否可能?是否需要大量的层操作?
不知道你的真实意图是什么,但这个方法会导致视图被绘制两次,用户交互等在第二个视图上将不起作用。此外,这种解决方案无法处理不同帧大小的情况。
要克隆的视图的标题
@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并将其添加到想要的位置。
在StackOverflow上似乎经常会有这样的问题,例如:
iphone, ipad Duplicate UIView - Cloned View
Copying the drawn contents of one UIView to another
Duplicate, clone or copy UIView
但如果我要做这件事,我的第一步是获取到我想要复制的UIView
,然后递归地迭代所有它的 subviews
,然后将它们作为子视图进行复制并添加到我想要复制主UIView的UIView中。
我不认为这里会涉及太多层操作,但你可能需要找出如何以编程方式重新建立输出和/或操作。
想要通过一行代码克隆视图并更新两个视图并不容易,因为它们的底层CALayer是不同的。但是,如果要复制一个UIView,可以使用以下新方法:使用UIView的方法:
- (UIView *)snapshotViewAfterScreenUpdates:(BOOL)afterUpdates
这是绘制视图的最快方法。在iOS 7中可用。