2016-02-12 25 views
0

我正在嘗試創建視圖的位圖副本,以將其用作拖動操作的拖動陰影。將視圖渲染到上下文中的結果爲空圖像

我已經使用這裏描述的技術:

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(呈現實心填充到視圖,導致在一個空的圖像太)

但結果總是一個透明/空的圖像(它不是零/空,我檢查)

我試圖複製的視圖包含(透明)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

因爲我已經發現,因此搜索時,我找不到提到其他地方的Xamarin文檔頁面上的答案

新的代碼是:


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

暴露snapshotViewAfterScreenUpdates(這裏找到: Apple Doc snapshotViewAfterScreenUpdates)並方便地產生一個UIView快照。

這個解決方案對我很有幫助,但是我仍然想知道我在做其他方法的錯誤,如果有人知道的話。