在绘制Graph时仅在设备中使用CGMutablePathRef时崩溃应用程序

时间:2013-10-12 12:10:00

标签: iphone ios objective-c ios4 core-graphics

    CGMutablePathRef smoothedCGPath = CreateSmoothedBezierPathFromPath(self.CGPath, tension);

当我调用方法时

CreateSmoothedBezierPathFromPath(self.CGPath, tension);

CGMutablePathRef CreateSmoothedBezierPathFromPath( CGPathRef path, CGFloat tention)
{
    //convert path to 2 arrays of CGFloats
    struct dataPointer my_dataPointer; //this struct will hold the 2 indexes of the CGpath
    my_dataPointer.numberOfPoints = 0;
    my_dataPointer.isClosed = NO;
    CGPathApply(path, &my_dataPointer, savePathToArraysApplierFunc);

//the arrays where the control points will be stored
CGFloat controlPoints_x[2*_max_points];
CGFloat controlPoints_y[2*_max_points];

calculateBezierControlPoints(  controlPoints_x, controlPoints_y, my_dataPointer.indexx , my_dataPointer.indexy, my_dataPointer.isClosed, my_dataPointer.numberOfPoints, tention);

//the final CGpath constisting of original points and computed control points
CGMutablePathRef bezierPath = CGPathCreateMutable();

for (int i = 0; i<my_dataPointer.numberOfPoints + (int) my_dataPointer.isClosed; i++) 
{
    if(i==0)
        CGPathMoveToPoint(bezierPath, nil, my_dataPointer.indexx[0], my_dataPointer.indexy[0]);
    else if (i==my_dataPointer.numberOfPoints) //this happens when the path is closed
        CGPathAddCurveToPoint(bezierPath, nil, controlPoints_x[i*2-2], controlPoints_y[i*2-2], controlPoints_x[i*2-1], controlPoints_y[i*2-1],my_dataPointer.indexx[0], my_dataPointer.indexy[0]);
    else
        CGPathAddCurveToPoint(bezierPath, nil, controlPoints_x[i*2-2], controlPoints_y[i*2-2], controlPoints_x[i*2-1], controlPoints_y[i*2-1],my_dataPointer.indexx[i], my_dataPointer.indexy[i]);
}
if(my_dataPointer.isClosed)
    CGPathCloseSubpath(bezierPath);

return bezierPath;

}

在上面的方法中,返回bezierPath会导致设备中的App崩溃,崩溃时没有崩溃原因。它在模拟器中工作正常。

0 个答案:

没有答案