Я нахожусь в 17-й главе программирования Аарона какао для Mac os X, и в этом примере он встраивает NSView в NSScrollView.
Для упражнения я также программно добавил NSButton в представление.
Проблема заключается в том, что странное поведение кнопки, которая сначала появляется в режиме прокрутки, но когда я двигаюсь вниз по вертикальной полосе прокрутки, кнопка исчезает и снова появляется в нижней части окна прокрутки. Поскольку это может сбивать с толку (а также трудно объяснить), я сняли видео, чтобы лучше описать проблему:
http://tinypic.com/player.php?v=k1sacz&s=6
Я создал подклассы NSView и назвал класс StretchView (как сказано в книге).
Это код:
#import <Cocoa/Cocoa.h>
@interface StretchView : NSView
{
@private
NSBezierPath* path;
}
- (NSPoint) randomPoint;
- (IBAction) click : (id) sender;
@end
#import "StretchView.h"
@implementation StretchView
- (void) awakeFromNib
{
// Here I add the button
NSView* view=self;
NSButton* button=[[NSButton alloc] initWithFrame: NSMakeRect(10, 10, 200, 100)];
[button setTitle: @"Click me"];
[button setTarget: self];
[button setAction: @selector(click:)];
[view addSubview: button];
}
- (IBAction) click:(id)sender
{
NSLog(@"Button clicked");
}
- (void) drawRect:(NSRect)dirtyRect
{
NSRect bounds=[self bounds];
[[NSColor greenColor] set];
[NSBezierPath fillRect: bounds];
[[NSColor whiteColor] set];
[path fill];
}
- (id) initWithFrame:(NSRect)frameRect
{
self=[super initWithFrame: frameRect];
if(self)
{
// here i dra some random curves to the view
NSPoint p1,p2;
srandom((unsigned int)time(NULL));
path=[NSBezierPath bezierPath];
[path setLineWidth: 3.0];
p1=[self randomPoint];
[path moveToPoint: p1];
for(int i=0; i<15; i++)
{
p1=[self randomPoint];
p2=[self randomPoint];
[path curveToPoint: [path currentPoint] controlPoint1: p1 controlPoint2: p2 ];
[path moveToPoint: p1];
}
[path closePath];
}
return self;
}
- (NSPoint) randomPoint
{
NSPoint result;
NSRect r=[self bounds];
result.x=r.origin.x+random()%(int)r.size.width;
result.y=r.origin.y+random()%(int)r.size.height;
return result;
}
@end
Вопросы:
1) Почему кнопка исчезает - появляется снова и как избежать этой проблемы?
2) Почему кривые закрашены белым? Я хотел нарисовать их крошечными линиями, а не заливкой.