1

在 iOS 中,我想创建一个线段对象并为其起点和终点设置动画(我可以在 Microsoft 的 WPF 中做到这一点)。

目前,我创建了一个线段对象作为CALayer我使用变换拉伸旋转的微小对象。

+(LayLine*) layLineWithStartPoint:(CGPoint)ptStart andEndPoint:(CGPoint)ptEnd{
    LayLine* line = [[LayLine alloc] init]; 
    line.backgroundColor = [UIColor blackColor].CGColor;
    line.frame = CGRectMake(0,-1,1,2);  // Line 1 pixel long and 2 pixel wide line segment
    line.anchorPoint = CGPointMake(0,0);

    line.affineTransform = [LayLine affineTransformationForLineSegment:ptStart to:ptEnd];   
    return line;
}

我可以通过改变它的变换来动画这条线段。

这工作得很好,但并不完美,因为在动画过程中,终点并不像我想要的那样沿着直线。因此,我想知道是否有更好的方法来创建可以动画的线段对象?

4

1 回答 1

3

您可以使用CAShapeLayer并创建一个仅包含两个控制点的 CGPath。CAShapeLayer 本身的路径属性实际上是可动画的(只要新路径具有相同数量的点)加上您获得 CALayer 的所有变换功能。正如汤米strokeStart刚才提到的 ,你可以玩strokeEnd一些很酷的动画(也有lineDashPattern很好的动画,lineDashPhase但我想你不需要那个)。

此问题的代码示例:

CAShapeLayer *lineShape = nil;
CGMutablePathRef linePath = nil;
linePath = CGPathCreateMutable();
lineShape = [CAShapeLayer layer];

lineShape.lineWidth = 1.0f;
lineShape.lineCap = kCALineJoinMiter;
lineShape.strokeColor = [[UIColor redColor] CGColor];

CGPathMoveToPoint(linePath, NULL, x, y);
CGPathAddLineToPoint(linePath, NULL, toX, toY);

lineShape.path = linePath;
CGPathRelease(linePath);
于 2013-03-01T21:10:54.500 回答