【问题标题】:How to create a copy of uiview (not a pointer to original uiview)如何创建 uiview 的副本(不是指向原始 uiview 的指针)
【发布时间】:2012-07-02 12:32:26
【问题描述】:

我想创建UIView 的副本,但我不想使用NSKeyedArchiver,因为我经常创建许多视图的副本,并且使用NSKeyedArchiver 很慢。

我听说过copyinitWithZone:,但谷歌搜索发现它不适用于UIView。我不想要指向原始视图的副本,因为对其所做的任何更改也会对复制的UIView 进行更改。

【问题讨论】:

  • 您不能复制视图。如果您想要一个“副本”,您要么必须使用 NSCoding(键控存档器的东西)进行深度复制,要么您必须实现一些可复制的数据对象,您的视图用于设置和更新,然后将其复制出一个股票查看并将其添加到另一个。但是没有办法只是“复制”一个视图。
  • 等等,当你说你想要一个指向原件的副本时,你的意思是你想要在两个不同的地方看到相同的视图吗?
  • 我只是想将 uiview 在特定时刻的状态保存到另一个 uiview,因为我已经通过触摸实现了 uiview 的旋转、缩放和移动。那么你能告诉我如何将一个uiview的属性复制到其他的,如果它不能被复制..thnx
  • 不,我不希望复制的 uiview 指向原始的...我希望它被克隆

标签: iphone xcode ipad uiview nscopying


【解决方案1】:

您可以使用以下方法复制视图:

TheView *copyOfView =  (TheView *) [NSKeyedUnarchiver unarchiveObjectWithData:[NSKeyedArchiver archivedDataWithRootObject:origionalTheView]];

【讨论】:

    【解决方案2】:

    创建一个可以帮助复制视图的 UIView 类别。像这样的:

    - (id) copyView {
         UIView *a = [[UIView alloc]init];
         a.frame = self.frame;
         //set all other properties of the UIView
         return a; //return [a autorelease] if not using ARC
    }
    

    【讨论】:

    • 这不会复制所需视图的所有属性
    猜你喜欢
    • 2015-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-12
    • 2013-10-09
    • 1970-01-01
    • 1970-01-01
    • 2021-11-15
    相关资源
    最近更新 更多