2012-12-10 72 views
1

我正在做一個遊戲,並且由於某種原因,邊框厚度根據按鈕的顏色而改變。直到我在應用程序上放置背景圖像時才發生這個問題,所以我不確定是什麼原因造成的。我拿了幾張截圖來展示我的意思。出於某種原因,當邊界按鈕爲藍色時,邊框厚度變爲2px而不是1px。爲什麼邊框厚度會隨着按鈕顏色(藍色獲得2px邊框)而改變?

另外,控制按鈕邊框也有一些問題。通過控制按鈕,我指的是頂部的6個按鈕,順序爲紅色,藍色,棕色,綠色,紫色和黃色。

下面是截圖:

Screenshot #1Screenshot #2

我通過把一個按鈕,其中開始於X-1的背景下,Y-1創建的邊界,並具有寬度+ 2和高度的寬度高度+2。下面是一段代碼給你一個想法:

UIButton *borderButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
borderButton.frame = CGRectMake((controlX-1), (controlY-1), 42, 32); 
borderButton.backgroundColor = [UIColor blackColor]; 
[self.view addSubview:borderButton]; 

UIButton *controlButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
[controlButton addTarget:self 
         action:@selector(doMove:) 
      forControlEvents:UIControlEventTouchDown]; 
controlButton.frame = CGRectMake(controlX, controlY, 40, 30); 
controlButton.tag = 500 + i; 
tmpColor = [self.colors objectAtIndex:i]; 
controlButton.backgroundColor = tmpColor; 
[self.view addSubview:controlButton]; 

此代碼是從一個循環,其中controlX和controlY給出了其中的控制按鈕應該開始x/y值取。

如果有人知道如何解決這個問題,我將不勝感激。如果我以錯誤的方式去解決邊界問題,並且實現相同外觀的方式更簡單,問題更少,那麼我也願意這樣做,因爲在我的最後不會有太多的代碼要改變。在此先感謝任何能夠幫助我解決這個惱人的UI故障的人。

回答

1

實現與邊境自定義按鈕的最簡單方法是使用按鈕的層:

#import <QuartzCore/QuartzCore.h> 
... 
UIButton *controlButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
[controlButton addTarget:self 
         action:@selector(doMove:) 
      forControlEvents:UIControlEventTouchDown]; 
controlButton.frame = CGRectMake(controlX, controlY, 40, 30); 
controlButton.tag = 500 + i; 

// Set layer properties 
controlButton.layer.borderWidth = 1.0; 
controlButton.layer.borderColor = [UIColor blackColor].CGColor; 
controlButton.layer.cornerRadius = 5.0; // if you want rounded corners... 

tmpColor = [self.colors objectAtIndex:i]; 
controlButton.backgroundColor = tmpColor; 
[self.view addSubview:controlButton]; 

您可能還需要檢查按鈕和其他元素(如標籤)位於積分座標,以避免模糊圖片。要更正座標,請使用CGRectIntegral

P.S.對於複雜的動畫/遊戲邏輯,最好使用如Cocos2D

+0

這樣的框架問題仍然存在,即邊框在按鈕上向外看。這是我實現你的代碼後的屏幕截圖:http://mdl.fm/f/b3.png你看藍色的那個看起來很奇怪嗎?紅色的也是,但藍色是最引人注目的。 iOS中的藍色按鈕邊框有固有的問題嗎?感謝您的建議,但您的回覆爲+1,因爲處理邊界的方式比我所做的要好得多。 – SISYN

+0

啊,我明白你的意思了。你可以玩borderWidth/cornerRadius(增加borderWidth?)。但最好的選擇是使用自定義背景圖像(或使用[可伸縮圖像](http://developer.apple.com/library/ios/documentation/uikit/reference/UIImage_Class/Reference/Reference.html#//apple_ref/) occ/instm/UIImage/resizableImageWithCapInsets :)) –

+0

感謝您的幫助,我隨身攜帶它,我發現最好的解決方案只是改變按鈕的顏色。我讓它們變得更輕一點,現在的問題幾乎沒有那麼明顯。 – SISYN