Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/110.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 当我慢慢画线时,画中的虚线不起作用_Ios_Iphone_Ios7_Drawing - Fatal编程技术网

Ios 当我慢慢画线时,画中的虚线不起作用

Ios 当我慢慢画线时,画中的虚线不起作用,ios,iphone,ios7,drawing,Ios,Iphone,Ios7,Drawing,我正在开发ios中的绘图功能,我有3种类型的线 飞机 冲刺 点缀 问题是虚线,当我快速绘制时,它绘制的很好,但当我缓慢绘制时,它绘制的是实线 下面是代码片段,请告诉我问题出在哪里 - (void)drawingLayerMoved:(UIPanGestureRecognizer *)recognizer { //MOVE START if (recognizer.state == UIGestureRecognizerStateBegan) { dw_mou

我正在开发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();
    }
}
我的问题很简单,就像这个问题,但没有找到解决办法: 我解决了这个问题, 我已经用我的自定义逻辑更新了移动代码

//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
//移动
else if(recognizer.state==UIgestureCongnizerStateChanged){
dw_mouseSwiped=是;
CGPoint currentPoint=[识别器位置视图:self.tempDrawImage];
BOOL dw_addThisPointInLine=YES;
如果([dw_笔刷类型相等:绘制虚线]|[dw_笔刷类型相等:绘制虚线]&!([dw_绘制图层模式相等字符串:绘制图层模式擦除器]){
CGFloat dw_点_距离=0.0;
dw_points_distance=[自距离BTWPoints:currentPoint p2:dw_lastPoint];
if(dw_点距离30和dw_刷<50)
dw_addThisPointInLine=是;
否则如果(dw_点距离>40和dw_笔刷<80)
dw_addThisPointInLine=是;
否则如果(dw_点距离>50和dw_笔刷<100)
dw_addThisPointInLine=是;
}
}
if(dw_addThisPointInLine){
//在此条件下移动代码。
}
}//移动代码结束

如果你想划一条线,那么为每次更改绘制图像路径的方法是行不通的。您必须不断添加到同一可变路径并重新绘制它。@DavidRönnqvist如果您能帮助我编写代码就太好了,我搜索了很多,但没有找到任何解决方案