在UIView中绘制图像Xamarin.IOS C#

问题描述:

我在资产目录中有一些pdf图像。而不是直接在UIImageView中使用它,我想使用CGContext在我的UIView中绘制它。在UIView中绘制图像Xamarin.IOS C#

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

是否有IOS这一个选择吗? 或者是否有我可以参考的任何样品?

我也想设置此图像的位置 - 类似OnMeasure(INT宽度,INT高度)在Android.View

(需要 - 我想要动态地绘制图像和编辑上触摸图像在UIView的位置)

有人可以指导这个请。 谢谢。

在您的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