我有书,我检查了苹果文档,而且没有点击。
这就是我想要做的事情:获取用户值并用它们绘制正方形/矩形。
右侧有一个自定义视图的窗口。
左侧两个文本字段,两个标签(宽度和高度)和一个“绘图”按钮。 在右边的DrawView。
有人可以做到这一点:
您必须为appDelegate中的textFields和按钮建立连接,并为自定义视图提供IBOutlet。
在customView中,您需要有两个变量来保存textField中的值。不要使用property / synthesize,因为一旦你设置了你需要在customView-DrawView中调用setNeedsDisplay的值。
AppDelegate.h
#import <Cocoa/Cocoa.h>
#import "DrawView.h"
@interface AppDelegate : NSObject <NSApplicationDelegate>
@property (assign) IBOutlet NSWindow *window;
@property (weak) IBOutlet DrawView *myDrawView;
@property (weak) IBOutlet NSTextField *widthTextField;
@property (weak) IBOutlet NSTextField *heightTextField;
- (IBAction)draw:(id)sender;
@end
AppDelegate.m
#import "AppDelegate.h"
#import "DrawView.h"
@implementation AppDelegate
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
// Insert code here to initialize your application
}
- (IBAction)draw:(id)sender {
[_myDrawView setWidth:[_widthTextField floatValue]];
[_myDrawView setHeight:[_heightTextField floatValue]];
}
DrawView.h
#import <Cocoa/Cocoa.h>
@interface DrawView : NSView {
float width;
float height;
}
-(void) setWidth: (float) aWidth;
-(void) setHeight: (float) aHeight;
@end
DrawView.m
#import "DrawView.h"
@implementation DrawView
#pragma mark - Setters
-(void) setWidht:(float)aWidth {
width = aWidth;
[self setNeedsDisplay:YES];
}
-(void) setHeight:(float)aHeight {
height = aHeight;
[self setNeedsDisplay:YES];
}
#pragma mark - Drawing
- (id)initWithFrame:(NSRect)frame {
self = [super initWithFrame:frame];
if (self) {
[self setWidth:10];
}
return self;
}
- (void)drawRect:(NSRect)dirtyRect {
//BackGround Color
[[NSColor whiteColor] setFill];
NSRectFill(dirtyRect);
[super drawRect:dirtyRect];
NSBezierPath* square = [NSBezierPath bezierPath];
[square setLineWidth:2];
NSRect squareRect = NSMakeRect(10,10,width,height);
[square appendBezierPathWithRoundedRect:squareRect xRadius:5 yRadius:5];
[square stroke];
}
@end
就是这样。我不知道是否有更好的方法。这看起来有点奇怪。
答案 0 :(得分:0)
是的,它是drawRect中的nill但是在它到达drawRect之前它并不是因为我可以用相同的值来计算区域...你能不能试试吧。它只需要5'。