2013-10-14 6 views
2

Обращаю 3 квадрата в - LayoutViewИзменение UIBezierPath цвета при выборе

- (void)drawRect:(CGRect)rect 

    self.room1 = [UIBezierPath bezierPathWithRect:CGRectMake(81, 10, 60, 60)]; 
    [self.normalColor setFill]; 
    [self.room1 fill]; 
    [[UIColor blackColor]setStroke]; 
    self.room1.lineWidth = 1; 
    [self.room1 stroke]; 

я найти правильный UIBezierPath с

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    NSLog(@"touch here"); 

    UITouch *touch = [touches anyObject]; 
    CGPoint touchPoint = [touch locationInView:self]; 
    if ([self.room1 containsPoint:touchPoint]) 
    { 
     // do stuff 
     NSLog(@"room1 %@" , self.room1); 

     [[UIColor redColor] setFill]; 
     [self.room1 fill]; 
     [self setNeedsDisplay]; 
    } 
} 

это работает я касаюсь номера 1 и журнала печати «room1 "

Но как изменить цвет комнаты1?

На данный момент я получаю сообщение об ошибке

: CGContextSetFillColorWithColor: недопустимый контекст 0x0. Это серьезная ошибка. ...

благодарит за вашу помощь.

ответ

4

Одним из способов достижения этого является отслеживание выбранного состояния в методе touchhesBegan и сохранение всех инструкций fill и setFill внутри drawRect. В следующем примере я переключаю выбранное состояние с каждым касанием внутри квадрата, который чередует цвет между синим и красным.

@interface RDView() 
@property (strong,nonatomic) UIBezierPath *room1; 
@property (strong,nonatomic) UIColor *normalColor; 
@property (strong,nonatomic) UIColor *selectedColor; 
@property (nonatomic) BOOL isSelected; 
@end 

@implementation RDView 

-(id)initWithCoder:(NSCoder *)aDecoder { 
    if (self = [super initWithCoder:aDecoder]) { 
     self.normalColor = [UIColor blueColor]; 
     self.selectedColor = [UIColor redColor]; 
     self.isSelected = NO; 
    } 
    return self; 
} 

- (void)drawRect:(CGRect)rect { 

    self.room1 = [UIBezierPath bezierPathWithRect:CGRectMake(81, 10, 60, 60)]; 
    UIColor *colorToUse = (self.isSelected)? self.selectedColor : self.normalColor; 
    [colorToUse setFill]; 
    [self.room1 fill]; 
    [[UIColor blackColor]setStroke]; 
    self.room1.lineWidth = 1; 
    [self.room1 stroke]; 
} 


- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 
    CGPoint touchPoint = [touches.anyObject locationInView:self]; 
    if ([self.room1 containsPoint:touchPoint]){ 
     self.isSelected = ! self.isSelected; 
     [self setNeedsDisplay]; 
    } 
} 
+0

большое спасибо за вашу помощь. – HernandoZ

+0

Это изменит цвет всего пути? Что делать, если я хочу иметь несколько цветов в одном безье – Nil

Смежные вопросы