为自定义UIView设置背景图像

26
我正在使用OpenGL开发绘画应用程序。 我正在使用“CUSTOM UIView”在屏幕上绘制,并使用另一个UIImageView将背景图像设置为它。 请查看截图以更清楚地了解它。 我的问题是我无法在任何视图上设置背景图像。 我必须使用不同的纹理作为画板来绘画。 有人能建议这种方法有什么错误吗?

Imagelink

我已经使用这段代码自定义UIView,但是没有成功...只显示了默认的白色背景..

- (id)initWithCoder:(NSCoder*)coder {
    UIColor *background = [[UIColor alloc] initWithPatternImage:[UIImage imageNamed:@"Rough_White_Paper_with_tape.png"]];
    self.backgroundColor = background;
    [background release];     
}

在将图像加载到自定义UIView后,我无法绘制/绘画任何内容。如果有人能告诉我原因,我将不胜感激。 - user863444
8个回答

38
NSURL *imgUrl=[[NSURL alloc] initWithString:@"http://img835.imageshack.us/img835/9794/screenshot20110802at345.png"];
NSData *imgData = [NSData dataWithContentsOfURL:imgUrl];
UIImage *img = [UIImage imageWithData:imgData];

imageView = [[UIImageView alloc] initWithImage:img];

[self addSubview:imageView ];
[self sendSubviewToBack:imageView ];

[imageView release]; [imgUrl release];

我应该将它用于自定义UIView还是UIImageView上(屏幕截图中显示了两个视图)? - user863444
1
@ram:当您拥有足够的声望时,编辑功能将变得可用。rsp1990:这是一种替代方法,它创建一个新的UIImageView,您可以将其插入到父视图中(因此,在具有绘图的自定义视图后面)。所有发布的答案都涉及相同的过程。如果您只是在UI设计器中放置UIImageView,则应该能够在那里设置图像。 - Tommy
我使用了-(id)initWithCoder:(NSCoder*)coder.. 我没有使用ViewDidLoad. :| - user863444
1
@Tommy:你能告诉我“绘图障碍”的问题吗?使用这段代码后,我无法绘制任何东西。 - user863444
你是否将新的UIImageView添加为自定义UIView的子视图,并且它的大小相同或更大?如果是这样,那么它可能只是覆盖在你的绘图内容上面,隐藏了任何事情正在发生的事实。尝试将其添加到视图控制器的self.view中。 - Tommy
显示剩余2条评论

29

使用这个

self.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"Default"]];

26
- (id)initWithCoder:(NSCoder *)coder {
    self = [super initWithCoder:coder];
    if (self) {
        UIColor *background = [[UIColor alloc] initWithPatternImage:[UIImage imageNamed:@"Rough_White_Paper_with_tape.png"]];
        self.backgroundColor = background;
        [background release];
    }
    return self;
}

你只需要添加 return self; 即可,对我来说这个方法运行得非常好...


这个可以工作,但只有在你使用原始图像时才有效;至少我的简短测试表明色调颜色没有被考虑进去。 - Johan

8

试试这个:

UIImageView *background = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"Rough_White_Paper_with_tape.png"]];
[self addSubview:background];
[self sendSubviewToBack:background];
[background release];

实际上,使用这种方法后,它会禁用我的屏幕绘画/绘图...我无法画任何东西..:( - user863444

3

试试这个:

 UIImageView *myImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed :@“abc.png"]];
 UIView *myUIView = [[UIImageView alloc] initWithFrame :CGRectMake(10,10,250,250)];
 myUIView = myImageView;

2

使用UIImageView设置背景不够优雅。 应该使用以下API:

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

1

这是在Swift 2中的代码

var background = UIImageView(image: UIImage(named: "image.jpg"))
self.addSubview(background)
self.sendSubviewToBack(background)

0

使用这个

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接