簡體   English   中英

以編程方式創建UIButton比使用storyboard模糊

[英]creating UIButton programmatically is blurry than using storyboard

我有兩個自定義UIButton具有相同的image.One是以編程方式創建的,這是模糊的,另一個是使用故事板工作正常。這是我的代碼

    - (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    UIButton *purchaseButton=[UIButton buttonWithType:UIButtonTypeCustom];
    purchaseButton=[UIButton buttonWithType:UIButtonTypeCustom];
    purchaseButton.frame=CGRectMake(0, 35.5+30, 177, 55);
    [purchaseButton setImage:[UIImage imageNamed:@"GouMai1.png"] forState:UIControlStateNormal];

    [self.view addSubview:purchaseButton];
}

這是項目下載鏈接 (因為GFW,我只能上傳到中文網站)。 這是一個Xcode錯誤嗎?

    purchaseButton.frame=CGRectMake(0, 35.5+30, 177, 55);

這是你的問題。 永遠不要給界面對象非整數坐標。 它會很模糊! - 你會注意到在Interface Builder(故事板)中你不能這樣做。

原因是在屏幕上有物理像素,並且沒有半像素這樣的東西:每個像素都是開啟或關閉的,就像它一樣。 因此,如果您使用半點坐標,它們無法准確匹配像素,系統將模糊匹配(抗鋸齒等)。

所以,擺脫.5 ,事情會好得多。

與@matt所說的相反,只要它是視網膜設備,你現在可以做.5。 你甚至可以擁有.5寬度和高度,這就是iOS 7在某些地方獲得非常細線的方式。

當我運行您的示例應用程序時,在Retina iPad模擬器中它不是模糊的(沒有比源圖像更模糊)。 但在非Retina iPad模擬器中它很模糊,這是因為幀中的.5。

您需要測試屏幕的比例[UIScreen mainScreen].scale並僅在比例大於1時添加.5。

另請注意,您正在使用該代碼創建兩個按鈕。 你可以刪除重復的行purchaseButton=[UIButton buttonWithType:UIButtonTypeCustom];

purchaseButton.frame=CGRectMake(0, 35.5+30, 177, 55);

其實

  • 屏幕將有像素,不會有半像素
  • 我們為UI Elements指定的坐標將是點。
  • 點到像素比率將取決於dpi和ppi。

IOS主要基於點和dpi渲染所有內容,因此嘗試使用半點會導致模糊。 (這就是為什么我們不能在坐標構建器中將坐標設置為點)

因此,不允許浮動強制它們導致模糊。 請使用最接近的整數值。

另一方面,由於將偶數除以奇數將主要給出浮點系數。 我們必須在動態執行計算時使用ceil和floor方法。

purchaseButton.frame=CGRectMake(0, ceil(self.view.fram.size.width/3), 177, 55);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM