2011-02-12 72 views
1

我正在閱讀有關漸變的文檔,並且我有點迷失。 我有一個視圖,並且在該視圖中,我只想從一個矩形(小於視圖)中從底部到頂部繪製一個簡單的黑色到灰色線性漸變。 如何在沒有繼承任何東西的情況下做到這一點(我已經閱讀了很多需要將視圖繼承的東西)?在視圖內的矩形內繪製一個簡單的線性漸變

我正在尋找一種方法來做到這一點,就像我在各種平臺上做過的那樣簡單。 (語言免費:-)):

blackcolor = MakeBlack(); 
whiteColor = MakeWhite(); 

startPoint = MakeStartPoint(); 
endPoint = MakeEndPoint(); 

onthisgraphicport = SetGraphicPort(self.view); 
clippingRect = MakeClipRect(); 

DrawGradient(from:whiteColor, to:blackcolor, from:startPoint, to:endPoint, onthisgraphicport, intoThisRect:clippingRect); 

謝謝你的幫助。

+0

可能重複(http://stackoverflow.com/questions/422066/gradients-on-uiview-and-uilabels-on-iphone)。 @Mirko以很多選票查看答案。如果您希望它比視圖更小,則將漸變圖層的框架設置得更小(將漸變圖層視爲視圖的子視圖)。 – Anurag 2011-02-12 02:45:50

+0

@Auurag:不,第一個解決方案插入一個subLayer,我不想插入任何東西,只是...繪製...和第二個送禮者的解決方案行事爲drawRect,我不在那裏......我有一個切換到一個視圖裏面我想繪製一個漸變。 – Oliver 2011-02-12 18:16:54

回答

4

此代碼片段可能會有幫助。我前段時間在網上找到了代碼。不幸的是,我忘了網站,所以不知道誰給信用。

代碼是繪製白色到黑色漸變。只需改變矩形和顏色以滿足您的需求。 [上的UIView梯度和UILabels在iPhone]的

@interface MyView : UIView { 
    CGGradientRef _gradientRef; 
} 

@end 

@implementation MyView 

- (void) dealloc 
{ 
    [super dealloc]; 
} 

- (id) initWithFrame:(CGRect)frame { 
    if ((self = [super initWithFrame:frame])) { 
     CGColorSpaceRef rgb = CGColorSpaceCreateDeviceRGB(); 
     CGFloat colors[] = 
     { 
      1.0f, 1.0f, 1.0f, 1.0f, 
      0.0f, 0.0f, 0.0f, 1.0f, 
     }; 
     _gradientRef = CGGradientCreateWithColorComponents(rgb, colors, NULL, sizeof(colors)/(sizeof(colors[0]) * 4)); 
     CGColorSpaceRelease(rgb); 
    } 

    return self; 
} 

- (void) drawRect:(CGRect)rect { 
    CGContextRef context = UIGraphicsGetCurrentContext(); 
    CGPoint start = rect.origin; 
    start.y = 0; 
    CGPoint end = CGPointMake(rect.origin.x, rect.size.height); 
    CGContextDrawLinearGradient(context, _gradientRef, start, end, kCGGradientDrawsBeforeStartLocation | kCGGradientDrawsAfterEndLocation); 

    [super drawRect:rect]; 
} 

@end