Ios 当我慢慢画线时,画中的虚线不起作用
我正在开发ios中的绘图功能,我有3种类型的线Ios 当我慢慢画线时,画中的虚线不起作用,ios,iphone,ios7,drawing,Ios,Iphone,Ios7,Drawing,我正在开发ios中的绘图功能,我有3种类型的线 飞机 冲刺 点缀 问题是虚线,当我快速绘制时,它绘制的很好,但当我缓慢绘制时,它绘制的是实线 下面是代码片段,请告诉我问题出在哪里 - (void)drawingLayerMoved:(UIPanGestureRecognizer *)recognizer { //MOVE START if (recognizer.state == UIGestureRecognizerStateBegan) { dw_mou
- 飞机
- 冲刺
- 点缀
- (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如果您能帮助我编写代码就太好了,我搜索了很多,但没有找到任何解决方案