我将如何更改 CPPickerView(一个简单的 UIPickerView 替换)以使用清晰的背景而不是图像?
Posted
技术标签:
【中文标题】我将如何更改 CPPickerView(一个简单的 UIPickerView 替换)以使用清晰的背景而不是图像?【英文标题】:How would I go about changing CPPickerView (a simple UIPickerView replacement) to use a clear background instead of an image? 【发布时间】:2013-10-12 20:53:58 【问题描述】:现在,CPPickerView 使用图像作为背景,如它的 drawRect 方法所示:
- (void)drawRect:(CGRect)rect
// Draw background
[self.backgroundImage drawInRect:self.bounds];
// Draw super/UIScrollView
[super drawRect:rect];
// Draw shadow
[self.shadowImage drawInRect:self.bounds];
// Draw glass
if (self.showGlass)
[self.glassImage drawInRect:CGRectMake(self.frame.size.width / 2 - 30, 0.0, 60, self.frame.size.height)];
我希望我的 CPPickerView 与它背后的视图具有相同的颜色,但我似乎无法弄清楚如何做到这一点。我在drawRect中尝试了以下代码无济于事(它只会在背景中产生白色条纹):
- (void)drawRect:(CGRect)rect
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextClearRect(context, rect);
CGContextSetStrokeColorWithColor(context, [UIColor whiteColor].CGColor);
CGContextSetLineWidth(context, 5.0);
CGContextMoveToPoint(context, 100.0,0.0);
CGContextAddLineToPoint(context,100.0, 100.0);
CGContextStrokePath(context);
我该如何说清楚?
【问题讨论】:
【参考方案1】:正如GitHub 页面上所说:
要自定义外观,请将以下图片替换为您自己的:
wheelBackground.png stretchableGlass.png shadowOverlay.png【讨论】:
【参考方案2】:这里是 CPPickerView 的创建者 - 问题是您一直使用的 CPPickerView 版本无法不绘制这些图像。如果您只是将图像排除在我们的项目之外,我相信它也会为它们绘制一个黑框,这显然不是您想要的。
要解决这个问题,您可以为 wheelBackground.png
和 shadowOverlay.png
创建清晰的图像并关闭玻璃 (picker.showGlass = NO
)。
不过,我也刚刚将 CPPickerView 更新到了 1.1.0 版。此更新将backgroundImage
、glassImage
和shadowImage
公开为公共属性,因此在创建CPPickerView 后,您可以简单地将它们设置为nil
,并且根本不会绘制图像:
CPPickerView *picker = [[CPPickerView alloc] initWithFrame:yourFrame];
picker.backgroundImage = nil;
picker.shadowImage = nil;
picker.glassImage = nil;
默认情况下,CPPickerView 仍会查找命名图像(为了向后兼容),因此如果您不想绘制它们,则需要明确将它们设置为 nil
。
希望这会有所帮助!
【讨论】:
以上是关于我将如何更改 CPPickerView(一个简单的 UIPickerView 替换)以使用清晰的背景而不是图像?的主要内容,如果未能解决你的问题,请参考以下文章