如何一个视图复制到另一个斯威夫特视图

问题描述 投票:0回答:2

我要一个UIView的复制到另一个观点没有使它封存或取消封存。请帮助我,如果你有任何解决方案。

我通过使UIView的的延伸,过流堆栈上已有的答案与尝试。但其崩溃当我通过与图案图像的背景色的图。

ios swift xcode uiview copy
2个回答
2
投票

以下涉及我的评论的代码:

extension UIView
{
    func copyView() -> UIView?
    {
        return NSKeyedUnarchiver.unarchiveObjectWithData(NSKeyedArchiver.archivedDataWithRootObject(self)) as? UIView
    }
}

我只是尝试这种简单的代码在操场检查副本视图的作品,它不是指向了同样的观点:

let originalView = UIView(frame: CGRectMake(0, 0, 100, 50));
originalView.backgroundColor = UIColor.redColor();
let originalLabel = UILabel(frame: originalView.frame);
originalLabel.text = "Hi";
originalLabel.backgroundColor = UIColor.whiteColor();
originalView.addSubview(originalLabel);

let copyView = originalView.copyView();
let copyLabel = copyView?.subviews[0] as! UILabel;

originalView.backgroundColor = UIColor.blackColor();
originalLabel.text = "Hola";

originalView.backgroundColor;   // Returns black
originalLabel.text;             // Returns "Hola"
copyView!.backgroundColor;      // Returns red
copyLabel.text;                 // Returns "Hi"

如果扩展是行不通的,无论copyVieworiginalView将有相同backgroundColor和同样会发生在标签的文本。因此,也许有,问题是其他部分的可能性。


0
投票

原贴

   func copyView(viewforCopy: UIView) -> UIView {
        viewforCopy.hidden = false //The copy not works if is hidden, just prevention
        let viewCopy = viewforCopy.snapshotViewAfterScreenUpdates(true)
        viewforCopy.hidden = true
        return viewCopy
    }

更新了斯威夫特4

func copyView(viewforCopy: UIView) -> UIView {
    viewforCopy.isHidden = false //The copy not works if is hidden, just prevention
    let viewCopy = viewforCopy.snapshotView(afterScreenUpdates: true)
    viewforCopy.isHidden = true
    return viewCopy!
}
© www.soinside.com 2019 - 2024. All rights reserved.