4

我想用多种颜色填充 UIView 背景。我想将它用作各种状态栏,因此如果完成了 1/2 必要步骤,则 UIView 背景将为 1/2 绿色和 1/2 红色。当用户完成更多步骤(例如 2/3)时,更多 UIView 背景变为绿色(在本例中为 2/3)。

我猜我需要覆盖

-(void) drawREct: (CGRect) rect

我想我会得到 UIView,弄清楚它有多大,然后将它分成 2 个矩形,然后填充这些矩形。

另一种选择是以编程方式添加 2 个 UIView,但我是 IB 的粉丝。

是否可以像我想要的那样划分 UIView?

谢谢

4

2 回答 2

10

这不是 IB 解决方案,但您可以继承 UIView 并覆盖该drawRect方法以添加自定义渐变。这将允许您放置您喜欢的任意数量的颜色,并让它们过渡或平滑过渡。网上有很多不错的教程,应该有不同的方法来做到这一点(一些更详细,一些非常简单)。

另一个相当简单的选项是覆盖drawRect,使背景变为红色,然后fill是一个占据视图下半部分的矩形。它不允许在颜色之间进行花哨或平滑的过渡,但它很容易实现。例如,这些方面的东西应该起作用:

-(void)drawRect:(CGRect)rect {
    CGRect upperRect = CGRectMake(rect.origin.x, rect.origin.y, rect.size.width, rect.size.height * percentDone);
    CGRect lowerRect = CGRectMake(rect.origin.x, rect.origin.y + (rect.size.height * percentDone), rect.size.width, rect.size.height *(1-percentDone));

    [[UIColor redColor] set]; 
    UIRectFill(upperRect);
    [[UIColor greenColor] set]; 
    UIRectFill(lowerRect);
}

percentDone是一个浮点数(声明,,,property(nonatomic)synthesize,您可以将其绑定到用户的步骤。然后只需在用户执行某些操作时更新视图

splitView.percentDone = .5;
[splitView setNeedsDisplay];

你也可以用动画来平滑它。

于 2011-06-16T16:46:04.903 回答
3

一种简单的方法是将背景视图的背景颜色设置为红色。然后将另一个视图添加到该背景视图并调用该指示器视图。调整指示器视图的大小和位置以覆盖背景,并将其背景颜色设置为绿色。将指示器视图连接到视图控制器中的插座,并让视图控制器根据手头任务的进度调整其宽度(或高度)。

另一种方法是@PengOne 建议:创建一个自定义视图,给它一个“进度”属性,然后覆盖 -drawRect: 以适当地绘制内容。如果你走这条路,没有什么可以阻止你获得一点创意。不要只填充两个矩形,而是让两种颜色之间的边界更有趣。您可以添加涟漪或气泡,它们具有适当的音效,看起来像是装满液体的容器。或者你可以做一个类似于 Qix的动画,慢慢填满屏幕...... ;-)

于 2011-06-16T20:24:43.947 回答