我正在尝试创建视图的位图副本,以将其用作拖动和拖动的拖动阴影。放弃操作。
我使用了这里描述的技术:
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;
}
有人知道发生了什么吗?
我也愿意接受完全不同的方式。
祝你好运!
答案 0 :(得分:0)
我已经在Xamarin文档页面上找到了一个答案,在搜索SO时我在其他地方找不到提及
新代码是:
private UIView CreateDragShadow(UIView view)
{
UIView dropShadow = view.SnapshotView(true);
return dropShadow;
}
其中公开了snapshotViewAfterScreenUpdates(在此处找到:Apple Doc snapshotViewAfterScreenUpdates)并方便地生成UIView快照。
这个解决方案对我有用,但如果有人知道,我仍然想知道其他方法出了什么问题。