Анимировать линейный сегмент в 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);
Другие вопросы по тегам