- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个 UIButton
子类,我正在使用 drawRect:
绘制边框。选择按钮后,我希望更改背景颜色并删除边框。 (手动绘制边框,因为有时我只需要在一侧画一个边框)
出于某种原因,当我使用 CGContextClearRect
删除已经绘制的边框时,我得到的是黑色背景,而不是我设置的颜色:
- (void)setSelected:(BOOL)selected {
[super setSelected:selected];
if (selected) {
self.allOff = YES;
self.backgroundColor = self.selectedColor;
[self setTitleColor:[UIColor whiteColor] forState:UIControlStateSelected];
} else {
self.allOff = NO;
self.backgroundColor = self.defaultColor;
[self setTitleColor:[OTAColors colorWithRed:163 green:163 blue:163] forState:UIControlStateNormal];
}
}
- (void)_setup {
self.opaque = NO;
self.defaultColor = [[UIColor whiteColor] colorWithAlphaComponent:0.99];
self.selectedColor = [[OTAColors colorWithRed:33 green:59 blue:70] colorWithAlphaComponent:0.99];
self.backgroundColor = self.defaultColor;
[self setTitleColor:[OTAColors colorWithRed:163 green:163 blue:163] forState:UIControlStateNormal];
self.titleLabel.font = [UIFont fontWithName:OTAFontPFDinTextCondProMedium size:20];
self.titleLabel.textAlignment = NSTextAlignmentCenter;
}
- (void)drawRect:(CGRect)rect {
CGFloat borderWidth = 0.7f;
CGContextRef ctx = UIGraphicsGetCurrentContext();
CGContextSetLineWidth(ctx, borderWidth);
UIColor *borderColor = self.borderColor ? self.borderColor : [UIColor blackColor];
CGContextSetStrokeColorWithColor(ctx, borderColor.CGColor);
if (!self.allOff) {
// Left
if (self.left) {
CGContextMoveToPoint(ctx, 0, 0);
CGContextAddLineToPoint(ctx, 0,rect.size.height);
CGContextStrokePath(ctx);
}
// Right
if (self.right) {
CGContextMoveToPoint(ctx, rect.size.width, 0);
CGContextAddLineToPoint(ctx, rect.size.width,rect.size.height);
CGContextStrokePath(ctx);
}
// Top
if (self.top) {
CGContextMoveToPoint(ctx, 0, 0);
CGContextAddLineToPoint(ctx, rect.size.width,0);
CGContextStrokePath(ctx);
}
// Bottom
if (self.bottom) {
CGContextMoveToPoint(ctx, 0, rect.size.height);
CGContextAddLineToPoint(ctx, rect.size.width,rect.size.height);
CGContextStrokePath(ctx);
}
} else {
CGContextClearRect(ctx, rect);
}
}
知道为什么会发生这种情况吗? CGContextClearRect
似乎是导致此问题的原因。
最佳答案
调用 clear rect 会清除所有内容,因此它会恢复为默认的黑色内容。相反,您应该先用背景色填充矩形,然后再为边框绘制适当的线条。
关于ios - CGContextClearRect 导致背景颜色为黑色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28448790/
我在下面的 CGContextClearRect(c, self.view.bounds) 行上收到错误 EXC_BAD_ACCESS。我似乎不明白为什么。这是在 UIViewController 类
我有一个 UIButton 子类,我正在使用 drawRect: 绘制边框。选择按钮后,我希望更改背景颜色并删除边框。 (手动绘制边框,因为有时我只需要在一侧画一个边框) 出于某种原因,当我使用 CG
我正在创建一个应用程序,我试图在其中清除 UIImageView 的 rect。我已经用 CGContextClearRect 实现了这个,但问题是它正在清除方形的 rect 而我想在圆形中实现这个效
我在 MyView 的 drawRect 中使用 CGContextClearRect 方法将 MyView 清除为背景色。但是,我必须在代码中明确设置 MyView 的背景颜色 alpha 值。如果
我使用了这段代码,它部分有效,但图像裁剪不正确 output seen like this -(void)touchesMoved:(NSSet *)touches withEvent:(UIEven
我是一名优秀的程序员,十分优秀!