2013-08-02 32 views
0

我編寫了一個簡單的紅色漸變的按鈕背景,當高度小於100時工作,但如果按鈕大於這一點,我不明白爲什麼。我正在使用PaintCode(直到現在像魅力一樣)繪製代碼,然後我將梯度的大小從[UIBezierPath bezierPathWithRoundedRect: CGRectMake(0, 0, 240, 120) cornerRadius: 4];更改爲[UIBezierPath bezierPathWithRoundedRect: CGRectMake(0, 0, self.frame.size.width, self.frame.size.height) cornerRadius: 4];,因爲按鈕的大小在4.5「和5」設備之間變化。我正在使用其他梯度與相同的代碼減去其他按鈕上的顏色,他們工作得很好。只有當身高超過100分時,我才發現問題。任何想法有什麼不對?核心圖形不會加載某些按鈕的所有方式

這裏是我正在使用的代碼:

//// General Declarations 
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); 
CGContextRef context = UIGraphicsGetCurrentContext(); 

//// Color Declarations 
UIColor* lightRedColor = [UIColor colorWithRed: 1 green: 0.188 blue: 0.098 alpha: 1]; 
UIColor* darkRedColor = [UIColor colorWithRed: 0.812 green: 0.016 blue: 0.016 alpha: 1]; 

//// Gradient Declarations 
NSArray* redGradientColors = [NSArray arrayWithObjects: 
           (id)lightRedColor.CGColor, 
           (id)[UIColor colorWithRed: 0.906 green: 0.102 blue: 0.057 alpha: 1].CGColor, 
           (id)darkRedColor.CGColor, nil]; 
CGFloat redGradientLocations[] = {0, 0.5, 1}; 
CGGradientRef redGradient = CGGradientCreateWithColors(colorSpace, (__bridge CFArrayRef)redGradientColors, redGradientLocations); 

//// Rounded Rectangle Drawing 
UIBezierPath* roundedRectanglePath = [UIBezierPath bezierPathWithRoundedRect: CGRectMake(0, 0, self.frame.size.width, self.frame.size.height) cornerRadius: 4]; 
CGContextSaveGState(context); 
[roundedRectanglePath addClip]; 
CGContextDrawLinearGradient(context, redGradient, CGPointMake(120, 0), CGPointMake(120, 120), 0); 
CGContextRestoreGState(context); 


//// Cleanup 
CGGradientRelease(redGradient); 
CGColorSpaceRelease(colorSpace); 

編輯:這裏是按鈕的截圖:

+0

你有屏幕截圖嗎?還有其他意見可以覆蓋按鈕嗎? – Wain

+0

我剛剛上傳了截圖 - 謝謝你。此外,沒有其他意見可以覆蓋它。 –

+0

爲按鈕和其超級視圖添加邊框,以便100%可以看到它們的位置(如果需要,可以遞歸地將其用於所有視圖)。 – Wain

回答

1

CGContextDrawLinearGradient(context, redGradient, CGPointMake(120, 0), CGPointMake(120, 120), 0);

在這裏檢查是否指定了梯度區域的高度來繪製,其中的Y = 120的終點。這意味着無論上面的代碼如何,您的漸變都將達到120點。改變終點爲CGPointMake(120, self.bounds.size.height),你應該沒問題。

0

它看起來像這個問題是[roundedRectanglePath addClip];。具體而言,剪貼路徑已在代碼中的其他位置的當前圖形上下文中指定,並且在應該是(未調用CGContextRestoreGState)時未被刪除,或者設置爲比應該更小的尺寸。

檢查已添加且未刪除的剪切路徑。同時檢查設置爲剪輯子視圖的超級視圖,其大小不正確。

相關問題