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
相关产品推荐
相关产品推荐

