1

我有一个带有 UIVIewcontroller 的情节提要场景。在这个场景中,我有一个 UIImageview,其中包含背景图像、一个 UIButton 和一个 UIView。

这个 UIView 有一个覆盖的 drawRect 方法:

- (void)drawRect:(CGRect)rect
{
    [super drawRect:rect];
    [self setNeedsDisplay];


    CGFloat height = self.bounds.size.height;
    CGContextRef context = UIGraphicsGetCurrentContext();

    CGContextClearRect(context, rect);
    CGContextSetFillColorWithColor(context, [UIColor grayColor].CGColor);
    CGFloat barWidth = 30;
    int count = 0;
    NSArray *values = [NSArray arrayWithObjects:@1, @0.5, nil];
    for (NSNumber *num in values) {
        CGFloat x = count * (barWidth + 10);
        CGRect barRect = CGRectMake(x, height - ([num floatValue] * height), barWidth, [num floatValue] * height);
        CGContextAddRect(context, barRect);
        count++;
    }
    CGContextFillPath(context);

}

我的问题是:如何将图像设置为我的自定义 UIView 的背景并在其上绘制矩形?

问候

4

2 回答 2

5

假设您将 UIView 子类命名为 MyCustomView。从界面构建器(xib 或故事板)添加 UIView 时,您必须明确将界面构建器的 UIView 的自定义类设置为 MyCustomView (如在此答案中)。

另一个可能出现的问题是视图的顺序。哪一个在上面?

从代码中添加自定义视图是另一种方法。

您的绘图代码似乎没问题。这是我drawRect在背景中绘制图像的代码(我稍微调整了一下):

- (void)drawRect:(CGRect)rect
{
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextClearRect(context, rect);

    // here I draw an image BEFORE drawing the rectangles
    UIImage* img = [UIImage imageNamed:@"img.jpg"];
    [img drawInRect:rect];

    CGFloat height = self.bounds.size.height;
    CGFloat barWidth = 30;

    CGContextSetFillColorWithColor(context, [[UIColor grayColor] CGColor]);

    int count = 0;
    NSArray *values = [NSArray arrayWithObjects:@1, @0.5, nil];
    for (NSNumber *num in values) {
        CGFloat x = count * (barWidth + 10);
        CGRect barRect = CGRectMake(x, height - ([num floatValue] * height), barWidth, [num floatValue] * height);

        // drawing rectangles OVER the image
        CGContextFillRect(context, barRect);
        count++;
    }
}
于 2013-08-11T12:27:25.600 回答
0

这是为您的自定义设置背景图像UIView(放入内部drawRect:方法):

 self.backgroundColor = [[UIColor alloc] initWithPatternImage:[UIImage imageNamed:@"someimage.png"]];

如果您想将子视图添加到 custom UIView,您可以直接在情节提要上执行此操作,或者以addSubview编程方式使用方法:

UIView *v = [[UIView alloc]initWithFrame:CGRectMake(x,y,w,h)];//change x,y,w,h to meet yours
[self.myCustomView addSubview:v];

当然,addSubview将处理所有UIView子类,因此您可以添加UIImageView,UIScrollView等。

于 2013-08-10T14:21:42.607 回答