- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在尝试创建一个看起来应该像 UIButtonTypeRoundedRect 的自定义 UIButton。在我的 drawRect: 中,我创建了一个路径,第一次调用 CGContextMoveToPoint(),然后四次调用 CGContextAddArc()。然后我抚摸路径。然而,在生成的图像中,四个圆角明显比路径的其余部分粗。
我怀疑这与抗锯齿有关,所以我尝试使用 CGContextSetShouldAntiAlias() 将其关闭,但结果看起来更糟。我也试过用线宽进行试验,但弧线总是比直线粗。 Apple 的 UIButtonTypeRoundedRect 看起来非常好,所以一定有可能以某种方式解决。有人知道吗?
编辑:相关代码:
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextBeginPath(context);
CGContextMoveToPoint(context, rect.origin.x + kRoundedRectButtonRadius, rect.origin.y);
CGContextAddArc(context, rect.origin.x + rect.size.width - kRoundedRectButtonRadius, rect.origin.y + kRoundedRectButtonRadius, kRoundedRectButtonRadius, 3 * M_PI_2, 0, NO);
CGContextAddArc(context, rect.origin.x + rect.size.width - kRoundedRectButtonRadius, rect.origin.y + rect.size.height - kRoundedRectButtonRadius, kRoundedRectButtonRadius, 0, M_PI_2, NO);
CGContextAddArc(context, rect.origin.x + kRoundedRectButtonRadius, rect.origin.y + rect.size.height - kRoundedRectButtonRadius, kRoundedRectButtonRadius, M_PI_2, M_PI, NO);
CGContextAddArc(context, rect.origin.x + kRoundedRectButtonRadius, rect.origin.y + kRoundedRectButtonRadius, kRoundedRectButtonRadius, M_PI, 3 * M_PI_2, NO);
CGContextClosePath(context);
CGContextSetLineWidth(context, 1.7);
CGContextStrokePath(context);
最佳答案
我之前在绘制自定义按钮时遇到过这个问题。您所看到的行为源于 Cocoa 的绘图例程围绕您要求绘制的像素位置居中 绘制线条。让我解释一下。
您绘制的直线落在按钮矩形的最边缘。当您的绘图例程被调用时,Cocoa 已经方便地将裁剪区域设置为按钮矩形的确切边界,但是当您要求 Cocoa 沿着边缘画一条线时,刚好一半的线被绘制在裁剪之外矩形。
您会注意到圆角的不同之处,因为弯曲部分完全落在剪裁矩形内,所以没有一个被剪掉。
解决方案:
假设您绘制的线条正好是两个像素粗。这意味着一个像素绘制在裁剪矩形内部,一个绘制在外部(因此被忽略)。你所要做的就是将你的线条画得离矩形的中心更近一个像素。在自定义绘图例程的情况下,您可能正在使用:
NSRect myBounds = [self bounds];
然后从那里计算你的角点。欧洲工商管理学院,使用:
NSRect myProperBounds = NSInsetRect([self bounds], 1.0, 1.0);
你应该可以开始了。
关于iphone - 为什么我的 Quartz 弧线显示比直线粗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/900053/
下面是我用来制作 1px 文本描边轮廓的代码。但是如何使轮廓变粗呢?如果我只是用“5px”替换所有“1px”,结果看起来很疯狂。 HTML Hello! CSS .element { color:
我是一名优秀的程序员,十分优秀!