2012-12-03 134 views
0

這裏的iOS的阿爾法值是我的代碼:ImageView的失敗比較

#define kDeselected .3 
#define kSelected 1 

- (void) selectButton:(UIImageView*)iconView{ 
    [iconView setAlpha:kDeselected]; 
    if(iconView.alpha == kDeselected){ 
     [iconView setAlpha:kSelected]; 
    } 
    else if(iconView.alpha == kSelected){ 
     [iconView setAlpha:kDeselected]; 
    } 
} 

我是一個非常先進的程序員,但它是超越我,爲什麼正確的if語句,當我手動進去,並確保在此之前,如果陳述結果爲真,它仍然不會觸及它。

應該注意的是,當kDeselected = .5時,它完美地工作。當它是.3但是......它不喜歡我。

+0

檢查舍入錯誤。更好的辦法就是使用bool來檢查選擇,然後根據我們所處的狀態設置alpha,而不檢查alpha來確定狀態 – Ultrakorne

+0

嗯有趣。任何想法,爲什麼它與一個值而不是另一個工作?會因爲一些奇怪的舍入錯誤嗎? – barndog

回答

2

嘗試將const轉換爲float值,如#define kDeselected 0.3f

0

我想在iconView中alpha的存儲有一些有限的精度。它可能會返回0.3334。或在那裏。

在圖像編輯中,很少看到8位整數範圍外的alpha值。事實上,我不認爲我曾見過一個。

我試圖

for (int i = 0; i <100; i++) { 
     double myAlpha = 0.3 + i * 0.01; 
     self.view.alpha = myAlpha; 
     NSLog(@"myAlpha=%30.20f viewAlpha=%30.20f", myAlpha, self.view.alpha); 
    } 

,看到

myAlpha=  0.29999999999999998890 viewAlpha=  0.30000001192092895508 
myAlpha=  0.30999999999999999778 viewAlpha=  0.31000000238418579102 
myAlpha=  0.32000000000000000666 viewAlpha=  0.31999999284744262695 
myAlpha=  0.32999999999999996003 viewAlpha=  0.33000001311302185059 
myAlpha=  0.33999999999999996891 viewAlpha=  0.34000000357627868652 

所以期待阿爾法的返回值是以外的任何其他近似似乎有些癡心妄想!

0

您鑄造恆進一個類型時,這可能是由於編譯器問題

嘗試做

CGFloat deselectedValue = kDeselected; 

,看看它的值實際上是,儘量與工作:

- (void) selectButton:(UIImageView*)iconView{ 
    CGFloat deselectedValue = kDeselected; 
    [iconView setAlpha:deselectedValue]; 
    if(iconView.alpha == deselectedValue){ 
     [iconView setAlpha:deselectedValue]; 
    } 
    else if(iconView.alpha == kSelected){ 
     [iconView setAlpha:kDeselected]; 
    } 
} 

您的其他選擇是嘗試將.3定義爲#define kDeselected 0.3f,但是我懷疑如果.5可以工作,那麼它將會有所作爲