14

我正在考虑一种将 UIView 呈现到另一个 UIView 以及第一个 UIView 的方法。所以我有我的主 UIView 的边界,并且 UIView 也在其他一些 UIView 中呈现自己。

这可能吗 ?它是否需要广泛的图层操作?

4

4 回答 4

15

不知道您的真正意图是什么,但这将绘制两次视图,用户交互等将不适用于第二个视图。此外,此解决方案不考虑不同的帧大小。

要克隆的视图的标题

@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 并将其添加到您想要的位置。

于 2012-04-28T19:54:03.497 回答
5

这似乎是 StackOverflow 上经常被问到的问题。例如:

iphone, ipad 重复 UIView - 克隆视图

将一个 UIView 的绘制内容复制到另一个

UIView 重复

复制、克隆或复制 UIView

但如果是我这样做,我的第一种方法是获取UIView我想要复制的句柄,然后递归地迭代所有subviews它,然后将它们作为子视图复制UIView并添加到我想要将主 UIView 复制到的子视图中。

我无法想象有太多的层操作正在进行,但您可能需要弄清楚如何以编程方式重新建立出口和/或操作。

于 2012-04-28T17:19:12.243 回答
4

没有简单的方法可以克隆一个视图,然后通过一行代码更新两个视图。因为它们底层的 CALayers 是不同的。但是对于复制 UIView,您可以使用以下新方法:使用 UIView 的方法:

- (UIView *)snapshotViewAfterScreenUpdates:(BOOL)afterUpdates

这是绘制视图的最快方法。在 iOS 7 中可用。

于 2015-04-09T06:14:22.973 回答
0

创建您希望“克隆”的 UIView 的另一个实例,并将其作为子视图添加到另一个视图。您并没有真正克隆 UIView对象,您只需创建它的另一个实例。

于 2012-04-28T17:25:49.643 回答