我正在尝试近似Google Chrome中标签的形状:
我正在使用的代码是:
-(voID)drawRect:(NSRect)dirtyRect { NSSize size = [self bounds].size; CGfloat height = size.height; CGfloat wIDth = size.wIDth; NSBezIErPath *path = [NSBezIErPath bezIErPath]; [path setlinewidth:1]; [path movetoPoint:NSMakePoint(0,0)]; [path curvetoPoint:NSMakePoint(wIDth * 0.1,height) controlPoint1:NSMakePoint(wIDth * 0.05,height) controlPoint2:NSMakePoint(wIDth * 0.03,height * 0.05)]; [path linetoPoint:NSMakePoint(wIDth * 0.9,height)]; [path curvetoPoint:NSMakePoint(wIDth,0) controlPoint1:NSMakePoint(wIDth * 0.95,height) controlPoint2:NSMakePoint(wIDth * 0.97,height * 0.05)]; [path closePath]; [[NScolor colorWithCalibrateDWhite:0.98 Alpha:1] set]; [path fill]; [[NScolor colorWithCalibrateDWhite:0.6 Alpha:1] set]; [path stroke];}
我失败了.
看,这就是为什么我们不能有好东西:(
任何人都可以给我一些关于绘制曲线时如何思考的指示?绘制此路径的示例也很棒,但实际上它只是理解curvetoPoint的这些输入:controlPoint1:controlPoint2:这让我退缩.
更新|感谢@ Ahruman的回答,我终于开始成型了.它不是100%(缺少底角的曲线,但实际上它至少是对称的形状:)
解决方法 当前绘图点(隐式)和控制点1之间的直线是曲线开始处的切线.控制点2和“到”点之间的直线是曲线末端的切线.这些对应于您在任何带BézIEr路径的矢量绘图应用程序中看到的两个切线控件的末端.如果您还没有使用过,那么Inkscape是免费的. 总结以上是内存溢出为你收集整理的objective-c – 很难理解NSBezierPath的curveToPoint:方法全部内容,希望文章能够帮你解决objective-c – 很难理解NSBezierPath的curveToPoint:方法所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)