如何设置UIImage边界?

时间:2013-03-12 16:11:28

标签: ios objective-c uiimageview uiimage bounds

我在为UIImageView设置图片的正确位置时遇到了一些问题,我将其作为子视图添加到UIButton。我首先创建按钮并添加一些子图层:

UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
[button setFrame:bounds];
//add gradient background
CAGradientLayer *gradient = [CAGradientLayer layer];
gradient.frame = button.bounds;
gradient.colors = [NSArray arrayWithObjects:(id)[UIColor colorWithRed:.5 green:.5 blue:.5 alpha:1.0].CGColor, (id)[[UIColor blackColor] CGColor], nil];
[button.layer insertSublayer:gradient atIndex:0];

//set green background
CALayer *layer = [CALayer layer];
layer.frame = CGRectInset(button.bounds, 5, 5);
layer.backgroundColor = [UIColor colorWithRed:.55 green:.8 blue:.5 alpha:1.0].CGColor;
[button.layer insertSublayer:layer above:gradient];

然后我使用两种方法来设置图像。第一个(如果没有保存图像,我使用它)使用缩放为正确大小的图像资源,并且是应用程序包的一部分。我用以下代码设置了它:

UIImageView *v = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"profile.png"]];
[v setBounds:CGRectInset(button.bounds, 8, 8)];
[button addSubview:v];

当我使用通过相机拍摄的图像并保存到文件系统时,会出现问题。我使用以下代码将其设置为后台:

//path is an NSString set the the documents location of the image.
UIImageView *v = [[UIImageView alloc] initWithImage:[UIImage imageWithContentsOfFile:path]];
[v setBounds:CGRectInset(button.bounds, 8, 8)];
[v setContentMode:UIViewContentModeScaleToFill];
[button addSubview:v];

屏幕的输出现在显示图像偏移距离的位置:

example

我做错了什么?如何在父视图中正确缩放/调整图像?我试过简单地设置按钮图像,但没有出现(可能图像在子图层后面?)。

1 个答案:

答案 0 :(得分:0)

使用 - setFrame方法设置imageview的帧而不是bounds

[v setFrame:CGRectInset(button.bounds, 8, 8)];

因此代码成为

UIImageView *v = [[UIImageView alloc] initWithImage:[UIImage imageWithContentsOfFile:path]];
[v setFrame:CGRectInset(button.bounds, 8, 8)];
[v setContentMode:UIViewContentModeScaleToFill];
[button addSubview:v];