iphone - 自定义 View 中奇怪的抗锯齿

标签 iphone uiview drawing antialiasing drawrect

我有一个自定义UIView这是使用 -[drawRect:] 绘制的方法。

问题是抗锯齿效果非常奇怪,因为水平或垂直的黑线画得非常模糊。

如果我使用 CGContextSetAllowsAntialiasing 禁用抗锯齿功能,一切都按预期绘制。

抗锯齿:
alt text http://dustlab.com/stuff/antialias.png

无抗锯齿(看起来像 AA 的预期结果):
alt text http://dustlab.com/stuff/no_antialias.png

线宽恰好为1,所有坐标均为整数值。

如果我使用 CGContextStrokeRect 绘制矩形,也会发生同样的情况,但如果我画出完全相同的 CGRect 则不会与 UIRectStroke .

最佳答案

由于笔画向两侧扩展的量相等,因此一个像素宽度的线不得放置在整数坐标上,而是以 0.5 像素的偏移量放置。

计算描边线的正确坐标,如下所示:

CGPoint pos = CGPointMake(floorf(pos.x) + 0.5f, floorf(pos.y) + 0.5f);

顺便说一句:不要将您的值转换为 int 并返回 float 以消除小数部分。 C 中有一个用于此目的的函数,名为 floor

关于iphone - 自定义 View 中奇怪的抗锯齿,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1454509/

相关文章:

iphone - 测试从笔记本电脑拔出的应用程序?

iphone - 使用 iphone 摄像头检测和识别数字

iphone - iPhone 和服务器之间的文件同步

ios - 显示 View 时 UITableView 变为非事件状态

java - 如何在 Java 中绘制各种形状?我应该使用哪个库?

wpf - DrawingVisual 上模糊效果的替代方案

iphone - 使用 ASIHTTPRequest 设置不同的回调

iphone - 如何设置自定义 UIView 的大小/位置以将其放置在自定义 UITableViewCell 中?

ios - 如何使用自定义 header 或 UINavigationBar 子类化 UINavigationController?

cocoa - OS X Cocoa 中的交互式曲线编辑器