不多說,比較簡單,直接給出源碼,大家作為參考吧。
對于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,如需轉載請自行聯系原作者