我目前正在使用NSBezierPath:
- (void)drawRect:(NSRect)dirtyRect
{
[[NSColor blueColor] set];
[path stroke];
}
但这条线看起来很丑陋(不顺畅)
然后我用谷歌搜索了一些解决方案,我得到了这个:
- (void)drawRect:(NSRect)dirtyRect
{
NSGraphicsContext *graphicsContext;
BOOL oldShouldAntialias;
graphicsContext = [NSGraphicsContext currentContext];
oldShouldAntialias = [graphicsContext shouldAntialias];
[graphicsContext setShouldAntialias:NO];
[[NSColor blueColor] set];
[path stroke];
[graphicsContext setShouldAntialias:oldShouldAntialias];
}
但对我来说,注意到了改变,我仍然有一条丑陋的道路。
有什么建议吗?
感谢您的回答。
以下是详细信息:
#import <Cocoa/Cocoa.h>
@interface StretchView : NSView {
NSBezierPath *path;
}
-(void)myTimerAction:(NSTimer *) timer;
@end
#import "StretchView.h"
@implementation StretchView
- (id)initWithFrame:(NSRect)frame
{
self = [super initWithFrame:frame];
if (self) {
path = [[NSBezierPath alloc] init];
NSPoint p = CGPointMake(0, 0);
[path moveToPoint:p];
myTimer = [NSTimer scheduledTimerWithTimeInterval:1.0
target:self
selector:@selector(myTimerAction:)
userInfo:nil
repeats:YES];
}
return self;
}
- (void)drawRect:(NSRect)dirtyRect
{
NSLog(@"drawRect");
[[NSColor blueColor] set];
[path stroke];
}
-(void)myTimerAction:(NSTimer *) timer
{
NSPoint p = CGPointMake(a, b); //a, b is random int val
[path lineToPoint:p];
[path moveToPoint:p];
[path closePath];
[self setNeedsDisplay:YES];
}
-(void)dealloc
{
[path release];
[super dealloc];
}
@end
3.打开“界面”构建器并将“滚动视图”拖动到主窗口
4.选择“滚动视图”并设置类“StretchView”(在类标识窗口中)
答案 0 :(得分:0)
使用lineToPoint
只会创建直线曲折线,即使是贝塞尔曲线路径的一部分。如果通过“平滑”表示“曲线”,那么您应该查看curveToPoint
。此外,请注意这些“toPoint”方法已经移动了点,除非您打算移动到与线结束位置不同的点,否则不需要moveToPoint
。