Also arbeite ich an einer iOS-App, die eine GUI hat, wo Sie auf ein Bild zeichnen können, Filter hinzufügen usw. Die Zeichnungsfunktion funktioniert, wird aber manchmal zufällig direkt am Anfang ausschneiden der Zeichnung. Wenn Sie auf dem Bildschirm anfangen zu zeichnen und es für mehr als eine halbe Sekunde funktioniert, wird es funktionieren, bis Sie es erneut versuchen; Aber manchmal, wenn Sie anfangen zu zeichnen, wird es nach einem Bruchteil einer Sekunde scheinbar ohne Grund ausschneiden.Drawing GUI wird manchmal ausschneiden
// Draws a line from point1 to point2
- (void) drawOnImage:(CGPoint *)point1 :(CGPoint *)point2 {
UIGraphicsBeginImageContext(self.view.frame.size);
[self.mainImage.image drawInRect:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];
CGContextMoveToPoint(UIGraphicsGetCurrentContext(), point1->x, point1->y);
CGContextAddLineToPoint(UIGraphicsGetCurrentContext(), point2->x, point2->y);
CGContextSetLineCap(UIGraphicsGetCurrentContext(), kCGLineCapRound);
CGContextSetLineWidth(UIGraphicsGetCurrentContext(), brush);
CGContextSetRGBStrokeColor(UIGraphicsGetCurrentContext(), red, green, blue, 1.0);
CGContextSetBlendMode(UIGraphicsGetCurrentContext(),kCGBlendModeNormal);
CGContextStrokePath(UIGraphicsGetCurrentContext());
self.mainImage.image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
}
// Beginning of the drawing, only happens when you click but don't move around on the screen
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch *touch = [touches anyObject];
lastPoint = [touch locationInView:self.view];
if (currentAction == DRAW) {
[self backupImage];
//disable the renderImageView so that the gestures dont interfere
[self drawOnImage :&lastPoint :&lastPoint];
}
}
// When lines are being drawn on the image (when your finger is moving)
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
if (currentAction == DRAW) {
UITouch *touch = [touches anyObject];
CGPoint currentPoint = [touch locationInView:self.view];
[self drawOnImage :¤tPoint :&lastPoint];
lastPoint = currentPoint;
}
}
Hier ist mein Storyboard Layout; Wie Sie sehen, erzeugt der Code CGRects einer Linie, wenn der Benutzer zeichnet, und generiert dann das Hauptbild mit dem CGRect als Teil des Bildes neu.
Hier ist ein Beispiel für die Ausgabe finden Sie die beiden schwarzen Zeichnung Markierungen, die sofort beendet? Der obere Zug arbeitete und folgte, die anderen beiden schnitten sofort aus und machten danach keine weiteren Linien mehr.
Irgendwelche Ideen, warum dies geschieht? Zuerst dachten wir, es wäre der Simulator, aber es ist nicht.
Ich sehe hier nichts, das das beschriebene Verhalten verursachen würde. Sicher, das ist wahrscheinlich nicht so effizient, wie es sein könnte, aber ich sehe keinen Grund dafür, es auszuschneiden. Ich würde vorschlagen, Logging-Nachrichten in einige dieser Routinen einzufügen, damit Sie sie eingrenzen können (empfängt sie überhaupt nicht die 'touchesMoved' oder ist sie in der Zeichnung). – Rob
Hey, ich habe das Problem behoben. Ich bin mir nicht sicher, was es war, aber krank geben meine beste Idee in einem Beitrag unter –
Ja, das Problem war nicht in dem Code in der Frage zur Verfügung gestellt. Ich habe es getestet und es hat gut funktioniert. Es muss etwas anderes gewesen sein (z. B. hat etwas "currentAction" auf etwas anderes als "DRAW" gesetzt, etwas, das die Hauptwarteschlange usw. blockiert). – Rob