iOS Quartz Изменение цвета обводки - PullRequest
0 голосов
/ 24 марта 2012

Я новичок в iOS и делаю это как опыт обучения.Я получил большую часть этого кода из учебника и его работы, но я хотел добавить больше цветов обводки.Мой код начинается с обводки по умолчанию в UIColor greenColor, но у меня есть две кнопки, помеченные «Red» и «Blue», которые должны менять цвет обводки на Red или Blue при нажатии.Я хочу нажать на красный, затем начать рисовать и сделать этот штрих красным и т. Д., Как в MS Paint.Я подтвердил, что мои кнопки UIB правильно связаны.Спасибо за любую помощь, спасибо!

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

1 Ответ

0 голосов
/ 08 августа 2012

Глупая ошибка в каком-то другом коде.Исправлено сейчас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...