使用initWithFrame时缩小UIButton的背景图像:

时间:2014-04-09 20:46:41

标签: ios uiimageview uibutton uiimage contentmode

这是我第一次设计iOS应用,所以我想确保正确理解这种行为。

我在Photoshop中为导航栏设计了一个自定义栏按钮图标。我在Photoshop中保存的最终图像是102 x 45,是的,我发现这些尺寸比iOS 7设计指南中推荐的44x44大。

无论如何,我将我的图像放入资源文件夹,然后使用以下代码以编程方式设置条形按钮项:

UIImage* firstButtonImage = [UIImage imageNamed:@"loginbutton1"];

    CGRect frame = CGRectMake(0, 0, 102, 45);

    UIButton * someButton = [[UIButton alloc] initWithFrame:frame];
    [someButton setBackgroundImage:firstButtonImage forState:UIControlStateNormal];
    [someButton addTarget:self action:@selector(didTapLoginButton:)
         forControlEvents:UIControlEventTouchUpInside];

    self.rightBarButton = [[UIBarButtonItem alloc] initWithCustomView:someButton];

    self.navItem.rightBarButtonItem = self.rightBarButton;

如您所见,我将框架的宽度和高度设置为图像的确切大小。当我第一次运行应用程序时,我不喜欢这个图像,并认为它太大了。所以我在这个语句中更改了width和height参数:

CGRect frame = CGRectMake(0, 0, 70, 30);

现在iPhone屏幕上的图像看起来很完美。这是在iPhone 4s上。

所以我的主要问题是,当我改变帧大小时实际发生了什么?由于框架现在小于实际图像尺寸,图像是否会自动缩小以适应框架内部?

1 个答案:

答案 0 :(得分:3)

是的,因为您使用backgroundImage(而不是Image),图片会缩放。两张图片都有不同的行为。

检查 Xcode Interface Builder ,您可以看到,您可以设置两个图像:图像和背景。背景是为UIImage的整个帧缩放的UIButton

enter image description here

UIButton Class Reference可让您访问imageView的{​​{1}}(而不是image的{​​{1}}

由于您可以访问imageView,因此您可以使用以下方式更改图像模式:

backgroundImage

UIView Class Reference中,您可以查看Apple提供的所有imageView

您可以检查更改一下代码:

[[someButton imageView] setContentMode:UIViewContentModeBottomLeft];