渲染到上下文中的视图导致空图像

时间:2016-02-12 10:24:21

标签: c# ios uiview xamarin

我正在尝试创建视图的位图副本,以将其用作拖动和拖动的拖动阴影。放弃操作。

我使用了这里描述的技术:

How to capture UIView to UIImage without loss of quality on retina display

How Do I Take a Screen Shot of a UIView?

How to get a color image in iPhone sdk(为了在视图中渲染一个实心填充,也导致空图像)

但结果始终是透明/空图像(它不是nil / null,我检查过)

我试图复制的视图包含(透明)SVG。

这是我的代码:


    // always results in an fully transparent/empty image
    private UIView CreateDragShadow(UIView view)
    {
        UIGraphics.BeginImageContextWithOptions(view.Bounds.Size, false, 0.0f);
        CGContext context = UIGraphics.GetCurrentContext();
        //view.DrawViewHierarchy(view.Bounds, true);    // "old" way
        view.Layer.RenderInContext(context);            // recommended way

        UIImage image = UIGraphics.GetImageFromCurrentImageContext();

        UIGraphics.EndImageContext();

        UIImageView dropShadow = new UIImageView();
        dropShadow.Image = image;

        return dropShadow;
    }

我还编写了一个小测试函数,以查看视图是否正确添加到超视图中,这可以正常生成白色UIView,其中包含"拖动阴影"写在上面:


    // this produces a white drag shadow image with "Drag shadow" written on it
    private UIView CreateDragShadowTest(UIView view)
    {
        // test with a simple UITextView to see if the approach works
        UITextView viewTestShadow = new UITextView(view.Frame);
        viewTestShadow.Bounds = view.Bounds;
        viewTestShadow.Text = "Drag shadow";

        return viewTestShadow;
    }

有人知道发生了什么吗?

我也愿意接受完全不同的方式。

祝你好运!

1 个答案:

答案 0 :(得分:0)

我已经在Xamarin文档页面上找到了一个答案,在搜索SO时我在其他地方找不到提及

新代码是:


    private UIView CreateDragShadow(UIView view)
    {                
        UIView dropShadow = view.SnapshotView(true);
        return dropShadow;
    }

其中公开了snapshotViewAfterScreenUpdates(在此处找到:Apple Doc snapshotViewAfterScreenUpdates)并方便地生成UIView快照。

这个解决方案对我有用,但如果有人知道,我仍然想知道其他方法出了什么问题。