2012-03-23 9 views
0

Ich bin neu in iOS und mache dies als Lernerfahrung. Ich habe den Großteil dieses Codes von einem Tutorial erhalten und es funktioniert, aber ich wollte mehr Strichfarben hinzufügen. Mein Code beginnt mit einem Standardstrich in UIColor greenColor, aber ich habe zwei Schaltflächen mit den Bezeichnungen "Rot" und "Blau", die die Strichfarbe beim Drücken auf Rot oder Blau ändern sollten. Ich möchte Rot drücken, dann mit dem Zeichnen beginnen und diesen Strich wie in MS Paint rot erscheinen lassen. Ich habe bestätigt, dass meine UIButtons korrekt verbunden sind. Jede Hilfe wird geschätzt, danke!iOS Quartz Ändern Strichfarbe

DrawView.h:

#import <UIKit/UIKit.h> 
@interface DrawView : UIImageView 
- (void)changeOption:(NSString *)withOption; 
@end 

DrawView.m:

#import "DrawView.h" 
@interface DrawView() 
@property (nonatomic) BOOL fingerMoved; 
@property (nonatomic) CGPoint lastPoint; 
@end 

@implementation DrawView 

CGFloat red = 0.0, green = 0.0, blue = 0.0, width = 5.0; 
@synthesize fingerMoved = _fingerMoved; 
@synthesize lastPoint = _lastPoint; 

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

- (void)changeOption:(NSString *)withOption 
{ 
    if ([withOption isEqualToString:@"Black"]) { 
     red = 0.0; green = 0.0; blue = 0.0; width = 5.0; 
    }else if ([withOption isEqualToString:@"Red"]) { 
     red = 1.0; green = 0.0; blue = 0.0; width = 5.0; 
    }else if ([withOption isEqualToString:@"Blue"]) { 
     red = 0.0; green = 0.0; blue = 1.0; width = 5.0; 
    }else if ([withOption isEqualToString:@"Green"]) { 
     red = 0.0; green = 1.0; blue = 0.0; width = 5.0; 
    }else if ([withOption isEqualToString:@"Brown"]) { 
     red = 0.4; green = 0.0; blue = 0.0; width = 5.0; 
    }else if ([withOption isEqualToString:@"Orange"]) { 
     red = 1.0; green = 0.6; blue = 0.0; width = 5.0; 
    }else if ([withOption isEqualToString:@"Yellow"]) { 
     red = 1.0; green = 1.0; blue = 0.0; width = 5.0; 
    }else if ([withOption isEqualToString:@"Purple"]) { 
     red = 0.5; green = 0.0; blue = 1.0; width = 5.0; 
    }else if ([withOption isEqualToString:@"Eraser"]) { 
     red = 1.0; green = 1.0; blue = 1.0; width = 13.0; 
    }else if ([withOption isEqualToString:@"Clear"]) { 
     self.image = nil; 
    } 
} 

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    self.fingerMoved = NO; 
    UITouch *touch = [touches anyObject]; 
    if ([touch tapCount] == 2) { 
     self.image = nil; 
     return; 
    } 

    self.lastPoint = [touch locationInView:self]; 
    self.lastPoint = CGPointMake(self.lastPoint.x, self.lastPoint.y - 20); 
} 

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    self.fingerMoved = YES; 
    UITouch *touch = [touches anyObject]; 
    CGPoint currentPoint = [touch locationInView:self]; 
    currentPoint.y -= 20; 

    UIGraphicsBeginImageContext(self.frame.size); 
    [self.image drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)]; 
    CGContextSetLineCap(UIGraphicsGetCurrentContext(), kCGLineCapRound); 
    CGContextSetLineWidth(UIGraphicsGetCurrentContext(), width); 
    CGContextSetRGBStrokeColor(UIGraphicsGetCurrentContext(), red, green, blue, 1.0); 
    CGContextMoveToPoint(UIGraphicsGetCurrentContext(), self.lastPoint.x, self.lastPoint.y); 
    CGContextAddLineToPoint(UIGraphicsGetCurrentContext(), currentPoint.x, currentPoint.y); 
    CGContextStrokePath(UIGraphicsGetCurrentContext()); 
    self.image = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 
    self.lastPoint = currentPoint; 
} 

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    UITouch *touch = [touches anyObject]; 
    if ([touch tapCount] == 2) { 
     self.image = nil; 
     return; 
    } 

    if (!self.fingerMoved) { 
     UIGraphicsBeginImageContext(self.frame.size); 
     [self.image drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)]; 
     CGContextSetLineCap(UIGraphicsGetCurrentContext(), kCGLineCapRound); 
     CGContextSetLineWidth(UIGraphicsGetCurrentContext(), width); 
     CGContextSetRGBStrokeColor(UIGraphicsGetCurrentContext(), red, green, blue, 1.0); 
     CGContextMoveToPoint(UIGraphicsGetCurrentContext(), self.lastPoint.x, self.lastPoint.y); 
     CGContextAddLineToPoint(UIGraphicsGetCurrentContext(), self.lastPoint.x, self.lastPoint.y); 
     CGContextStrokePath(UIGraphicsGetCurrentContext()); 
     self.image = UIGraphicsGetImageFromCurrentImageContext(); 
     UIGraphicsEndImageContext(); 
    } 
} 

/* 
// Only override drawRect: if you perform custom drawing. 
// An empty implementation adversely affects performance during animation. 
- (void)drawRect:(CGRect)rect 
{ 
    // Drawing code 
} 
*/ 

@end 
+0

Die Einstellung der Strichfarbe Teil sieht für mich richtig aus. Nur um zu bestätigen, gerade wenn du es zeichnest, zieht es nur Grün an? –

+0

Die Methode 'choiceColor' wird mit einem Farbnamen als' NSString' aufgerufen. Sind Sie sicher, dass die Methode mit einem gültigen Farbnamen aufgerufen wird? – FluffulousChimp

+0

Das sieht ziemlich gut aus, bitte poste den Code, den deine Buttons aufrufen, damit wir das überprüfen können. – lnafziger

Antwort

-1

Dumme Fehler in einem anderen Code. Jetzt behoben.