3

这是我第一次设计 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;

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

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

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

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

4

1 回答 1

3

是的,因为您使用的是backgroundImage(不是Image),所以图像会被缩放。两个图像具有不同的行为。

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

在此处输入图像描述

UIButton 类参考允许您访问imageView(而image不是imageViewbackgroundImage

因为您可以访问 ,所以可以使用以下命令imageView更改图像的模式:

[[someButton imageView] setContentMode:UIViewContentModeBottomLeft];

UIView Class Reference中,您可以查看UIViewContentModesApple 提供的所有内容。

您可以检查一下您的代码是否有所更改:

[someButton setImage:firstButtonImage forState:UIControlStateNormal];
[[someButton imageView] setContentMode:UIViewContentModeBottomRight];
于 2014-04-09T22:21:53.837 回答