You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

iOS 17中UIGraphics三类方法已废弃,求Xamarin.iOS替代方案

Xamarin.iOS中iOS 17废弃UIGraphics方法的替代方案

在iOS 17里,UIGraphics.BeginImageContextWithOptions、UIGraphics.GetImageFromCurrentImageContext和UIGraphics.EndImageContext这三个方法已被标记为废弃,苹果官方推荐使用**UIGraphicsImageRenderer**来替代,这个类会自动处理图形上下文的创建与销毁,代码更简洁也更安全。

下面是替换后的完整代码:

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

    var size = Bounds.Size;
    // 创建渲染器配置,指定尺寸、透明度和缩放因子
    var rendererConfig = new UIGraphicsImageRendererConfig(size)
    {
        Opaque = false,
        Scale = ScreenDensity
    };
    
    var renderer = new UIGraphicsImageRenderer(rendererConfig);
    
    var image = renderer.Invoke(context =>
    {
        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;
        }
    });

    return image;
}

关键变化说明:

  • 用UIGraphicsImageRendererConfig配置图像的尺寸、透明度和缩放因子,对应原BeginImageContextWithOptions的参数逻辑。
  • 通过UIGraphicsImageRenderer的Invoke方法传入绘制逻辑,方法内部自动创建、管理并销毁图形上下文,无需手动调用Begin/End系列方法。
  • Invoke方法直接返回绘制完成的UIImage,替代原GetImageFromCurrentImageContext的作用。

该实现兼容iOS 17及以上版本,同时也能向下适配旧版系统。

内容的提问来源于stack exchange,提问作者FreakyAli

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 23:33:23