• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - 使用 MonoTouch 以编程方式绘制矩形

[复制链接]
菜鸟教程小白 发表于 2022-12-13 11:43:36 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我正在尝试更多地了解 MonoTouch,因此我尝试使用 Quartz2D 进行绘图。我想创建一个示例,在其中以编程方式绘制 n 矩形。问题是只绘制了第一个。我认为第二个被第一个删除/清除/覆盖。

这是我的代码:

SingleViewMTViewController.cs

public override void ViewDidLoad ()
    {
        base.ViewDidLoad ();

        PointF locationOne = new PointF (5, 5);
        PointF locationTwo = new PointF (5, 100);
        SizeF size = new SizeF (120, 40);

        DraggableRectangle tView = new DraggableRectangle (locationOne, size, UIColor.Yellow);
        DraggableRectangle tView2 = new DraggableRectangle (locationTwo, size, UIColor.Brown);

        DraggableRectangle[] views = new DraggableRectangle[2];
        views [0] = tView;
        views [1] = tView2;

        View.AddSubviews (views);
    }

DraggableRectangle.cs

public class DraggableRectangle : UIView
{
    private CGPath path;
    private PointF _targetLocation;
    private SizeF _size;
    private UIColor _fillColor = UIColor.Brown;

    public DraggableRectangle (PointF targetLocation, SizeF size)
    {
        _targetLocation = targetLocation;
        _size = size;

        RectangleF frameRect = new RectangleF (_targetLocation.X, _targetLocation.Y, _size.Width, _size.Height);
        this.Frame = frameRect;
        this.BackgroundColor = UIColor.Clear; //without this, nothing is drawn
    }

    public DraggableRectangle (PointF targetLocation, SizeF size, UIColor fillColor):this(targetLocation,size)
    {
        _fillColor = fillColor;
    }

    public override void Draw (RectangleF rect)
    {
        //base.Draw (rect);
        //works without base-call?

        //get graphics context
        using (CGContext gctx = UIGraphics.GetCurrentContext ()) {

            //set up drawing attributes
            _fillColor.SetFill ();

            //create geometry
            path = new CGPath ();

            path.AddRect (new RectangleF (_targetLocation.X, _targetLocation.Y, _size.Width, _size.Height));

            path.CloseSubpath ();

            //add geometry to graphics context and draw it
            gctx.AddPath (path);        
            gctx.DrawPath (CGPathDrawingMode.FillStroke);   
        }       
    }

有没有更好的方法来用 MonoTouch 绘制独立的矩形?或者请有人解释一下,我做错了什么?

更新: 顺便说一句。我可以达到的最佳输出,但这对于“黄色”和“棕色”是不正确的 http://www.bilder-upload.eu/show.php?file=81bfea-1329755225.png http://www.bilder-upload.eu/show.php?file=81bfea-1329755225.png



Best Answer-推荐答案


实际上,您的两个矩形都已绘制。问题是您的 _targetLocation.Y 值。您正在为 View 的 Frame 及其要在其 Draw 方法中绘制的矩形设置相同的 Y 值。

所以基本上,您的矩形是在 View 边界之外绘制的。您的“棕色” View 的高度是 40pt,而它的矩形绘制在 Y=100(在其可见部分下方)。

您必须区分这些值,因为 View 的位置总是相对于其父级的坐标。

编辑:伪代码示例。

下面一行:

path.AddRect (new RectangleF (_targetLocation.X, _targetLocation.Y, _size.Width, _size.Height));

应该是这样的:

    path.AddRect (new RectangleF ({Frame.Width >= something >= 0}, 
{Frame.Height >= something >= 0}, width, height);

编辑#2:

如果我更改路径的矩形,请使用以下内容:

path.AddRect (new RectangleF (0f, 0f, _size.Width, _size.Height));

这是我得到的......

Two rects

关于ios - 使用 MonoTouch 以编程方式绘制矩形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9363891/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap