2017-10-17 81 views
0

如果服务器向它发送一些新的坐标,我写了一些代码在iOS应用程序中绘制某些内容。创建类(c#)实例后回调函数结束

我有一个绘制坐标的回调函数。但是当我在这个函数中创建一个类的新实例时,回调出口没有任何错误...

以前有人有这个问题吗?

这里是我的代码,如果这是帮助

CGPath pathtotal; 
    List<CGPath> path; 

    CGPoint initialPoint; 
    CGPoint latestPoint; 

    DrawDrawerDraw drawDrawerDraw; 

    public DrawGuessView(IntPtr handle) : base(handle) 
    { 
     BackgroundColor = UIColor.White; 
     pathtotal = new CGPath(); 

     SocketEventHandler.Add("draw:drawer:draw", onDrawDrawerDraw); 
    } 

    public void onDrawDrawerDraw(dynamic obj) 
    { 
     drawDrawerDraw = (DrawDrawerDraw)obj; 

     for (int i = 0; i <= drawDrawerDraw.coords.Count; i++) 
     { 
      if (initialPoint.X != (nfloat)drawDrawerDraw.coords[i].x0 && initialPoint.Y != (nfloat)drawDrawerDraw.coords[i].y0) 
      { 
       path[i] = new CGPath(); 
      } 

      initialPoint.X = (nfloat)drawDrawerDraw.coords[i].x0; 
      initialPoint.Y = (nfloat)drawDrawerDraw.coords[i].y0; 

      latestPoint.X = (nfloat)drawDrawerDraw.coords[i].x1; 
      latestPoint.Y = (nfloat)drawDrawerDraw.coords[i].y1; 

      //add lines to the touch points 
      if (path[i].IsEmpty) 
      { 
       path[i].AddLines(new CGPoint[] { initialPoint, latestPoint }); 
      } 
      else 
      { 
       path[i].AddLineToPoint(latestPoint); 
      } 
     } 

     SetNeedsDisplay(); 
    } 

    public override void Draw(CGRect rect) 
    { 
     base.Draw(rect); 

     try 
     { 
      foreach (var item in path) 
      { 
       if (!initialPoint.IsEmpty) 
       { 
        //get graphics context 
        using (CGContext g = UIGraphics.GetCurrentContext()) 
        { 
         //set up drawing attributes 
         g.SetLineWidth(2); 
         UIColor.Black.SetStroke(); 

         //add geometry to graphics context and draw it 
         pathtotal.AddPath(item); 

         g.AddPath(pathtotal); 
         g.DrawPath(CGPathDrawingMode.Stroke); 
        } 
       } 
      } 
     } 
     catch (Exception e) { } 
    } 
} 
+1

你能找到,这是造成异常的行?如果需要,逐行调试。 –

+0

问题在这里:path [i] = new CGPath(); – Blanko

+0

总是当我创建一个新的东西... – Blanko

回答

1

有需要修改两点。

  1. 初始化pathDrawGuessView方法

    public DrawGuessView(IntPtr handle) : base(handle) 
    { 
        BackgroundColor = UIColor.White; 
        pathtotal = new CGPath(); 
        List<CGPath> path = new List<CGPath>(); 
        SocketEventHandler.Add("draw:drawer:draw", onDrawDrawerDraw); 
    } 
    
  2. path[i] = new CGPath()将导致ArgumentOutOfRangeException,我们不能在列表通过这种方式设定值的项目。

    修改循环

    CGPath pathItem = null; 
    for (int i = 0; i <= drawDrawerDraw.coords.Count; i++) 
    { 
        if (initialPoint.X != (nfloat)drawDrawerDraw.coords[i].x0 && initialPoint.Y != (nfloat)drawDrawerDraw.coords[i].y0) 
        { 
         pathItem = new CGPath(); 
        } 
    
        initialPoint.X = (nfloat)drawDrawerDraw.coords[i].x0; 
        initialPoint.Y = (nfloat)drawDrawerDraw.coords[i].y0; 
    
        latestPoint.X = (nfloat)drawDrawerDraw.coords[i].x1; 
        latestPoint.Y = (nfloat)drawDrawerDraw.coords[i].y1; 
    
        //add lines to the touch points 
        if (pathItem.IsEmpty) 
        { 
         pathItem.AddLines(new CGPoint[] { initialPoint, latestPoint }); 
        } 
        else 
        { 
         pathItem.AddLineToPoint(latestPoint); 
        } 
        path.Add(pathItem); 
    } 
    
+0

现在我在这一行上有同样的问题: 'path.Add(pathItem);' – Blanko

+0

我认为代码没有进入条件'initialPoint.X !=(nfloat)drawDrawerDraw.coords [i] .x0 && initialPoint.Y!=(nfloat)drawDrawerDraw.coords [i] .y0',所以列表添加'null object',你需要改变条件。例如看到我的更新 –

+0

不,代码进入条件并继续,直到我想将其添加到路径。 – Blanko