gpt4 book ai didi

ios - 以编程方式用 FLOAT 高度/宽度的矩形填充 UIView

转载 作者:行者123 更新时间:2023-11-29 10:59:07 25 4
gpt4 key购买 nike

我遇到了看似简单的问题。以编程方式用 FLOAT 高度/宽度的矩形填充 UIView矩形之间没有任何空白(矩形应该连接)使用下面的代码。

    int  WIDTH = 72(does NOT work);//80(works);//32(works);
int HEIGHT = 45(does NOT work);//50(works);//20(works);
_cellSizeX = self.bounds.size.width / WIDTH;
_cellSizeY = self.bounds.size.height / HEIGHT;
UIGraphicsBeginImageContext(self.bounds.size);
CGRect cellFrame = CGRectMake(0, 0,_cellSizeX, _cellSizeY);
_cellIndex = 0;

for (int i = 0; i < WIDTH; i++)
{
cellFrame.origin.y = 0;
for (int j = 0; j < HEIGHT; j++, _cellIndex++)
{
[_Image drawInRect:cellFrame blendMode:kCGBlendModeOverlay alpha:1.0];
cellFrame.origin.y += _cellSizeY;
}
cellFrame.origin.x += _cellSizeX;
}
_blendedImage = UIGraphicsGetImageFromCurrentImageContext();
_Layer.contents = (id) _blendedImage.CGImage;
UIGraphicsEndImageContext();

代码工作正常,但前提是相对于宽度和高度。例如,宽度 = 480,高度 = 300。

The Primes of 480 are: 480= 2*2*2*2*2*3*5;
The Primes of 300 are: 300= 2*2*3*5*5;
And their common primes are: 2*2*3*5;

这意味着我可以接受行/列中的一定数量的单元格:

8(actually 2*2*2)/5;
16 / 10;
24 / 15;
32 / 20;
...;
80 / 50;

但不是72/45 .... 原因简单来说:

480 / 72 = 6,6666667;
300 / 45 = 6,6666667;

另一方面,还有一个可行的例子:

480 / 32 = 15;
300 / 20 = 15;

所以它是某个地方的 float 与整数问题。但是在哪里??!!

感谢您阅读本文。

最佳答案

有一些解决方案,没有一个是完美的,因为现实情况是屏幕对于某些尺寸并不能完全分割,所以即使你做得完美,你也会在矩形的边界处有一些子像素“模糊”。

想法 1:

您可以做的是使用 float 保持运行总计,但将每个矩形边界限制为 int。这意味着计算矩形的底部和右边缘将在 float 中结束的位置,然后使用固定的 int 值,从之前的底部和右边缘计算宽度和高度。在这种情况下,您会得到不均匀的矩形尺寸,但只有 1 个单位的差异。例如 320 分为 6 列将是:

+-----+-------+---------------+
| idx | width | running-total |
+-----+-------+---------------+
| 0 | 53 | 53.3333333333 |
| 1 | 53 | 106.666666666 |
| 2 | 54 | 160.0 |
| 3 | 53 | 213.333333333 |
| 4 | 53 | 266.666666666 |
| 5 | 54 | 320.0 |
+-----+-------+---------------+

y 方向也一样。为了进一步减少视网膜显示器上的错误,您可以将您的值加倍(乘以 scale),然后在计算后减半(除以 scale),这样您只会得到 1-像素(0.5 个单位)的差异。

这种方法在概念上类似于 Bresenham's line algorithm 的一维版本,这是一本很好的相关读物。

想法 2:

计算合适的单元格大小并将其向上四舍五入,然后乘以单元格的数量以获得比屏幕略大的图像。然后使用整数单元格大小绘制到此图像中,并缩小图像并对其重新采样。这意味着您会看到矩形的边缘略微模糊,但没有“孔”。

关于ios - 以编程方式用 FLOAT 高度/宽度的矩形填充 UIView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16856212/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com