Анимировать линейный сегмент в iOS
В 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;
}
Я могу оживить этот отрезок, изменив его преобразование.
Это работает хорошо, но не идеально, поскольку во время анимации конечные точки не следуют за прямыми линиями, как мне бы хотелось. Поэтому мне интересно, есть ли лучший способ для создания объекта отрезка линии, который я могу анимировать?
1 ответ
Вы можете использовать CAShapeLayer и создать CGPath, содержащий только две контрольные точки. Свойство path самого CAShapeLayer на самом деле является анимируемым (при условии, что новый путь имеет то же количество точек), плюс вы получаете все возможности преобразования CALayer. И, как только что сказал Tommy, вы можете играть с 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);