3 Stimmen

Zeichnen Sie eine Linie zwischen zwei Punkten auf dem iPhone?

Bildbeschreibung hier eingeben Das obige Bild zeigt den roten Punkt an, ich möchte diese Punkte verbinden.

Ich möchte eine Linie zwischen zwei Punkten zeichnen, ich habe ein Bild in der ImageView, ich möchte einen Teil des Bildes markieren, um den Ort anzuzeigen. Mit dem Touch-Event habe ich die Punkte platziert.

   -(void) drawRect:(CGRect)rect
{

    if([pointarray count]==4)
    {
        float firstpointx= [[pointarray objectAtIndex:0]floatValue];
        float firstpointy= [[pointarray objectAtIndex:1]floatValue];
        float secondpointx= [[pointarray objectAtIndex:2]floatValue];
        float secondpointy= [[pointarray objectAtIndex:3]floatValue];

        CGContextRef ctx = UIGraphicsGetCurrentContext();
        CGContextSetStrokeColorWithColor(ctx, [UIColor blueColor].CGColor);
        CGContextSetLineWidth(ctx, 2.0);
        CGContextMoveToPoint(ctx, firstpointx, firstpointy);///zum ersten Punkt bewegen
        CGContextAddLineToPoint(ctx, secondpointx, secondpointy);//Linie vom ersten Punkt zum zweiten Punkt hinzufügen
        CGContextSetLineCap(ctx, kCGLineCapRound);
        CGContextStrokePath(ctx);
        [pointarray removeAllObjects];//entferne die ersten beiden Punkte aus dem Array, damit die nächste Linie nicht fortlaufend mit der vorherigen Linie gezeichnet wird
    }
}
-(void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{ 
    pointarray=[[NSMutableArray alloc]init];
    CGPoint curPoint = [[touches anyObject] locationInView:self.view];
    [pointarray addObject:[NSNumber numberWithFloat:curPoint.x]];
    [pointarray addObject:[NSNumber numberWithFloat:curPoint.y]];
    NSLog(@"der Punkt-Array ist %@",pointarray);
    [self.view setNeedsDisplay]; // ruft die drawRect-Methode auf
}
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
}

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {

    UITouch *touch = [touches anyObject];

    if ([touch tapCount] == 2) {
        imageView.image = nil;
        return;
    }

    if(!mouseSwiped) {
        UIGraphicsBeginImageContext(self.view.frame.size);
        [imageView.image drawInRect:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];
        CGContextSetLineCap(UIGraphicsGetCurrentContext(), kCGLineCapRound);
        CGContextSetLineWidth(UIGraphicsGetCurrentContext(), 5.0);
        CGContextSetRGBStrokeColor(UIGraphicsGetCurrentContext(), 1.0, 0.0, 0.0, 1.0);
        CGContextMoveToPoint(UIGraphicsGetCurrentContext(), lastPoint.x, lastPoint.y);
        CGContextAddLineToPoint(UIGraphicsGetCurrentContext(), lastPoint.x, lastPoint.y);
        CGContextStrokePath(UIGraphicsGetCurrentContext());
        CGContextFlush(UIGraphicsGetCurrentContext());
        imageView.image = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();

    }

}

Nachdem ich die Punkte platziert habe, stecke ich hier fest, wie ich die beiden Punkte verbinden kann. Kann mir jemand helfen!!!

2voto

Anil Kothari Punkte 7623

Verwenden Sie den folgenden Code Es wird funktionieren:-

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {

    mouseSwiped = NO;
    UITouch *touch = [touches anyObject];

    if ([touch tapCount] == 2) {
        [drawImage setImage:[UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"white" ofType:@"png"]]];
        return;
    }

    lastPoint = [touch locationInView:self.view];
    lastPoint.y -= 20;

}

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
    mouseSwiped = YES;

    UITouch *touch = [touches anyObject];   
    CGPoint currentPoint = [touch locationInView:self.drawImage];
    currentPoint.y -= 20;

    NSLog(@"current Point is x: %d, y: %d",currentPoint.x,currentPoint.y);

    UIGraphicsBeginImageContext(self.drawImage.frame.size);
    [drawImage.image drawInRect:CGRectMake(0, 0, self.drawImage.frame.size.width, self.drawImage.frame.size.height)];
    CGContextSetLineCap(UIGraphicsGetCurrentContext(), kCGLineCapRound);
    CGContextSetLineWidth(UIGraphicsGetCurrentContext(), 5.0);
    CGContextSetRGBStrokeColor(UIGraphicsGetCurrentContext(), 0.0, 0.5, 0.6, 1.0);
    CGContextBeginPath(UIGraphicsGetCurrentContext());
    CGContextMoveToPoint(UIGraphicsGetCurrentContext(), lastPoint.x, lastPoint.y);
    CGContextAddLineToPoint(UIGraphicsGetCurrentContext(), currentPoint.x, currentPoint.y);
    CGContextStrokePath(UIGraphicsGetCurrentContext());
    drawImage.image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    lastPoint = currentPoint;

}

Fühlen Sie sich frei zu fragen..

0voto

titaniumdecoy Punkte 18400

Sie sollten niemals außerhalb von drawRect: zeichnen. Nachdem Sie eine Berührung erkannt haben, müssen Sie diese Informationen in einer Instanzvariable speichern und [self setNeedsDisplay] aufrufen, um drawRect: zur richtigen Zeit aufzurufen.

Außerdem sollten Sie, wenn Sie iOS 3.2 oder höher anvisieren, die Verwendung von Gestenerkennern in Betracht ziehen.

0voto

Serhii Mamontov Punkte 4922

Erstellen Sie Ihre UIImageView-Unterklasse, fügen Sie einige Methoden hinzu, die es ermöglichen, Punkte bei Benutzerberührung hinzuzufügen (sie werden in drawRect: gezeichnet und auch in ein C-Array eingefügt) und eine Methode zum "Commit" der Linie. Die Commit-Linie wird einfach durch das C-Array gehen und sie im Kontext mit CG-Methoden zeichnen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X