2016-09-14 56 views
0

我正在使用NGraphics,我想生成一條平滑的曲線。CurveTo和ContinueCurve不能正確繪圖

與使用下面的代碼時的iPhone相比,Android設備顯示的結果不同。

如果在Android上使用(在Samsung Galaxy S4上測試過),該曲線看起來與預期一致,並且周圍有星號(*)。但是,在iPhone上它看起來不正確。

private bool DrawingMove(TouchData touchData) 
{ 
    if (touchData == null) 
    { 
     Invalidate(); 
     return true; 
    } 

    foreach (var stroke in _localStroke) 
    { 
     if (stroke.Pointer == touchData.PointerId) 
     { 
      var newPoint = ConvertLocalToGlobal(touchData.Point); 
      var point = new PointModel(); 
      point.X = newPoint.X; 
      point.Y = newPoint.Y; 

      stroke.Points.Add(point); 

      var length = stroke.Points.Count - 1; 

      if (stroke.Points.Count >= 3) 
      { 
       var p1 = ConvertGlobalToLocal(
        new Point(stroke.Points[length - 2].X, 
           stroke.Points[length - 2].Y)); 
       var p2 = ConvertGlobalToLocal(
        new Point(stroke.Points[length - 1].X, 
           stroke.Points[length - 1].Y)); 
       var p3 = ConvertGlobalToLocal(
        new Point(stroke.Points[length].X, 
           stroke.Points[length].Y)); 

       if (stroke.Points.Count == 3) 
       { 
        stroke.Path.MoveTo(p1); 
        stroke.Path.CurveTo(p1, p2, p3); 
       } 
       else if (stroke.Points.Count > 3) 
       { 
        **stroke.Path.LineTo(p2);** 
        stroke.Path.ContinueCurveTo(p2, p3); 

        Console.WriteLine("Path.ContinueCurveTo(new Point(" + p2.X + "," + p2.Y + "),new Point(" + p3.X + "," + p3.Y + "));"); 
       } 
      } 

      break; 
     } 
    } 
    return base.TouchesMoved(touchData); 
} 

上面的代碼產生以下結果:

iPhone iPhone Screenshot

的Android Android Screenshot

我也試着重現這個小樣本中沒有所有上面的觸摸繪圖代碼,只需通過passin即可g座標爲CurveToContinueCurveTo,這產生相同的結果。

回答

0

找到答案...剛纔意識到我必須通過當前點加上前一點並得到中間點。