gpt4 book ai didi

iPhone:绘制一条曲线直到它变成一个圆形动画

转载 作者:行者123 更新时间:2023-12-03 18:41:16 26 4
gpt4 key购买 nike

我希望画一条曲线,直到它旋转一周并连接成一个完整的圆,只是圆的轮廓,没有填充。这必须在几秒钟内进行动画处理。

有人能指出我正确的方向吗?我已经问过similar question但我的措辞不正确,所以每个人都很难理解我的意思,从而迷失在问题的海洋中。

非常感谢您的帮助

[编辑]

我目前正在对 UIView 进行子类化并重写drawRect。我找到了绘制实心圆的代码,但我只需要描边。

- (void)drawRect:(CGRect)rect {
// Drawing code

CGRect allRect = self.bounds;
CGRect circleRect = CGRectInset(allRect, 2.0f, 2.0f);

CGContextRef context = UIGraphicsGetCurrentContext();

// Draw background
CGContextSetRGBStrokeColor(context, self.strokeValueRed, self.strokeValueGreen, self.strokeValueBlue, self.strokeValueAlpha); // white
CGContextSetRGBFillColor(context, 1.0f, 1.0f, 1.0f, 0.1f); // translucent white
CGContextSetLineWidth(context, self.lineWidth);
CGContextFillEllipseInRect(context, circleRect);
CGContextStrokeEllipseInRect(context, circleRect);

// Draw progress
CGPoint center = CGPointMake(allRect.size.width / 2, allRect.size.height / 2);
CGFloat radius = (allRect.size.width - 4) / 2;
CGFloat startAngle = - ((float)M_PI / 2); // 90 degrees
CGFloat endAngle = (self.progress * 2 * (float)M_PI) + startAngle;
CGContextSetRGBFillColor(context, 1.0f, 1.0f, 1.0f, 1.0f); // white
CGContextMoveToPoint(context, center.x, center.y);
CGContextAddArc(context, center.x, center.y, radius, startAngle, endAngle, 0);
CGContextClosePath(context);
CGContextFillPath(context);
}

[编辑 #2]

我更改了代码以删除所有填充引用,但现在它没有绘制任何内容:(有什么想法吗?

- (void)drawRect:(CGRect)rect
{
// Drawing code

CGRect allRect = self.bounds;
CGContextRef context = UIGraphicsGetCurrentContext();

// Draw background
CGContextSetRGBStrokeColor(context, self.strokeValueRed, self.strokeValueGreen, self.strokeValueBlue, self.strokeValueAlpha); // white
CGContextSetLineWidth(context, 5);

// Draw progress
CGPoint center = CGPointMake(allRect.size.width / 2, allRect.size.height / 2);
CGFloat radius = (allRect.size.width - 4) / 2;
CGFloat startAngle = - ((float)M_PI / 2); // 90 degrees
CGFloat endAngle = (self.progress * 2 * (float)M_PI) + startAngle;
CGContextAddArc(context, center.x, center.y, radius, startAngle, endAngle, 0);
CGContextStrokePath(context);
}

[编辑 #3] 解决方案

对啊,我感觉自己就是个白痴!问题是笔划颜色值未初始化,这意味着正在绘制线条但显然看不到它!

最佳答案

这与我对您的其他问题给出的答案相同here .

您真正应该做的是对路径为圆形的 CAShapeLayer 笔划进行动画处理。这将使用核心动画来加速,并且比在 -drawRect: 中绘制圆的一部分更简洁。

下面的代码将在屏幕中心创建一个圆形图层,并按顺时针方向为其笔划设置动画,使其看起来就像正在绘制一样。您当然可以使用任何您想要的形状。 (您可以阅读 Ole Begemanns 博客上的 this article,了解有关如何为形状图层的笔画设置动画的更多信息。)

注意:描边属性与图层上的边框属性不同。要更改笔画的宽度,您应该使用“lineWidth”而不是“borderWitdh”等。

// Set up the shape of the circle
int radius = 100;
CAShapeLayer *circle = [CAShapeLayer layer];
// Make a circular shape
circle.path = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(0, 0, 2.0*radius, 2.0*radius)
cornerRadius:radius].CGPath;
// Center the shape in self.view
circle.position = CGPointMake(CGRectGetMidX(self.view.frame)-radius,
CGRectGetMidY(self.view.frame)-radius);

// Configure the apperence of the circle
circle.fillColor = [UIColor clearColor].CGColor;
circle.strokeColor = [UIColor blackColor].CGColor;
circle.lineWidth = 5;

// Add to parent layer
[self.view.layer addSublayer:circle];

// Configure animation
CABasicAnimation *drawAnimation = [CABasicAnimation animationWithKeyPath:@"strokeEnd"];
drawAnimation.duration = 10.0; // "animate over 10 seconds or so.."
drawAnimation.repeatCount = 1.0; // Animate only once..

// Animate from no part of the stroke being drawn to the entire stroke being drawn
drawAnimation.fromValue = [NSNumber numberWithFloat:0.0f];
drawAnimation.toValue = [NSNumber numberWithFloat:1.0f];

// Experiment with timing to get the appearence to look the way you want
drawAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn];

// Add the animation to the circle
[circle addAnimation:drawAnimation forKey:@"drawCircleAnimation"];

关于iPhone:绘制一条曲线直到它变成一个圆形动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8004972/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com