gpt4 book ai didi

objective-c - 一种跟踪 CAShapeLayer 的 strokeEnd 点的方法?

转载 作者:搜寻专家 更新时间:2023-10-30 19:45:50 26 4
gpt4 key购买 nike

我的问题是关于跟踪 CAShapeLayer 的 strokeEnd 点坐标的可能性。

我有一个 UISlider,它生成一个介于 0 和 1 之间的变量。我从 CGMutablePathRef 创建一个 UIBezierPath 并将其分配为 CAShapeLayer 的路径属性。

这是我的头文件:

@interface ViewController : UIViewController
@property (strong, nonatomic) IBOutlet UISlider *progressSlider;
@property (strong,nonatomic) CAShapeLayer *raceTrack;
- (IBAction)progressChanged:(id)sender;
@end

在实现文件中,我写了如下代码:

CGMutablePathRef truePath = CGPathCreateMutable();
CGPathMoveToPoint(truePath, NULL, 100.0f, 468.0f-20.0f);
CGPathAddQuadCurveToPoint(truePath, NULL, 70.0f, 268.0f, 100.0f, 68.0f+20.0f);

UIBezierPath *trackPath = [UIBezierPath bezierPathWithCGPath:truePath];

self.raceTrack = [CAShapeLayer layer];
self.raceTrack.path = trackPath.CGPath;
self.raceTrack.strokeEnd = 0.0;
self.raceTrack.strokeColor = [UIColor yellowColor].CGColor;
self.raceTrack.fillColor = [UIColor clearColor].CGColor;
self.raceTrack.lineWidth = 7.0;
[self.view.layer addSublayer:self.raceTrack];

每次 slider 改变时都会调用以下函数:

- (IBAction)progressChanged:(id)sender{
self.raceTrack.strokeEnd = self.progressSlider.value;}

这非常有效!但是现在我想在屏幕上绘制的线的末端添加一种圆圈。我无法发布图片,但如果您想了解,我们可以假设圆圈是一颗 cometd ,在它后面,描边路径是 cometd 的尾部。

而且我不知道如何实现这一点。我认为也许最好的方法是跟踪笔画终点的坐标并使用 addSublayer 添加一个圆并将该圆的位置属性设置为等于笔画终点的坐标。我不知道这样的 strokeEnd 点是否存在,或者你们是否有一个简单的解决方案用于解决此类问题。

这就是我第一次向您寻求帮助的原因。

最佳答案

据我所知,您必须根据二次贝塞尔曲线的公式计算点。此代码将执行此操作,

- (IBAction)progressChanged:(UISlider *)sender{
self.raceTrack.strokeEnd = sender.value;
CGPoint strokeEnd = [self pointAtStrokeEnd:sender.value];
}


-(CGPoint)pointAtStrokeEnd:(CGFloat) fraction {

CGFloat x = (1 - fraction) * (1 - fraction) * self.startPoint.x + 2 * (1 - fraction) * fraction * self.controlPoint.x + fraction * fraction * self.endPoint.x;
CGFloat y = (1 - fraction) * (1 - fraction) * self.startPoint.y + 2 * (1 - fraction) * fraction * self.controlPoint.y + fraction * fraction * self.endPoint.y;
return CGPointMake(x, y);
}

您需要为曲线的起点、终点和控制点创建属性或 ivar,以便将它们传递给 pointAtStrokeEnd: 方法。

关于objective-c - 一种跟踪 CAShapeLayer 的 strokeEnd 点的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24996167/

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