Próbuję zmienić okrąg w kwadrat i odwrotnie, a już prawie jestem. Jednak nie animuje się zgodnie z oczekiwaniami. Chciałbym wszystkie narożniki kwadratu być animowane/przekształcił w tym samym czasie, ale co mam jest następujące:Kształt animacji iOS iOS od koła do kwadratu
używam CAShapeLayer
i CABasicAnimation
aby animować właściwości kształtu.
Oto jak utworzyć ścieżkę kółko:
- (UIBezierPath *)circlePathWithCenter:(CGPoint)center radius:(CGFloat)radius
{
UIBezierPath *circlePath = [UIBezierPath bezierPath];
[circlePath addArcWithCenter:center radius:radius startAngle:0 endAngle:M_PI/2 clockwise:YES];
[circlePath addArcWithCenter:center radius:radius startAngle:M_PI/2 endAngle:M_PI clockwise:YES];
[circlePath addArcWithCenter:center radius:radius startAngle:M_PI endAngle:3*M_PI/2 clockwise:YES];
[circlePath addArcWithCenter:center radius:radius startAngle:3*M_PI/2 endAngle:M_PI clockwise:YES];
[circlePath closePath];
return circlePath;
}
Oto kwadrat ścieżka:
- (UIBezierPath *)squarePathWithCenter:(CGPoint)center size:(CGFloat)size
{
CGFloat startX = center.x-size/2;
CGFloat startY = center.y-size/2;
UIBezierPath *squarePath = [UIBezierPath bezierPath];
[squarePath moveToPoint:CGPointMake(startX, startY)];
[squarePath addLineToPoint:CGPointMake(startX+size, startY)];
[squarePath addLineToPoint:CGPointMake(startX+size, startY+size)];
[squarePath addLineToPoint:CGPointMake(startX, startY+size)];
[squarePath closePath];
return squarePath;
}
ubiegać ścieżkę koło jednego z moim zdaniem w warstwach ustaw wypełnienie itd. Doskonale się rysuje. Wtedy w moim selektora gestureRecognizer utworzyć i uruchomić następujące animację:
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"path"];
animation.duration = 1;
animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
animation.fromValue = (__bridge id)(self.stateLayer.path);
animation.toValue = (__bridge id)(self.stopPath.CGPath);
self.stateLayer.path = self.stopPath.CGPath;
[self.stateLayer addAnimation:animation forKey:@"animatePath"];
Jak można zauważyć w circlePathWithCenter:radius:
i squarePathWithCenter:size:
śledzę sugestię stąd (mają taką samą liczbę segmentów i punktów kontrolnych): Smooth shape shift animation
animacja wygląda lepiej niż w poście z góry, ale to jeszcze nie jest jeden chcę osiągnąć :(
wiem, że mogę zrobić to z prostego CALayer
a następnie ustawić Odpowiedni poziom cornerRadius
, aby wykreślić okrąg z kwadratu/prostokąta, a następnie animować właściwość, aby zmienić go z koła na kwadrat, ale nadal jestem ekstremalnie ciekawy, czy jest to nawet możliwe z animacją CAShapeLayer
i path
.
Z góry dziękujemy za pomoc!
Wygląda na to, że masz ten sam problem jak to pytanie [http://stackoverflow.com/questions/17429797/smooth-shape-shift-animation], na podstawie animacji - może być wart zobaczenia –
hmm .. Być może - znam to pytanie i podążałem za sugestią z zaakceptowanej odpowiedzi, ale wciąż jestem sierżantem koniec dla mnie. Mam taką samą liczbę segmentów/punktów kontrolnych, które moim zdaniem pomagają, ponieważ moja animacja jest w nieco lepszej formie, niż ta, która istnieje, ale nie ma wskazówki, jak ją poprawić. – fgeorgiew