设为首页 收藏本站
查看: 700|回复: 0

[经验分享] Images and Mouse Events(Chapter 18 of Cocoa Programming for Mac OS X)

[复制链接]

尚未签到

发表于 2015-12-31 13:21:00 | 显示全部楼层 |阅读模式
1 #import "StretchView.h"
  2
  3
  4 @implementation StretchView
  5
  6 - (id)initWithFrame:(NSRect)rect
  7 {
  8     if (![super initWithFrame:rect])
  9     {
10         return nil;
11     }
12     
13     srandom(time(NULL));
14     
15     path = [[NSBezierPath alloc] init];
16     [path setLineWidth:3.0];
17     NSPoint p = [self randomPoint];
18     [path moveToPoint:p];
19     int i;
20     for(i=0;i<15;i++)
21     {
22         p = [self randomPoint];
23         [path lineToPoint:p];
24     }
25     [path closePath];
26     opacity = 1.0;
27     return self;
28 }
29
30 - (void)dealloc
31 {
32     [path release];
33     [image release];
34     [super dealloc];
35 }
36
37 - (NSPoint)randomPoint
38 {
39     NSPoint result;
40     NSRect r = [self bounds];
41     result.x = r.origin.x + random() % (int)r.size.width;
42     result.y = r.origin.y + random() % (int)r.size.height;
43     return result;
44 }
45
46 - (void)drawRect:(NSRect)dirtyRect
47 {
48     NSRect bounds = [self bounds];
49     [[NSColor greenColor] set];
50     [NSBezierPath fillRect:bounds];
51     
52     [[NSColor whiteColor] set];
53     [path fill];
54     if(image)
55     {
56         NSRect imageRect;
57         imageRect.origin = NSZeroPoint;
58         imageRect.size = [image size];
59         NSRect drawingRect = [self currentRect];
60         [image drawInRect:drawingRect fromRect:imageRect operation:NSCompositeSourceOver fraction:opacity];
61     }
62 }
63
64 - (void)mouseDown:(NSEvent *)event
65 {
66     NSPoint p =[event locationInWindow];
67     downPoint = [self convertPoint:p fromView:nil];
68     currentPoint = downPoint;
69     [self setNeedsDisplay:YES];
70     NSLog(@"mouseDown: %d", [event clickCount]);
71 }
72
73 - (void)mouseDragged:(NSEvent *)event
74 {
75     NSPoint p = [event locationInWindow];
76     currentPoint = [self convertPoint:p fromView:nil];
77     [self setNeedsDisplay:YES];
78     NSLog(@"mouseDragged: %@", NSStringFromPoint(p));
79 }
80
81 - (void)mouseUp:(NSEvent *)event
82 {
83     NSPoint p = [event locationInWindow];
84     currentPoint = [self convertPoint:p fromView:nil];
85     [self setNeedsDisplay:YES];
86     NSLog(@"mouseUp:");
87 }
88
89 - (NSRect)currentRect
90 {
91     float minX = MIN(downPoint.x, currentPoint.x);
92     float maxX = MAX(downPoint.x, currentPoint.x);
93     float minY = MIN(downPoint.y, currentPoint.y);
94     float maxY = MIN(downPoint.y, currentPoint.y);
95     
96     return NSMakeRect(minX, minY, maxX-minX, maxY-minY);
97 }
98
99 #pragma mark Accesors
100
101 - (void)setImage:(NSImage *)newImage
102 {
103     [newImage retain];
104     
105     [image release];
106     image = newImage;
107     NSSize imageSize = [newImage size];
108     downPoint = NSZeroPoint;
109     currentPoint.x = downPoint.x + imageSize.width;
110     currentPoint.y = downPoint.y + imageSize.height;
111     [self setNeedsDisplay:YES];
112 }
113
114 - (float)opacity
115 {
116     return opacity;
117 }
118
119 - (void)setOpacity:(float)x
120 {
121     opacity = x;
122     [self setNeedsDisplay:YES];
123 }
124
125 @end

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-158839-1-1.html 上篇帖子: mac os利用xampp实现apache下的cgi 下篇帖子: AppCode 中开发 Mac OS X 应用程序或共享库的经验小结
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表