[英]Scaling down a UIButton's background image when using initWithFrame:
這是我第一次設計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上。
所以我的主要問題是,當我改變幀大小時實際發生了什么? 由於框架現在小於實際圖像尺寸,圖像是否會自動縮小以適應框架內部?
是的,因為您正在使用backgroundImage
(而不是Image
),所以圖像會縮放。 兩個圖像都有不同的行為。
檢查Xcode Interface Builder ,你可以看到,你可以設置兩個圖像:圖像和背景。 背景是UIImage
,它被縮放為UIButton
的整個幀。
該的UIButton類參考允許您訪問imageView
中的image
(不是imageView
的中backgroundImage
)
因為您可以訪問imageView
,所以可以使用以下方法更改圖像的模式:
[[someButton imageView] setContentMode:UIViewContentModeBottomLeft];
在UIView類參考中,您可以檢查Apple提供的所有UIViewContentModes
。
您可以檢查更改一下您的代碼:
[someButton setImage:firstButtonImage forState:UIControlStateNormal];
[[someButton imageView] setContentMode:UIViewContentModeBottomRight];
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.