iOS 17 中弃用了一堆 UIGraphics 方法,没有明确的替代方案?

Fre*_*Ali 3 xamarin.ios ios xamarin swift maui

我有一段使用 UIGraphics 方法的代码,似乎我使用的三种方法都已弃用。

这是一段 Xamarin.iOS 代码,但我相信 Swift 用户也可以在这里提供帮助,任何人都可以帮助我了解这些的新方法是什么,我正在尝试用 google 搜索,但我似乎没有得到任何信息关于这些方法的替代品的直接线索。

以下三种方法已被弃用;

    UIGraphics.BeginImageContextWithOptions(size, false, ScreenDensity);
    var image = UIGraphics.GetImageFromCurrentImageContext();
    UIGraphics.EndImageContext();
Run Code Online (Sandbox Code Playgroud)

完整的代码如下,不确定这是否有帮助......

private UIImage CreateBufferImage()
{
    if (paths is null || paths.Count == 0)
    {
        return null;
    }

    var size = Bounds.Size;
    UIGraphics.BeginImageContextWithOptions(size, false, ScreenDensity);
    var context = UIGraphics.GetCurrentContext();

    context.SetLineCap(CGLineCap.Round);
    context.SetLineJoin(CGLineJoin.Round);

    foreach (var path in paths)
    {
        context.SetStrokeColor(path.Color.CGColor);
        context.SetLineWidth(path.Width);

        context.AddPath(path.Path.CGPath);
        context.StrokePath();

        path.IsDirty = false;
    }

    var image = UIGraphics.GetImageFromCurrentImageContext();

    UIGraphics.EndImageContext();

    return image;
}
Run Code Online (Sandbox Code Playgroud)

谢谢

Swe*_*per 6

您现在应该使用UIGraphicsImageRendererAPI 来绘制图像。

var renderer = new UIGraphicsImageRenderer(size, new UIGraphicsImageRendererFormat {
    Opaque = false,
    Scale = ScreenDensity
});
Run Code Online (Sandbox Code Playgroud)

您应该传递一个Action<UIGraphicsImageRendererContext>toCreateImage来绘制您的图像。图像将由 返回CreateImage

var image = renderer.CreateImage(imageContext => {
    // if you want a CGContext, you can get that from the CGContext property
    var cgcontext = imageContext.CGContext;

    // drawing code here...
});
Run Code Online (Sandbox Code Playgroud)