【问题标题】:Can't Override UIView.Draw Method无法覆盖 UIView.Draw 方法
【发布时间】:2026-01-12 13:20:11
【问题描述】:

我需要重写 draw 方法,但我收到错误消息:

Draw(System.Drawing.PointF)' 被标记为覆盖,但找不到合适的覆盖方法 (CS0115)。

这就是我要做的:我创建一个新项目,添加一个空类并尝试覆盖。

代码如下:

using System;
using UIKit;
using System.Drawing;
using CoreGraphics;
using CoreImage;
using Foundation;
using CoreAnimation;

namespace Test
{
    public class Tester : UIView
    {
        CGPath path;

        public override void Draw (PointF rect){
            base.Draw ();
        }


        public Tester ()
        {
            path = new CGPath ();
        }

    }
}

实际上我正在尝试 Xamarin 的教程。 http://developer.xamarin.com/guides/ios/application_fundamentals/graphics_animation_walkthrough/

【问题讨论】:

    标签: c# ios uiview xamarin draw


    【解决方案1】:

    问题在于您使用统一 API 创建程序(请参阅顶部的“使用 CoreImage”)。在 Unified API 中,我们不再使用 PointF、SizeF 或 RectangleF,因为它们是 32 位结构,因此它们不适用于 32/64 位模式。

    在 Unified 中,您需要使用“CGRect”而不是“RectangleF”

    所以要修复你的程序,你所要做的就是用“CGRect”替换“RectangleF”

    教程目前反映的是Classic API,一旦我们正式发布Unified的最终版本,它们就会被切换。

    【讨论】:

    • 谢谢,对我帮助很大。
    【解决方案2】:

    您不能覆盖不同的方法。原始方法没有参数。如果你想重写 Draw 方法,你需要删除你的 Draw 函数参数。

    【讨论】:

    • 不,因为他们使用相同的方法。如果您看到,在他们的 Draw 方法中,他们执行 base.Draw(rect)。也许你也需要这样做。
    • 是的,我将 PointF 更改为 CGRect 并且它可以工作。但是现在,我有另一个问题:Tester 类是我创建的空类。我的主要类,视图控制器类是另一个。这看起来很不错,但是我如何在我的主课上使用使用 Xamarin 的例子创建的 Tester 类?我想在屏幕上做一行...