Tôi cố gắng thay đổi hình tròn thành hình vuông và ngược lại và tôi gần như ở đó. Tuy nhiên nó không hoạt hình như mong đợi. Tôi muốn tất cả các góc của một hình vuông để được hoạt hình/morphed cùng một lúc nhưng những gì tôi nhận được là như sau:Hình dạng động/hình dạng iOS từ hình tròn đến hình vuông
tôi sử dụng CAShapeLayer
và CABasicAnimation
để động tài sản hình thành.
Dưới đây là cách tôi tạo ra con đường vòng tròn:
- (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;
}
Đây là con đường vuông:
- (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;
}
tôi áp dụng các con đường vòng tròn để một trong những lớp Xem tôi, thiết lập các điền, vv Nó rút ra hoàn hảo. Sau đó, trong selector gestureRecognizer tôi tạo và chạy các hình ảnh động sau đây:
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"];
Như bạn có thể thấy trong circlePathWithCenter:radius:
và squarePathWithCenter:size:
Tôi làm theo những gợi ý từ đây (có cùng số phân đoạn và điểm kiểm soát): Smooth shape shift animation
các hoạt hình trông đẹp hơn sau đó trong bài từ trên cao nhưng nó vẫn không phải là người tôi muốn đạt được :(
tôi biết rằng tôi có thể làm điều đó với đơn giản CALayer
và sau đó thiết lập một mức độ phù hợp của cornerRadius
để tạo vòng tròn ra khỏi hình vuông/hình chữ nhật và sau đó tạo thành một thuộc tính cornerRadius
để thay đổi từ hình tròn thành hình vuông nhưng tôi vẫn còn tò mò nếu bạn có thể làm điều đó với hoạt ảnh CAShapeLayer
và path
.
Cảm ơn bạn đã trợ giúp!
Dường như bạn đang gặp vấn đề tương tự như câu hỏi này [http://stackoverflow.com/question/17429797/smooth-shape-shift-animation], dựa trên hình ảnh động — có thể đáng xem –
hmm .. Có thể là - tôi biết câu hỏi và làm theo đề xuất từ câu trả lời được chấp nhận nhưng tôi vẫn là một người chết kết thúc cho tôi. Tôi có cùng số lượng phân đoạn/điểm kiểm soát mà tôi nghĩ là có ích vì hình động của tôi có hình dạng tốt hơn một chút thì hình ảnh từ đó nhưng ngưỡng cửa không có manh mối nào để cải thiện nó. – fgeorgiew