ich die Entwicklung bin Zeichnung Feature in ios, ich habe 3 Arten von LinienDie gestrichelte Linie in der Zeichnung nicht funktioniert, wenn ich Linie ziehen langsam
- FLUGZEUG
- DASHED
- DOTTED
Die Problem ist mit PUNKTE Linien, wenn ich schnell zeichne zieht es gut, aber wenn ich es langsam zeichne zieht es feste Linie
Bellow ist das Code-Snippet, bitte führen Sie mich, wo das Problem ist.
- (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();
}
}
Mein Problem ist simmiler wie diese Frage, aber er fand keine Lösung darin: Drawing a dashed line with CGContextSetLineDash
Der Ansatz, den Pfad zu einem Bild für jede Änderung zu zeichnen, funktioniert nicht, wenn Sie die Linie streichen möchten. Sie müssen den gleichen veränderbaren Pfad hinzufügen und neu zeichnen. –
@ DavidRönnqvist es wäre toll, wenn Sie mir beim Schreiben des Codes helfen können, ich habe viel gesucht, aber keine Lösung gefunden –