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

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

时间:2022-11-24 15:39:11浏览次数:73  
标签:画布 自定义 NSView self 0.5 Cocoa SH NSMakePoint 绘制




本站文章均为​ 李华明Himi ​​原创,转载务必在明显处注明:​​​​


不多说,比较简单,直接给出源码,大家作为参考吧。

对于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​


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

​​

 

标签:画布,自定义,NSView,self,0.5,Cocoa,SH,NSMakePoint,绘制
From: https://blog.51cto.com/xiaominghimi/5884014

相关文章

  • Android Studio 自定义模板内容(注释、代码)
        ......
  • Maven之自定义pom类型的基础项目
    摘要:在当前的软件开发场景中,大都是通过maven管理项目,而如果使用maven的话,其实也会有很多问题,比如项目中依赖的版本管理就是一个很头疼的事,如果一个......
  • element ui 中引入自定义的图标
    1.去iconfont里找到要用的图标并加入到项目中2.在项目页面点击项目设置 按如图修改3.修改后保存 下载到本地4.在main.js中引入下载的 iconfont.css(在i......
  • day07 自定义模块&常见内置模块
    什么是模块和包?模块,就是指py文件,我们可以将一些功能按照某个维度划分自定义内置第三方包,就是指文件夹里面包含多个py文件一般情况下,大家平时的讨论和沟通时......
  • c#自定义控件模板代码
    usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Drawing;usingSystem.Data;usingSystem.Linq;usingSystem.Text;usingSyste......
  • VUE3 自定义 轻量级全局数据共享方案之一 Provide&inject (简单快速实现vuex功能)
    在vue2中,提供了provide和inject配置,可以让开发者在高层组件中注入数据,然后在后代组件中使用除了兼容vue2的配置式注入,vue3在compositionapi中添加了provide和inject方法......
  • 自定义View
    View类是Android中各种组件的基类,如View是ViewGroup基类,表现为显示在屏幕上的各种视图。Android中的UI组件都是由View和ViewGroup组成。 ttributeSet与自定义属性:系统自......
  • 自定义的Qt搜索框控件
    该控件模仿的是比较常见的应用程序中的搜索框。实现了输入文本后按回车搜索(也可以点击搜索按钮开始搜索),和记住最近的几个搜索记录的功能。使用者通过响应inputCompleted信......
  • Vue笔记 - 自定义事件与事件总线
    自定义事件与事件总线目录自定义事件与事件总线1.事件1.1基本使用1.2事件修饰符1.3键盘事件2.自定义事件3.全局事件总线1.事件1.1基本使用使用v-on:xxx或......
  • 手动创建线程池+自定义拒绝策略
    try{ThreadFactorytycThreadFactory=newThreadFactoryBuilder().setNamePrefix("tyc-call-inf").build();//拒绝策略,超过线程数+......