2012-03-28 7 views
-1

Ich habe eine generische Ansicht rausgeschmuggelt und sie an meine circleView.m angehängt. Ich zog dann einen runden Rect-Button über diese Ansicht und verband eine IBAction damit. Ab jetzt, wenn die Ansicht geladen wird, wird der Kreis automatisch auf den Bildschirm gezeichnet. Ich möchte nur den Kreis auf dem Bildschirm zeichnen, wenn die Taste mit drawRect oder einer anderen Zeichenmethode gedrückt wird. Hier ist mein Code:Wie kann ich eine IBAction in meinem Controller verwenden, um einen Kreis in meiner benutzerdefinierten Ansicht zu zeichnen?

drawCircleViewController.h

#import <UIKit/UIKit.h> 

@interface drawCircleViewController : UIViewController 

@end 

drawCircleViewController.m

#import "drawCircleViewController.h" 
#import "circleView.h" 
@interface drawCircleViewController() 
@property (nonatomic, weak) IBOutlet circleView *circleV; 
@end 
@implementation drawCircleViewController 
@synthesize circleV = _circleV; 


- (IBAction)buttonPressedToDrawCircle:(id)sender { 
    // This is action I want to use to draw the circle in my circleView.m 
} 

@end 

circleView.h

#import <UIKit/UIKit.h> 

@interface circleView : UIView 

@end 

circleView.m

#import "circleView.h" 

@implementation circleView 

- (id)initWithFrame:(CGRect)frame 
{ 
    self = [super initWithFrame:frame]; 
    if (self) { 
     // Initialization code 
    } 
    return self; 
} 


- (void)drawCircleAtPoint:(CGPoint)p 
       withRadius:(CGFloat)radius 
       inContext:(CGContextRef)context 
{ 
    UIGraphicsPushContext(context); 
    CGContextBeginPath(context); 
    CGContextAddArc(context, p.x, p.y, radius, 0, 2*M_PI, YES); 
    CGContextStrokePath(context); 
    UIGraphicsPopContext(); 
} 

- (void)drawRect:(CGRect)rect 
{ 
    CGContextRef context = UIGraphicsGetCurrentContext(); 

    CGPoint midpoint; 
    midpoint.x = self.bounds.origin.x + self.bounds.size.width/2; 
    midpoint.y = self.bounds.origin.y + self.bounds.size.height/2; 

#define DEFAULT_SCALE 0.90 

    CGFloat size = self.bounds.size.width/2; 
    if (self.bounds.size.height < self.bounds.size.width) size = self.bounds.size.height/2; 
    size *= DEFAULT_SCALE; 

    CGContextSetLineWidth(context, 5.0); 
    [[UIColor blueColor] setStroke]; 


    [self drawCircleAtPoint:midpoint withRadius:size inContext:context]; 
} 

@end 
+1

Vielleicht versuchen, den Code, den Sie verwendet haben, um den Kreis in der Ansicht an erster Stelle zu zeichnen (die, wo es automatisch den Kreis zeichnet) und verschieben Sie es in die IBAction-Methode? – David

Antwort

2

Mit dem, was Sie dort haben, wäre der einfachste Weg wahrscheinlich, Ihre Kreisansicht verborgen zu machen und sie zu zeigen, wenn Sie die Taste drücken.

Andernfalls können Sie ein BOOL in Ihrer Ansicht beibehalten, um anzuzeigen, ob die Schaltfläche angetippt wurde und überprüfen Sie dies während drawRect: (und verwenden Sie setNeedsDisplay, um Änderungen auszulösen).

Verwandte Themen