任何人都可以用正確的方式引導我以編程方式構建一個彩色的氣泡/圓圈嗎?在ObjectiveC和Cocoa中以編程方式創建一個彩色的氣泡/圓形
我無法使用圖像,因爲我需要它可以是任何顏色,具體取決於用戶交互。
我的想法可能是製作一個白色的圓形圖像,然後在其上覆蓋一個顏色。 但是我不確定這是否會起作用,或者如何真正解決它。
如果有人能指出我正確的方向,我將不勝感激。
任何人都可以用正確的方式引導我以編程方式構建一個彩色的氣泡/圓圈嗎?在ObjectiveC和Cocoa中以編程方式創建一個彩色的氣泡/圓形
我無法使用圖像,因爲我需要它可以是任何顏色,具體取決於用戶交互。
我的想法可能是製作一個白色的圓形圖像,然後在其上覆蓋一個顏色。 但是我不確定這是否會起作用,或者如何真正解決它。
如果有人能指出我正確的方向,我將不勝感激。
創建一個NSView子類,其中包含一個NSColor作爲ivar。在drawRect方法中,使用視圖的邊界創建適當大小的NSBezierPath。然後設置顏色[myColor set]
並填寫路徑[myPath fill]
。你可以做更多的事情,比如設置透明度,邊框等等,但是除非你有特定的問題,否則我會把它留給文檔。
要使用NSView子類,只需將視圖對象拖到您的筆尖上,然後在IB的檢查器中的自定義類中選擇您的子類的名稱。您還需要在控制器中設置一個插座,以便根據需要更改顏色。
從蘋果下載草圖。 http://developer.apple.com/library/mac/#samplecode/Sketch
它可以做更多,但其中的一件事是繪製圓圈。
有幾個步驟來繪製可可中的東西。
首先你需要一個路徑來定義你要繪製的對象。在這裏看看Drawing Fundamental Shapes關於在Cocoa中創建路徑的指南。您將最感興趣的是將「appendBezierPathWithOvalInRect」消息發送到「NSBezierPath」對象,這需要一個矩形來限定要繪製的圓。
此代碼將創建一個10×10圈在座標10,10:
NSRect rect = NSMakeRect(10, 10, 10, 10);
NSBezierPath* circlePath = [NSBezierPath bezierPath];
[circlePath appendBezierPathWithOvalInRect: rect];
一旦你有你的路,你要爲當前的繪圖背景的顏色。有兩種顏色,筆畫和填充;筆劃是路徑的輪廓,填充是內部顏色。要設置顏色,請將「set」發送到「NSColor」對象。
此設置筆觸爲黑色,填充爲紅色:
[[NSColor blackColor] setStroke];
[[NSColor redColor] setFill];
現在,你有你的路,你必須設置你的顏色正好填補了路徑,然後繪製它:
[path stroke];
[path fill];
所有這些都需要在圖形上下文中完成,就像在視圖的drawRect中一樣。所有這一切都與一個圖形上下文一起是這樣的:
- (void)drawRect:(NSRect)rect
{
// Get the graphics context that we are currently executing under
NSGraphicsContext* gc = [NSGraphicsContext currentContext];
// Save the current graphics context settings
[gc saveGraphicsState];
// Set the color in the current graphics context for future draw operations
[[NSColor blackColor] setStroke];
[[NSColor redColor] setFill];
// Create our circle path
NSRect rect = NSMakeRect(10, 10, 10, 10);
NSBezierPath* circlePath = [NSBezierPath bezierPath];
[circlePath appendBezierPathWithOvalInRect: rect];
// Outline and fill the path
[circlePath stroke];
[circlePath fill];
// Restore the context to what it was before we messed with it
[gc restoreGraphicsState];
}
在這個答案很多的語法似乎不準確。 NSRect或NSGraphicsContext是否存在? – 2011-11-09 11:32:10
@EricBrotto我建議您閱讀答案頂部的鏈接。 – joshperry 2011-11-09 14:29:05
CGContextRef c = UIGraphicsGetCurrentContext();
CGContextSetRGBFillColor(c, 40, 0, 255, 0.1);
CGContextSetRGBStrokeColor(c, 0, 40, 255, 0.5);
// Draw a green solid circle
CGContextSetRGBFillColor(c, 0, 255, 0, 1);
CGContextFillEllipseInRect(c, CGRectMake(100, 100, 25, 25));
您可以使用簡單的UIView
創建完美圈只有參數radius
:
// Add framework CoreGraphics.framework
#import <QuartzCore/QuartzCore.h>
-(UIView *)circleWithColor:(UIColor *)color radius:(int)radius {
UIView *circle = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 2 * radius, 2 * radius)];
circle.backgroundColor = color;
circle.layer.cornerRadius = radius;
circle.layer.masksToBounds = YES;
return circle;
}
看起來甚至有a:bezierPathWithOvalInRect:謝謝! – kdbdallas 2008-12-09 23:48:02
是的,如果我沒有記錯的話,那是Leopard中的新功能。在此之前,新手Cocoa程序員(包括我自己)必須做的第一件事之一是在NSBezierPath中定義一個類別來創建一個圓形或圓角矩形路徑。 :) – 2008-12-10 00:11:23