我在 LayoutView 中绘制了 3 个正方形
- (void)drawRectCGRect)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)touchesBeganNSSet *)touches withEventUIEvent *)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”
但是如何更改 room1 的颜色呢?
此时我得到一个错误
:CGContextSetFillColorWithColor:无效上下文 0x0。这是一个严重的错误。 ...
感谢您的帮助。
Best Answer-推荐答案 strong>
实现此目的的一种方法是在 touchesBegan 方法中跟踪选定状态,并将所有 fill 和 setFill 语句保留在 drawRect 中。在下面的示例中,我在方 block 内每次触摸时切换选定状态,方 block 颜色在蓝色和红色之间交替。
@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)initWithCoderNSCoder *)aDecoder {
if (self = [super initWithCoder:aDecoder]) {
self.normalColor = [UIColor blueColor];
self.selectedColor = [UIColor redColor];
self.isSelected = NO;
}
return self;
}
- (void)drawRectCGRect)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)touchesBeganNSSet *)touches withEventUIEvent *)event {
CGPoint touchPoint = [touches.anyObject locationInView:self];
if ([self.room1 containsPoint:touchPoint]){
self.isSelected = ! self.isSelected;
[self setNeedsDisplay];
}
}
关于ios - 选择时更改 UIBezierPath 颜色,我们在Stack Overflow上找到一个类似的问题:
https://stackoverflow.com/questions/19353923/
|