iOS中的动画线段
Posted
技术标签:
【中文标题】iOS中的动画线段【英文标题】:Animate line segment in iOS 【发布时间】:2013-03-01 20:56:26 【问题描述】:在 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;
我可以通过改变它的变换来动画这条线段。
这工作得很好,但并不完美,因为在动画过程中,终点并不像我想要的那样沿着直线。因此,我想知道是否有更好的方法来创建可以动画的线段对象?
【问题讨论】:
你说的是哪种动画?这两个点是在不同的路径上传播,还是只是在同一条恒定路径上的不同位置? @Tommy,我不确定我是否理解你的问题,但是 ptStartA-ptEndA 应该移动到 ptStartB-ptEndB (线段 B 可能垂直于线段 A)。 【参考方案1】:您可以使用CAShapeLayer 并创建一个仅包含两个控制点的CGPath。 CAShapeLayer 本身的路径属性实际上是可动画的(只要新路径具有相同数量的点)加上您获得 CALayer 的所有变换功能。正如刚才提到的Tommy,您可以使用strokeStart
和strokeEnd
来制作一些非常酷的动画(还有lineDashPattern
可以很好地与lineDashPhase
一起制作动画,但我猜你不需要那个)。
来自this question的代码示例:
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);
【讨论】:
... 我问的问题是相关的,因为strokeEnd
和 strokeStart
属性也是可动画的,所以你可以不理会路径,只为你绘制的部分设置动画你有兴趣。例如我将它用于我的一个应用程序中的圆形进度条——它只是一个带有粗笔划的圆形路径,我让 Core Animation 在strokeEnd
上完成工作。
要为路径设置动画,我必须以某种方式将其转换为 NSValue?
我不知道你是如何制作动画的。但 CGPathRef 可以桥接到 id
类型。见***.com/questions/9513082/…以上是关于iOS中的动画线段的主要内容,如果未能解决你的问题,请参考以下文章