2014-04-09 39 views
3

這是我第一次設計iOS應用程序,所以我想確保我正確理解此行爲。使用initWithFrame時縮小UIButton的背景圖片:

我在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上。

所以我的主要問題是,當我改變幀大小時,實際發生了什麼?由於該幀現在小於實際圖像尺寸,圖像是否會自動縮小以適應幀內部?

+0

我希望我的回答可以幫助你。 –

回答

3

是的圖像縮放,因爲你使用backgroundImage(不是Image)。兩張圖片都有不同的行爲。

檢查Xcode接口生成器,你可以看到那裏,你可以設置兩個圖像:圖像和背景。背景是對UIButton的整個幀進行縮放的UIImage

enter image description here

UIButton Class Reference允許您訪問imageimageView(沒有的imageViewbackgroundImage

因爲你有機會獲得imageView,你可以改變圖像的方式:

[[someButton imageView] setContentMode:UIViewContentModeBottomLeft]; 

UIView Class Reference,您可以檢查所有UIViewContentModes由Apple提供。

您可以檢查,改變一點點代碼:

[someButton setImage:firstButtonImage forState:UIControlStateNormal]; 
[[someButton imageView] setContentMode:UIViewContentModeBottomRight]; 
+1

謝謝你的詳細解答Gabriel。 – user3344977