iOS 复制UIView所有的对象
像这样,需要在这三个view里面都加载一个名字为“subView”的UIView,因为各种原因,比如“subView”里面的子view非常多,导致要重新写一个一模一样的特别麻烦,第一个反应是 直接让leftView、centerView、rightView都直接[xxx addSubview:self.subView];
得了,这里为了让demo运行后看起来更明显,我们直接让“subView”背景色为灰色。
在这种条件下,我们希望运行的结果最终能达到的目的是:左中右view全部是灰色
… …
然并卵:
怎么回事类,
因为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”吧。目前还不知道有什么更好的方法,下次再更新吧
上一篇: iOS 视图(UIView)动画
下一篇: Mac安装mongodb