在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);
}
如果你需要混合的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();
}
感谢您的答复。 我尝试使用上述,但我的图像颠倒。我的图像处于拉伸模式。有没有一种方法可以将比例设置为Aspect拟合? – Praddy
在规模/宽高比方面,使用原始图像的大小来计算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
非常感谢。这对我有效。 但是,我正在做一些基于CGRect的计算。有没有其他的重写方法会在onDraw()之前调用,这样我就不需要每次调用onDraw时都进行计算。 – Praddy