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 上?的主要内容,如果未能解决你的问题,请参考以下文章
iOS,相同尺寸的UIView在不同的iphone上显示不同的尺寸?
iPhone UIView:是不是可以仅在子视图上启用用户交互?
iOS 7 将 UIView 更改为 UITableView