2013-10-14 69 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]; 

然後我找到

- (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]; 
    } 
} 

這個正確的UIBezierPath正在我摸室1和日誌打印「會議室1 「

但是,如何更改room1的顏色?

目前,我得到一個錯誤

:CGContextSetFillColorWithColor:無效的上下文爲0x0。這是一個嚴重的錯誤。 ...

感謝您的幫助。

回答

4

完成此操作的一種方法是跟蹤touchesBegan方法中的選定狀態,並將drawRect中的所有fill和setFill語句保留。在下面的例子中,我使用方格內的每次觸摸來切換選中的狀態,使藍色和紅色之間的顏色交替變化。

@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