【Cocoa(mac) Application 开发系列之三】自定义NSView并绘制一些常见的图形及字符串;

转载 2015年11月18日 09:29:40

【Cocoa(mac) Application 开发系列之三】自定义NSView并绘制一些常见的图形及字符串;

对于Cocoa application 话说回来比较easy,如果之前你接触过iOS 的IB的话 ,基本上没什么可说的,上手很快;

因此对于Cocoa Application 不会太快的更新,接着Himi将对之前做的动编彻底的更新一版;后期有时间将继续更新此系列;

  言归正传,对于自定义NSView上一篇已经介绍了,而且本篇主要继续深入NSView的drawRect进行继续研究,示例代码如下,比较容易理解,而且都已备注的很清楚;
//
//  HView.m
//
//  Created by Himi on 12-6-7.
//  Copyright (c) 2012年 Himi. All rights reserved.
//

#import "HView.h"

@implementation HView

- (id)initWithFrame:(NSRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        // Initialization code here.
    }

    return self;
}

- (void)drawRect:(NSRect)dirtyRect
{

    //-----------获取整个MyView尺寸------------
    NSRect screen = [self bounds];
    int SW = screen.size.width;
    int SH = screen.size.height;

    //-----------设置整个MyView的颜色------------
    [[NSColor grayColor] set];

    //-----------填充整个MyView---------------
    NSRectFill(screen);

    //-----------绘制字符串---------------
    NSString * strH= @"基础绘制   --By Himi";
    //--绘制不带属性字符串
    [strH drawAtPoint:NSMakePoint(SH*0.5, SH-30) withAttributes:NULL];
    //--绘制带属性字符串
    NSMutableDictionary *md = [NSMutableDictionary dictionary];
    [md setObject:[NSFont fontWithName:@"Times" size:20] forKey:NSFontAttributeName];
    [strH drawAtPoint:NSMakePoint(SH*0.5, SH-70) withAttributes:md];

    //--------绘制矩形----
    NSRect rect1 = NSMakeRect(SH*0.5, SH-100, 30, 20);
    NSRect rect2 = NSMakeRect(SH*0.5, SH-130, 30, 20);
    //填充矩形
    [NSBezierPath fillRect:rect1];
    //绘制矩形
    [NSBezierPath strokeRect:rect2];

    //--------绘制线条(十字线)----
    [[NSColor greenColor] set];
    NSPoint  bm =NSMakePoint(SW*0.5, 0);
    NSPoint  top =NSMakePoint(SW*0.5, SH);
    NSPoint  lf =NSMakePoint(0, SH*0.5);
    NSPoint  rt =NSMakePoint(SW, SH*0.5);
    [NSBezierPath strokeLineFromPoint:bm toPoint:top];
    [NSBezierPath strokeLineFromPoint:lf toPoint:rt];

    //-------绘制椭圆
    [[NSColor redColor] set];
    [[NSBezierPath bezierPathWithOvalInRect:screen] stroke];

    [self setNeedsDisplay:YES];// 强制绘画

//【备注】
//    CGContextRef ref = [[NSGraphicsContext currentContext] graphicsPort];// 获取画布
//    CGContextFlush(ref);//刷新画布
}

-(void) mouseDragged:(NSEvent *)theEvent{
    NSPoint mp = [self convertPoint:[theEvent locationInWindow] fromView:nil];// 鼠标新坐标
    NSLog(@"mouseDragged~%f,%f",mp.x,mp.y);

}
-(void) mouseUp:(NSEvent *)theEvent{
    NSLog(@"mouseUp");

}
-(void) mouseDown:(NSEvent *)theEvent{
    NSLog(@"mouseDown");

}
@end

 注意的是:备注 这两行代码是直接通过获取画布,更新画布进行绘制,其中绘制代码省略,比较容易,这里起个头,推荐使用此种方式绘制;对于做游戏的我们,对于画布刷新画布我想是再熟悉不过了!

运行截图:

 

 

相关文章推荐

NSAlert 弹出警告提示窗(新)

NSAlert 警告提示窗有以下两种方式展示: - (IBAction)alertButton:(id)sender {          NSString *title1 =NSLocali...

【Cocoa(mac) Application 开发系列之二】总结一些常用控件以及简单在自定义View上绘制字符串

【Cocoa(mac) Application 开发系列之二】总结一些常用控件以及简单在自定义View上绘制字符串 那么本篇不再详细解释如何如何连接控件以及控件代码等,直接给出代码以及需要注...

列表框用法CAknSingleGraphicStyleListBox控件的用法

CAknSingleGraphicStyleListBox 1.在头文件中定义:     //列表框     CAknSingleGraphicStyleListBox * iListBox; ...

oracle索引及使用原则

尽量在插入数据完成后建立索引,因为索引将导致插入数据变慢,特别是唯一索引 在正确的表和列上建索引 优化索引列顺序提高性能 限制每个表的索引个数 删除不需要的索引 指定索引的block设置 估计索引的大...

NSXMLParser解析XML数据

Cpp代码   NSXMLParser解析XML数据 用法如下:   一、首先,必须继承NSXMLParserDelegate协议    @interface ViewControl...

【Mac OS X开发】NSAlert的使用心得

使用NSAlert可以弹出两种不同的效果,

WINCE下使用CXIMAGE的問題

我之前在pc上使用過cximage+OPENGL用過2種方法在PC上都OK1種是載入CXIMAGE.LIB那一堆全部LIB1種是只載入PNG相關的LIB我現在想要在wince使用cximage+OPE...
  • cpq37
  • cpq37
  • 2010-11-04 07:58
  • 2294

NSAlert 弹出警告提示窗

-(void)alertinterface:(NSString *)title1 buttonwithtitle:(NSString *)title2 messagetext:(NSString ...

Jboss EJB3.0 实例教程

了解Jboss配置以及如何发布EJB

关于数据类型的一个小问题 (int) (int &) (int ) &

如下的一个程序他的输出是什么?int main(){float a=1.0f;cout<<(int)  a<<endl;cout<<(int &)a<<endl;cout<<(int) &a<<end....
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)