2011-11-14 48 views
2

這就是它的樣子。我想讓黑色背景變得清晰,看起來似乎無法理解。爲什麼我的「啓動幀」變黑? CGRect用initwithframe圓角繪圖

enter image description here

這裏是的loadView:

loadView { 
    CGRect frame = CGRectMake(screenWidth - OFFSET, DEFAULT_PADDING, 140, 40); 
    miniC* mcView = [ [ [miniC alloc] initWithFrame:frame] autorelease]; 
    mcView.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin; 
    [[self view] addSubview:mcView]; 
} 

這裏就是我的drawRect我稱之爲米尼奇:

- (void)drawRect:(CGRect)rect { 
    CGContextRef context = UIGraphicsGetCurrentContext(); 

    // Set Background Color & Border Color 
    CGColorRef bgColor = [UIColor scrollViewTexturedBackgroundColor].CGColor; 
    CGColorRef borderColor = [UIColor grayColor].CGColor; 

    CGRect Rect = self.bounds; 

    // Round Corners 
    roundCorners(context, Rect); 

    // Fill with bgcolor 
    fillBackgroundColor(context, Rect, bgColor); 

    // Add 1 px stroke 
    CGRect strokeRect = Rect; 
    strokeRect.size.height -= 1; 
    strokeRect = (strokeRect); 

    CGContextSetStrokeColorWithColor(context, borderColor); 
    CGContextSetLineWidth(context, 1.0); 
    CGContextStrokeRect(context, strokeRect); 


    // Overlay Rect to Tint "scrollViewTexturedBackgroundColor" UIColor 
    CGContextRef secondContext = UIGraphicsGetCurrentContext(); 

    // Set Background Color & Border Color 
    CGColorRef obgColor = [UIColor colorWithRed:255/255 green:255/255 blue:255/255 alpha:.3].CGColor; 

    // Round Corners 
    roundCorners(context, Rect); 

    // Fill with bgcolor 
    fillBackgroundColor(secondContext, Rect, obgColor); 

} 

的代碼繪製的圓框我正在尋找一箇中風,但是新的圓形b後面有一個黑框牛。我一直在嘗試一堆不同的東西,但似乎無法弄清楚如何使背景顏色清晰。此外,我知道我可以用QuartzCore做到這一點,但我不想。

P.S.我是objective-c的新手。

編輯:

空隙roundCorners(CGContextRef上下文中,的CGRect RECT){

CGContextClearRect(context, rect); 

CGFloat c = INSET + CORNER_RADIUS; 

CGContextMoveToPoint(context, INSET, c); 

CGContextAddArcToPoint(context, INSET, INSET, c, INSET, CORNER_RADIUS);  
CGContextAddLineToPoint(context, rect.size.width - c, INSET); 
CGContextAddArcToPoint(context, rect.size.width - INSET, INSET, rect.size.width - INSET, c, CORNER_RADIUS); 
CGContextAddLineToPoint(context, rect.size.width - INSET, rect.size.height - c); 
CGContextAddArcToPoint(context, rect.size.width - INSET, rect.size.height - INSET, rect.size.width - c, rect.size.height - 

INSET,CORNER_RADIUS); CGContextAddLineToPoint(context,c,rect.size.height - INSET);

CGContextAddArcToPoint(context, INSET, rect.size.height - INSET, INSET, rect.size.height > - c, CORNER_RADIUS); 

CGContextClosePath(context); 

CGContextClip(context); 

CGContextSetFillColorWithColor(context, [UIColor scrollViewTexturedBackgroundColor].CGColor); 
CGContextFillRect(context, CGRectMake(0, 0, rect.size.width - INSET, rect.size.height - INSET)); 

}

無效fillBackgroundColor(CGContextRef背景下,的CGRect RECT,CGColorRef BGCOLOR){

CGContextSetFillColorWithColor(context, bgColor); 
CGContextFillRect(context, CGRectMake(0, 0, rect.size.width, rect.size.height)); 

}

+0

您是否記得使視圖不透明? –

+0

絕對沒有。我在哪裏設置? – morcutt

+0

您可以將「mcView.opaque = NO」添加到您的loadView中,以確保正是如此。然後,如果這是唯一的問題,請將其移至Paul s的initWithFrame。爲你寫信。 –

回答

5

你需要設置你的UIView的背景顏色

例如

- (id)initWithFrame:(CGRect)frame 
{ 
    self = [super initWithFrame:frame]; 
    if (self) { 
     self.backgroundColor = [UIColor clearColor]; 
    } 
    return self; 
} 

一些其他的東西審議尤其是你說你的新的語言等

因爲你是在傳遞rect作爲方法的參數,所以你可以刪除這個這個作業CGRect Rect = self.bounds;是superflous。

對於變量名CGRect Rect在Objective-C中不是很好,因爲以大寫字母開頭的東西通常是常量,所以這可能會令人困惑,並在稍後導致一些問題。

這種分配strokeRect = (strokeRect);是superflous,這樣做的工作就好了它自己的strokeRect.size.height -= 1;

我可能是錯的,我沒有核心顯卡專家,但我假定這CGContextRef secondContext = UIGraphicsGetCurrentContext();將返回您之前有相同的背景。

+0

我已經在roundedCorners中調用過。 – morcutt

+0

小心顯示該方法? –

+0

是的,只是添加它。首先我應該有。 – morcutt

1

CGContextClearRect非常棘手。由於你的情況是空的,你不應該使用它,除非你必須。如果你使用它,重要的是你的視圖的backgroundColor不應該是100%不透明的顏色:它的alpha必須小於1。否則,它會畫黑色(如你所見)而不是透明。

你正在顯示太多的代碼,所以你只是困惑自己,讓那些想要幫助你的人生活困難。最好從一個非常簡單的東西開始,作爲概念驗證。下面是塗料本身使用CGContextClearRect裁剪圓矩形一個非常簡單的看法:

- (void) configure { 
    self.backgroundColor = [[UIColor redColor] colorWithAlphaComponent:.99]; 
} 

- (id)initWithFrame:(CGRect)frame 
{ 
    self = [super initWithFrame:frame]; 
    if (self) { 
     [self configure]; 
    } 
    return self; 
} 

- (id)initWithCoder:(NSCoder *)aDecoder 
{ 
    self = [super initWithCoder: aDecoder]; 
    if (self) { 
     [self configure]; 
    } 
    return self; 
} 

- (void) drawRect: (CGRect) rect { 
    CGContextRef con = UIGraphicsGetCurrentContext(); 
    CGPathRef p = [[UIBezierPath bezierPathWithRoundedRect:rect 
               cornerRadius:10] CGPath]; 
    CGContextAddRect(con, rect); 
    CGContextAddPath(con, p); 
    CGContextEOClip(con); 
    CGContextClearRect(con, rect); 
} 

結果是一個紅色的圓形,矩形。但是......在第一行中將.99更改爲1,並且視圖的角落變成黑色,就像在圖片中一樣!這顯示了在使用CGContextClearRect時非透明視圖背景顏色的重要性。 (我認爲這是一個錯誤,但那不是在這裏,也不是在那裏;這種方式已經很長時間了,我不希望事情發生變化。)