我正在考虑一种将 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 上经常被问到的问题。例如:
但如果是我这样做,我的第一种方法是获取UIView
我想要复制的句柄,然后递归地迭代所有subviews
它,然后将它们作为子视图复制UIView
并添加到我想要将主 UIView 复制到的子视图中。
我无法想象有太多的层操作正在进行,但您可能需要弄清楚如何以编程方式重新建立出口和/或操作。
没有简单的方法可以克隆一个视图,然后通过一行代码更新两个视图。因为它们底层的 CALayers 是不同的。但是对于复制 UIView,您可以使用以下新方法:使用 UIView 的方法:
- (UIView *)snapshotViewAfterScreenUpdates:(BOOL)afterUpdates
这是绘制视图的最快方法。在 iOS 7 中可用。
创建您希望“克隆”的 UIView 的另一个实例,并将其作为子视图添加到另一个视图。您并没有真正克隆 UIView对象,您只需创建它的另一个实例。