我在iOS上运行了一个移动Flex项目,该项目一直在使用Degrafa的库,以便使用它的BezierSpline类。其目的是能够直接在屏幕上绘制,然后使用这个库将用户手势给出的点集合转换成bezier曲线。
然而,当我的应用程序显示至少一条曲线的页面时,它就开始崩溃了。我没有任何错误,堆栈跟踪或任何东西,应用程序只是简单地被杀死,我被带回到iOS桌面。显然,错误发生在BezierSpline类的BezierSpline()函数中的某个地方。
另外,我注意到这只发生在应用程序的发行版上,或者是通过AppStore (看起来他们没有注意到),或者是通过部署在iPad上的发布包。在模拟器中,或者在设备上直接使用调试包,一切都很好。因为我已经有一段时间没有做任何发布包了,所以我不确定是哪种修改导致了这种情况。我唯一知道的是,我最近将Flash更新为4.7,AIR更新为3.9 (这是这个项目的其他特性所必需的)。
所以我基本上有三个问题:
编辑:我刚刚在安卓设备下测试了完全相同的代码,曲线显示正确,所以只有在iOS设备上部署时才会出现这种情况。
发布于 2014-02-01 07:17:00
最后,我实现了这个由Lee 这里编写的非常有用的示例。这是我在一个电话中所需要的全部:
static public function getPoint(t:Number, points:Array):Point
{
var x:Number = 0;
var y:Number = 0;
var n:uint = points.length-1;
var factn:Number = factoral(n);
for (var i:uint=0;i<=n;i++)
{
//calc binominal coefficent
var b:Number = factn/(factoral(i)*factoral(n-i));
//calc powers
var k:Number = Math.pow(1-t, n-i)*Math.pow(t, i);
//add weighted points to totals
x += b*k*points[i].x;
y += b*k*points[i].y;
}
return new Point(x, y);
}
static private function factoral(value:uint):Number
{
if (value==0) return 1;
var total:Number = value;
while (--value>1)
total *= value;
return total;
}使用该类的示例代码也可在上面的链接中获得。
这个解决方案的唯一缺点是,我必须手动处理曲线的平滑度,方法是定义曲线的长度(通过改变"t“增量)。但是,我也可以根据控制点的数量或它们之间的距离动态地定义这种增量。
无论如何,这对我的问题来说已经足够了,希望这能帮到别人。
https://stackoverflow.com/questions/21484326
复制相似问题