gpt4 book ai didi

ios - 当我慢慢画线时,绘图中的虚线不起作用

转载 作者:可可西里 更新时间:2023-11-01 03:56:56 24 4
gpt4 key购买 nike

我正在 ios 中开发绘图功能,我有 3 种类型的线条

  • 飞机
  • 虚线
  • 点缀

问题出在点线,当我画得很快时它画得很好,但当我画得慢时它画出实线

下面是代码片段,请指导我哪里有问题。

- (void)drawingLayerMoved:(UIPanGestureRecognizer *)recognizer {

//MOVE START
if (recognizer.state == UIGestureRecognizerStateBegan) {
dw_mouseSwiped = NO;
dw_lastPoint = [recognizer locationInView:self.tempDrawImage];

UIGraphicsBeginImageContext(self.tempDrawImage.frame.size);
[self.tempDrawImage.image drawInRect:CGRectMake(0, 0, self.tempDrawImage.frame.size.width, self.tempDrawImage.frame.size.height)];

}
//MOVING
else if (recognizer.state == UIGestureRecognizerStateChanged) {

dw_mouseSwiped = YES;
CGPoint currentPoint = [recognizer locationInView:self.tempDrawImage];
CGContextRef dw_context = UIGraphicsGetCurrentContext();

if( [dw_brushType isEqual: DRAWING_DOTTED_LINE] ) {
CGContextSetLineCap(dw_context, kCGLineCapRound);
}
else if( [dw_brushType isEqual: DRAWING_DASHED_LINE] ) {
CGContextSetLineCap(dw_context, kCGLineCapSquare);
}
else if( [dw_brushType isEqual: DRAWING_PLANE_LINE] ) {
CGContextSetLineCap(dw_context, kCGLineCapRound);
}

// ADD FEW SPACES B/W DOTS OF LINE
if( [dw_brushType isEqual: DRAWING_DASHED_LINE] || [dw_brushType isEqual: DRAWING_DOTTED_LINE] ) {
CGFloat dw_dash[] = {2,dw_brush*3,dw_brush*2,dw_brush};
CGContextSetLineDash(dw_context, 1, dw_dash, 4);
}

//BRUSH WIDTH ( we have devided it on 3 )
CGContextSetLineWidth(dw_context, (dw_brush/3));

if( [dw_drawingLayerMode isEqualToString:DRAWING_LAYER_MODE_ERASER] ){
//BRUSH CLEAR COLOR
CGContextSetFillColorWithColor( dw_context, [UIColor clearColor].CGColor );
//CLEAR DRAWING
CGContextSetBlendMode(dw_context, kCGBlendModeClear);
} else{
// BRUSH RGB COLOR
CGContextSetRGBStrokeColor(dw_context, dw_red, dw_green, dw_blue, dw_opacity);
//NORMAL DRAWING
CGContextSetBlendMode(dw_context,kCGBlendModeNormal);
}

CGContextMoveToPoint(dw_context, dw_lastPoint.x, dw_lastPoint.y);
CGContextAddLineToPoint(dw_context, currentPoint.x, currentPoint.y);
CGContextStrokePath(dw_context);

//SAVE CURRENT MOVE INFO IN TEMP IMG
self.tempDrawImage.image = UIGraphicsGetImageFromCurrentImageContext();

//SAVE CURRENT MOVE POINT AS dw_lastPoint
dw_lastPoint = currentPoint;

}
//MOVE END
else if (recognizer.state == UIGestureRecognizerStateEnded) {
UIGraphicsEndImageContext();
}
}

我的问题和这个问题一样简单,但没有找到解决方案: Drawing a dashed line with CGContextSetLineDash enter image description here

最佳答案

我解决了这个问题,我已经用我的自定义逻辑更新了移动代码,

//MOVING
else if (recognizer.state == UIGestureRecognizerStateChanged) {

dw_mouseSwiped = YES;
CGPoint currentPoint = [recognizer locationInView:self.tempDrawImage];
BOOL dw_addThisPointInLine = YES;


if( ([dw_brushType isEqual: DRAWING_DASHED_LINE] || [dw_brushType isEqual: DRAWING_DOTTED_LINE]) && !([dw_drawingLayerMode isEqualToString:DRAWING_LAYER_MODE_ERASER]) ) {

CGFloat dw_points_distance = 0.0;
dw_points_distance = [self distanceBtwPoints:currentPoint p2:dw_lastPoint];

if( dw_points_distance < dw_brush)
dw_addThisPointInLine = NO;

if( !(dw_addThisPointInLine) ) {
if( dw_points_distance > 30 && dw_brush < 50)
dw_addThisPointInLine = YES;
else if( dw_points_distance > 40 && dw_brush < 80)
dw_addThisPointInLine = YES;
else if( dw_points_distance > 50 && dw_brush < 100)
dw_addThisPointInLine = YES;
}
}

if( dw_addThisPointInLine ) {
//shif the code of move inside this condition.
}


}//move code end

关于ios - 当我慢慢画线时,绘图中的虚线不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25628248/

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