欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

iOS 复制UIView所有的对象

程序员文章站 2024-03-22 23:57:52
...

iOS 复制UIView所有的对象

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

… …
然并卵:

iOS 复制UIView所有的对象

怎么回事类,
因为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]];

运行一下看结果:
iOS 复制UIView所有的对象

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

iOS 复制UIView所有的对象

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

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

相关标签: ios uiview