gpt4 book ai didi

ios - CGPathAddArc 创建的圆弧圆心坐标不一致

转载 作者:可可西里 更新时间:2023-11-01 05:41:14 25 4
gpt4 key购买 nike

我有一个自定义的 UIControl,如下所示:

enter image description here

白色圆环在drawRect中绘制如下:

//Get current context
CGContextRef mainContext = UIGraphicsGetCurrentContext();

/** Draw the Path **/

//Create the path
CGContextAddArc(mainContext, self.frame.size.width/2, self.frame.size.height/2, radius, 0, 2*M_PI, 0);

//Set the stroke color to white
[[UIColor whiteColor]setStroke];

//Define line width and cap
CGContextSetLineWidth(mainContext, HOUR_PICKER_BACKGROUND_WIDTH);
CGContextSetLineCap(mainContext, kCGLineCapButt);

//Draw the path
CGContextDrawPath(mainContext, kCGPathStroke);

黑色圆圈是一个CAShapeLayer,绘制如下:

hourSelector = [CAShapeLayer layer];
hourSelector.path = [UIBezierPath bezierPathWithRoundedRect:selectorPosition cornerRadius:11.0].CGPath;
hourSelector.fillColor = [UIColor colorWithRed:65.0f/255.0f green:75.0f/255.0f blue:86.0f/255.0f alpha:1.0f].CGColor;
hourSelector.strokeColor = [UIColor colorWithRed:65.0f/255.0f green:75.0f/255.0f blue:86.0f/255.0f alpha:1.0f].CGColor;
hourSelector.lineWidth = 1;
[self.layer addSublayer:hourSelector];

我已经能够在白环上的任何地方实现黑圈的拖动。当我放开黑色圆圈时,我希望能够将黑色圆圈动画化到环上的某个位置。当手指离开圆圈时,我得到结束触摸位置的弧度值以及圆圈所需的最终位置。我也有直角坐标/笛卡尔坐标中的点。我正在尝试通过在两点之间绘制弧线并使用 CAKeyFrameAnimation 更改圆弧沿弧线的位置来实现所需的行为。

CAKeyframeAnimation *pathAnimation = [CAKeyframeAnimation animationWithKeyPath:@"position"];
pathAnimation.calculationMode = kCAAnimationPaced;
pathAnimation.fillMode = kCAFillModeForwards;
pathAnimation.removedOnCompletion = NO;
pathAnimation.duration = 1.0;


CGMutablePathRef arcPath = CGPathCreateMutable();
CGPathAddArc(arcPath, NULL, self.frame.size.width/2, self.frame.size.height/2, radius, endingTouchRadian, finalPositionRadian,0);

pathAnimation.path = arcPath;
CGPathRelease(arcPath);

[hourSelector addAnimation:pathAnimation forKey:@"moveHour"];

我的问题是创建的弧线不在白环上。 self.frame.size.height(以及相应的宽度)与用于创建白色环的圆心相同,但圆弧是在屏幕外创建的。此外,对 x,y 使用 0,0 不会返回框架的左上角,而是返回主窗口的确切中心。圆弧的中心也似乎在每次旋转圆圈并松开时都会发生变化。

我是否错过了如何让创建的圆弧的中心与白色圆圈的中心相同?

最佳答案

我想通了。我在 drawRect 之外创建了 CGPath,它用不同的原点重绘了 View 。我不明白到底发生了什么,但是将 CGPath 创建代码移动到 drawRect 解决了这个问题。感谢@Unheilig 用他的评论为我指明了正确的方向。

关于ios - CGPathAddArc 创建的圆弧圆心坐标不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21071048/

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