2017-08-28 78 views
0

我在資產目錄中有一些pdf圖像。而不是直接在UIImageView中使用它,我想使用CGContext在我的UIView中繪製它。在UIView中繪製圖像Xamarin.IOS C#

Android.Graphic.Drawable相似 - 的OnDraw()

是否有IOS這一個選擇嗎? 或者是否有我可以參考的任何樣品?

我也想設置此圖像的位置 - 類似OnMeasure(INT寬度,INT高度)在Android.View

(需要 - 我想要動態地繪製圖像和編輯上觸摸圖像在UIView的位置)

有人可以指導這個請。 謝謝。

回答

2

在您的UIView子類的Draw(drawRect:)覆蓋中,您可以在當前上下文中繪製。在這個例子中,我們從視圖的中心繪製整個視圖紅色,然後繪製和縮放CGImage大小爲100×200:

public override void Draw(CGRect rect) 
{ 
    var context = UIGraphics.GetCurrentContext(); 

    context.SetFillColor(UIColor.Red.CGColor); 
    context.FillRect(rect); 

    var cgImage = UIImage.FromFile("face").CGImage; 

    var drawImageToRect = new CGRect(rect.Width/2, rect.Height/2, 100, 200); 
    context.DrawImage(drawImageToRect, cgImage); 
} 

回覆:iOS Drawing Concepts

如果你需要混合的UIKit和CoreGraphics中的起源,您可以將原點(請參閱上面的蘋果文檔鏈接Coordinate Systems and Drawing in iOS):

public override void Draw(CGRect rect) 
{ 
    var context = UIGraphics.GetCurrentContext(); 
    context.SaveState(); 
    context.TranslateCTM(0, rect.Height); 
    context.ScaleCTM(1, -1); 

    context.SetFillColor(UIColor.Red.CGColor); 
    context.FillRect(rect); 

    var cgImage = UIImage.FromFile("face").CGImage; 
    var drawImageToRect = new CGRect(rect.Width/2, rect.Height/2, 100, -200); 
    context.DrawImage(drawImageToRect, cgImage); 

    context.RestoreState(); 
} 
+0

感謝您的答覆。 我嘗試使用上述,但我的圖像顛倒。我的圖像處於拉伸模式。有沒有一種方法可以將比例設置爲Aspect擬合? – Praddy

+0

在規模/寬高比方面,使用原始圖像的大小來計算rect在'context.DrawImage'方法中使用的大小,儘可能顛倒,是的,如果您正在使用**左上角**作爲0,0用於UIKit函數,使用CoreGraghics,0,0在**左下角**:https://developer.apple.com/library/content/documentation/2DDrawing/Conceptual/DrawingPrintingiOS/ Art/flipped_coordinates-2_2x.png我更新了我的答案.... – SushiHangover

+0

非常感謝。這對我有效。 但是,我正在做一些基於CGRect的計算。有沒有其他的重寫方法會在onDraw()之前調用,這樣我就不需要每次調用onDraw時都進行計算。 – Praddy