天天看點

【Cocoa(mac) Application 開發系列之三】自定義NSView并繪制一些常見的圖形及字元串

不多說,比較簡單,直接給出源碼,大家作為參考吧。

對于Cocoa application 話說回來比較easy,如果之前你接觸過iOS 的IB的話 ,基本上沒什麼可說的,上手很快;

是以對于Cocoa Application 不會太快的更新,接着Himi将對之前做的動編徹底的更新一版;後期有時間将繼續更新此系列;

<a href="http://blog.51cto.com/xiaominghimi/969974#">?</a>

1

<code>言歸正傳,對于自定義NSView上一篇已經介紹了,而且本篇主要繼續深入NSView的drawRect進行繼續研究,示例代碼如下,比較容易了解,而且都已備注的很清楚;</code>

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

<code>//</code>

<code>//  HView.m</code>

<code>//  Created by Himi on 12-6-7.</code>

<code>//  Copyright (c) 2012年 Himi. All rights reserved.</code>

<code>#import "HView.h"</code>

<code>@implementation HView</code>

<code>- (id)initWithFrame:(NSRect)frame</code>

<code>{</code>

<code>    </code><code>self = [super initWithFrame:frame];</code>

<code>    </code><code>if</code> <code>(self) {</code>

<code>        </code><code>// Initialization code here.</code>

<code>    </code><code>}</code>

<code>    </code><code>return</code> <code>self;</code>

<code>}</code>

<code>- (</code><code>void</code><code>)drawRect:(NSRect)dirtyRect</code>

<code>    </code><code>//-----------擷取整個MyView尺寸------------</code>

<code>    </code><code>NSRect screen = [self bounds];</code>

<code>    </code><code>int</code> <code>SW = screen.size.width;</code>

<code>    </code><code>int</code> <code>SH = screen.size.height;</code>

<code>    </code><code>//-----------設定整個MyView的顔色------------</code>

<code>    </code><code>[[NSColor grayColor] set];</code>

<code>    </code><code>//-----------填充整個MyView---------------</code>

<code>    </code><code>NSRectFill(screen);</code>

<code>    </code><code>//-----------繪制字元串---------------</code>

<code>    </code><code>NSString * strH= @</code><code>"基礎繪制   --By Himi"</code><code>;</code>

<code>    </code><code>//--繪制不帶屬性字元串</code>

<code>    </code><code>[strH drawAtPoint:NSMakePoint(SH*0.5, SH-30) withAttributes:NULL];</code>

40

41

42

43

44

45

46

47

<code>    </code><code>//--繪制帶屬性字元串</code>

<code>    </code><code>NSMutableDictionary *md = [NSMutableDictionary dictionary];</code>

<code>    </code><code>[md setObject:[NSFont fontWithName:@</code><code>"Times"</code> <code>size:20] forKey:NSFontAttributeName];</code>

<code>    </code><code>[strH drawAtPoint:NSMakePoint(SH*0.5, SH-70) withAttributes:md];</code>

<code>    </code><code>//--------繪制矩形----</code>

<code>    </code><code>NSRect rect1 = NSMakeRect(SH*0.5, SH-100, 30, 20);</code>

<code>    </code><code>NSRect rect2 = NSMakeRect(SH*0.5, SH-130, 30, 20);</code>

<code>    </code><code>//填充矩形</code>

<code>    </code><code>[NSBezierPath fillRect:rect1];</code>

<code>    </code><code>//繪制矩形</code>

<code>    </code><code>[NSBezierPath strokeRect:rect2];</code>

<code>    </code><code>//--------繪制線條(十字線)----</code>

<code>    </code><code>[[NSColor greenColor] set];</code>

<code>    </code><code>NSPoint  bm =NSMakePoint(SW*0.5, 0);</code>

<code>    </code><code>NSPoint  top =NSMakePoint(SW*0.5, SH);</code>

<code>    </code><code>NSPoint  lf =NSMakePoint(0, SH*0.5);</code>

<code>    </code><code>NSPoint  rt =NSMakePoint(SW, SH*0.5);</code>

<code>    </code><code>[NSBezierPath strokeLineFromPoint:bm toPoint:top];</code>

<code>    </code><code>[NSBezierPath strokeLineFromPoint:lf toPoint:rt];</code>

<code>    </code><code>//-------繪制橢圓</code>

<code>    </code><code>[[NSColor redColor] set];</code>

<code>    </code><code>[[NSBezierPath bezierPathWithOvalInRect:screen] stroke];</code>

<code>    </code><code>[self setNeedsDisplay:YES];</code><code>// 強制繪畫</code>

<code>//【備注】</code>

<code>//    CGContextRef ref = [[NSGraphicsContext currentContext] graphicsPort];// 擷取畫布</code>

<code>//    CGContextFlush(ref);//重新整理畫布</code>

<code>-(</code><code>void</code><code>) mouseDragged:(NSEvent *)theEvent{</code>

<code>    </code><code>NSPoint mp = [self convertPoint:[theEvent locationInWindow] fromView:nil];</code><code>// 滑鼠新坐标</code>

<code>    </code><code>NSLog(@</code><code>"mouseDragged~%f,%f"</code><code>,mp.x,mp.y);</code>

<code>-(</code><code>void</code><code>) mouseUp:(NSEvent *)theEvent{</code>

<code>    </code><code>NSLog(@</code><code>"mouseUp"</code><code>);</code>

<code>-(</code><code>void</code><code>) mouseDown:(NSEvent *)theEvent{</code>

<code>    </code><code>NSLog(@</code><code>"mouseDown"</code><code>);</code>

<code>@end</code>

 注意的是:備注 這兩行代碼是直接通過擷取畫布,更新畫布進行繪制,其中繪制代碼省略,比較容易,這裡起個頭,推薦使用此種方式繪制;對于做遊戲的我們,對于畫布重新整理畫布我想是再熟悉不過了!

運作截圖:

<a href="http://www.himigame.com/wp-content/uploads/2012/06/13.png"></a>

本文轉自 xiaominghimi 51CTO部落格,原文連結:http://blog.51cto.com/xiaominghimi/969974,如需轉載請自行聯系原作者