iOS iPhone 是不是可以克隆 UIView 并将其绘制到两个 UIViews 上?

Posted

技术标签:

【中文标题】iOS iPhone 是不是可以克隆 UIView 并将其绘制到两个 UIViews 上?【英文标题】:iOS iPhone is it possible to clone UIView and have it draw itself to two UIViews?iOS iPhone 是否可以克隆 UIView 并将其绘制到两个 UIViews 上? 【发布时间】:2012-04-28 17:12:56 【问题描述】:

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

这可能吗?是否需要大量的图层操作?

【问题讨论】:

除了创建一个新实例之外,是否以其他方式呈现自身?毕竟,它是一个对象。 【参考方案1】:

不知道你的真正意图是什么,但这会绘制两次视图,用户交互等将无法在第二个视图上工作。此外,此解决方案不考虑不同的帧大小。

要克隆的视图的标题

@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】:

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

iphone, ipad Duplicate UIView - Cloned View

Copying the drawn contents of one UIView to another

UIView duplicate

Duplicate, clone or copy UIView

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

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

【讨论】:

当您将它们添加为子视图时,您实际上是将这些项目移动到另一个父视图下,移动而不是复制【参考方案3】:

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

- (UIView *)snapshotViewAfterScreenUpdates:(BOOL)afterUpdates

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

【讨论】:

【参考方案4】:

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

【讨论】:

以上是关于iOS iPhone 是不是可以克隆 UIView 并将其绘制到两个 UIViews 上?的主要内容,如果未能解决你的问题,请参考以下文章

复制、克隆或复制 UIView

iOS,相同尺寸的UIView在不同的iphone上显示不同的尺寸?

iPhone UIView:是不是可以仅在子视图上启用用户交互?

iOS 7 将 UIView 更改为 UITableView

Iphone:定制的 UIView 是不是需要 dealloc

UIAlertView里面的UIView