我用以下代码绘制了一条四边形曲线,我还画了3个椭圆,一个用于左角,一个用于右角,一个用于控制点。
- (void)drawRect:(CGRect)rect
{
CGContextRef context = UIGraphicsGetCurrentContext();
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGContextSaveGState(context);
CGMutablePathRef curve = CGPathCreateMutable();
CGPathMoveToPoint(curve, nil, 5, 40);
CGPathAddQuadCurveToPoint(curve, nil, 30, 20, 55, 40);
CGContextAddPath(context, curve);
CGContextSetStrokeColorWithColor(context,[UIColor whiteColor].CGColor);
CGContextStrokePath(context);
CGContextSaveGState(context);
CGSize sz = self.frame.size;
CGPoint pt = CGPointMake(sz.width/2.0, sz.height/2.0);
CGFloat r = 5;
middleRect_ = CGRectMake(pt.x - r, pt.y - r, r * 2, r * 2);
CGContextAddEllipseInRect(context, middleRect_);
CGContextSetFillColorWithColor(context, [[UIColor whiteColor] CGColor]);
CGContextFillPath(context);
CGContextAddEllipseInRect(context, middleRect_);
CGContextSetLineWidth(context, 2);
CGContextSetStrokeColorWithColor(context, [[UIColor blackColor] CGColor]);
CGContextStrokePath(context);
//left side
sz = self.frame.size;
pt = CGPointMake(sz.width/2.0, sz.height/2.0);
r = 5;
leftRect_ = CGRectMake(pt.x - 27, pt.y + 3, r * 2, r * 2);
CGContextAddEllipseInRect(context, leftRect_);
CGContextSetFillColorWithColor(context, [[UIColor whiteColor] CGColor]);
CGContextFillPath(context);
CGContextAddEllipseInRect(context, leftRect_);
CGContextSetLineWidth(context, 2);
CGContextSetStrokeColorWithColor(context, [[UIColor blackColor] CGColor]);
CGContextStrokePath(context);
//right side
sz = self.frame.size;
pt = CGPointMake(sz.width/2.0, sz.height/2.0);
r = 5;
rightRect_ = CGRectMake(pt.x + 20, pt.y + 3, r * 2, r * 2);
CGContextAddEllipseInRect(context, rightRect_);
CGContextSetFillColorWithColor(context, [[UIColor whiteColor] CGColor]);
CGContextFillPath(context);
CGContextAddEllipseInRect(context, rightRect_);
CGContextSetLineWidth(context, 2);
CGContextSetStrokeColorWithColor(context, [[UIColor blackColor] CGColor]);
CGContextStrokePath(context);
// Cleanup Code
CGColorSpaceRelease(colorSpace);
CGContextRestoreGState(context);
}
你可以看到我正在使用3个CGRect来存储位置。现在我想要触摸并拖动椭圆,它会改变曲线。例如,如果触摸中间椭圆,它会改变控制点,如果我触摸leftRect,它会改变左侧位置,如果我触摸rightRect,它会改变右侧位置。怎么做?我没有这些椭圆和曲线的参考,我该怎么做?感谢
答案 0 :(得分:0)
您需要跟踪触摸事件以了解用户何时开始拖动椭圆。请使用UIPanGestureRecognizer
。您还需要变量来跟踪省略号的位置。每当用户拖动椭圆时,通过调用[self setNeedsDisplay]
重新绘制所有内容。
对于简短的回答很抱歉,但是从绘制四条曲线到允许用户控制它还有很长的路要走。该算法非常简单。