For*_*est 81 copy objective-c uiview ios
只需使用这种方式:
UIView* view2 = [view1 copy]; // view1 existed
Run Code Online (Sandbox Code Playgroud)
这将导致模拟器无法启动此应用程序.
试试保留,
UIView* view2 = [view1 retain]; // view1 existed
// modify view2 frame etc
Run Code Online (Sandbox Code Playgroud)
任何修改view2都适用于view1,我明白view2共享相同的内存view1.
为什么不能UIView复制?是什么原因?
j2e*_*nue 160
这可能适合你...存档视图,然后立即取消存档.这应该为您提供视图的深层副本:
id copyOfView =
[NSKeyedUnarchiver unarchiveObjectWithData:[NSKeyedArchiver archivedDataWithRootObject:originalView]];
Run Code Online (Sandbox Code Playgroud)
Eng*_*epe 33
您的应用可能会崩溃,例如:
[UIView copyWithZone:]: unrecognized selector sent to instance 0x1c6280
Run Code Online (Sandbox Code Playgroud)
原因是UIView没有实现复制协议,因此copyWithZoneUIView中没有选择器.
Iva*_*lab 25
你可以制作一个UIView扩展.在下面的示例swift片段中,函数copyView返回AnyObject,因此您可以复制UIView的任何子类,即 UIImageView.如果你想复制只 UIViews你可以改变返回类型的UIView.
//MARK: - UIView Extensions
extension UIView
{
func copyView<T: UIView>() -> T {
return NSKeyedUnarchiver.unarchiveObject(with: NSKeyedArchiver.archivedData(withRootObject: self)) as! T
}
}
Run Code Online (Sandbox Code Playgroud)
用法示例:
let sourceView = UIView()
let copiedView = sourceView.copyView()
Run Code Online (Sandbox Code Playgroud)
对于swift3.0.1:
extension UIView{
func copyView() -> AnyObject{
return NSKeyedUnarchiver.unarchiveObject(with: NSKeyedArchiver.archivedData(withRootObject: self))! as AnyObject
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
43992 次 |
| 最近记录: |