iOS 复制UIView所有的对象

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/a997013919/article/details/74104452

示例-1

像这样,需要在这三个view里面都加载一个名字为“subView”的UIView,因为各种原因,比如“subView”里面的子view非常多,导致要重新写一个一模一样的特别麻烦,第一个反应是 直接让leftView、centerView、rightView都直接[xxx addSubview:self.subView]; 得了,这里为了让demo运行后看起来更明显,我们直接让“subView”背景色为灰色。
在这种条件下,我们希望运行的结果最终能达到的目的是:左中右view全部是灰色

… …
然并卵:

示例-2

怎么回事类,
因为self.subView在内存里,self.subView指针毕竟始终都指向那一块内存,上面的做法显然没有达到我们想要的目的。

怎么办呢,有没有一种方法,可以完全复制”subView”呢,包括其子view呢?下面才是这篇blog的主题


这是网上找到的方法,使用对象序列化方法 完全复制UIView,可以自行网上找,我这里只说一下过程

- (UIView *)copyAView:(UIView *)view
{
    NSData *tempArchive = [NSKeyedArchiver archivedDataWithRootObject:view];
    return [NSKeyedUnarchiver unarchiveObjectWithData:tempArchive];
}

然后再把返回的view添加到相应的地方:

[self.leftView addSubview:[self copyAView:self.subView]];

[self.centerView addSubview:[self copyAView:self.subView]];

[self.rightView addSubview:[self copyAView:self.subView]];

运行一下看结果:
这里写图片描述

可以看到,三个视图都变成了“subView”的灰色背景色
不过,刚刚说的“subView”的子视图呢?那继续给“subView”add一个背景色为黑色的子视图“smallView”,

这里写图片描述

现在已经到达了我们要完全复制UIView所有对象的目的了,不过还有一个问题:

如果给“subView”或者其子视图“smallView”添加剪边clipsToBounds,复制的时候圆边都会失效,所有如果想要剪边的效果,还是直接alloc另外两个的“subView2” “subView3”吧。目前还不知道有什么更好的方法,下次再更新吧

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页