2010-11-22 8 views
2

Ich frage mich, wie man ein CGRect auf ein UIImageView zeichnet. Hier ist der Code, den ich habe, aber es scheint nicht zu funktionieren. Irgendwelche Vorschläge? touch1 und touch2 sind beide CGPoints und Punkt ist ein CGRect.Zeichnen eines CGRect durch Berühren von

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 
UITouch *touch = [touches anyObject]; 
touch1 = [touch locationInView:self]; 
touch2 = [touch locationInView:self]; 
} 
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { 

}  

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { 
UITouch *touch = [touches anyObject]; 
touch2 = [touch locationInView:self]; 
point = CGRectMake(touch2.x, touch2.y, 50, 50); 
[self setNeedsDisplay]; 
} 

- (void) drawRect:(CGRect)rect { 
CGContextRef context = UIGraphicsGetCurrentContext(); 
CGContextSetLineWidth(context, 2.0); 
CGContextSetStrokeColorWithColor(context, [UIColor blackColor].CGColor); 
CGContextSetFillColorWithColor(context, pointColor.CGColor); 
CGContextAddEllipseInRect(context, point); 
CGContextDrawPath(context, kCGPathFillStroke); 
} 
+1

versuchen Sie ein Rechteck oder einen Kreis zu zeichnen? Du hast in deinen Kommentaren 'ein CGRect' gesagt, aber im Code steht CGContextAddEllipseInRect – slf

+0

Entschuldigung dafür, dass ich nicht spezifiziert habe ... an dieser Stelle versuche ich nur etwas zu bekommen, das allgemein auf dem Bildschirm gezeichnet werden kann. Ich habe eine Klasse, die eine Unterklasse eines UIViewController ist, der das ImageView ein tatsächliches Bild anzeigt. Ich möchte nur auf dieses Bild zurückgreifen können. – Brandon

Antwort

1

Was sehen Sie tatsächlich passiert?

Ein paar Anmerkungen:

  1. Sie sollten dies nicht mit einem UIImageView-- diejenigen sind, tun speziell für Bilddateien als Container vorgesehen. Sie sollten dafür nur eine Unterklasse einer regulären UIView verwenden.
  2. In Ihrer touchesBegan, wissen Sie, dass touch1 und touch2 immer auf das gleiche Ding gesetzt werden, richtig? Du scheinst nie Touch1 zu benutzen.
  3. point ist ein irreführender Variablenname für etwas, das ein Rect ist.
  4. Ihre drawRect ist nicht unvernünftig. Was ist pointColor? Wenn Sie schwarz-auf-schwarz zeichnen, könnte das ein Teil des Problems sein.
+0

Ich brauche wirklich nur 1 Touch für jetzt. Irgendwann, nachdem ich es auf den Bildschirm gezeichnet habe, möchte ich diesen "Punkt" ziehen können, um ihn dorthin zu bewegen, wo ich möchte. "Punkt" kann für Sie als jemand, der dieses Programm nicht verwendet, etwas irreführend sein. PointColor ist ein UIColor und ich habe versucht, es auf dem Bildschirm im Allgemeinen zu zeichnen, der einen weißen Hintergrund mit einem Bild hat, das in ein UIImageView geladen wird. – Brandon

0

Listing 3-1 Code, der durch die Anwendung einer Transformation zu einem Kreis eine Ellipse erzeugt

CGContextScaleCTM(context, 1,2); 
CGContextBeginPath(context); 
CGContextAddArc(context, 0, 0, 25, 0, 2*M_PI, false); 
CGContextStrokePath(context); 

Viel mehr Beispielcode in den Quartz2d Example

0

nahm ich Ihren Code nur, sein für mich arbeiten. Schau es dir einfach an. Und danke für deinen Code. In diesem Beispiel zeichne ich ein Rect.

- (void)drawRect:(CGRect)rect 
{ 
    CGContextRef context = UIGraphicsGetCurrentContext(); 
    CGContextSetLineWidth(context, 2.0); 
    CGContextSetStrokeColorWithColor(context, [UIColor blackColor].CGColor); 
    CGContextSetFillColorWithColor(context, [UIColor redColor].CGColor); 
    CGContextAddRect(context, rectFrame); 
    CGContextDrawPath(context, kCGPathFillStroke); 

} 

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    UITouch *touch = [touches anyObject]; 
    startPoint = [touch locationInView:self]; 
    rectFrame.origin.x = startPoint.x; 
    rectFrame.origin.y = startPoint.y; 
} 
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    UITouch *touch = [touches anyObject]; 
    endPoint = [touch locationInView:self]; 
    rectFrame.size.width = endPoint.y - startPoint.x; 
    rectFrame.size.height = endPoint.y - startPoint.x; 

    [self setNeedsDisplay]; 
}  

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    UITouch *touch = [touches anyObject]; 
    endPoint = [touch locationInView:self]; 
    rectFrame.size.width = endPoint.y - startPoint.x; 
    rectFrame.size.height = endPoint.y - startPoint.x; 

    [self setNeedsDisplay]; 
}