Xcode - 考虑到更改的基本 x/y 位置,舍入到最接近的 X 值

Posted

技术标签:

【中文标题】Xcode - 考虑到更改的基本 x/y 位置,舍入到最接近的 X 值【英文标题】:Xcode - Round to closest X value considering altered base x/y positions 【发布时间】:2020-06-11 17:12:42 【问题描述】:

我目前正在开发UICollectionViewLayout,它或多或少类似于 Garageband iPad 应用程序 - 具有可重复使用的装饰/补充视图。

其中一个主要功能是网格线捕捉 - 它可以让您将 GREEN 单元格的 X/Y 框架位置捕捉到最近的水平/垂直网格线。

我遇到的问题是,基本 X/Y 位置不是从 0,0 开始,因为我有一个浮动列和浮动行 - 所以我的捕捉计算是错误的,因为它不考虑浮动行/浮动列宽/高。

这是说明我的问题的图片:

这是我计算snapped 位置的代码:

CGPoint cellTopLeft = self.frame.origin;
CGFloat gridlineWidth = 30;
CGFloat floatingColumnWidth = 120; // width of the floating left column
CGFloat floatingRowHeight = 100; // height of the floating top row
CGFloat rowHeight = 100; // height of rows on the left (table 0, table 1, table 2, etc)

float snapped_x = [self closest:cellTopLeft.x toValue:gridlineWidth];
float snapped_y = [self closest:cellTopLeft.y toValue:rowHeight];

- (float)closest:(float)input toValue:(float)value 
    return value * floorf((input / value) + 0.5);


正如您在我正在积极拖动的“Grand 0”绿色单元格中看到的那样,位置是错误的。

【问题讨论】:

float snapped_x = [self closest:cellTopLeft.x - floatingColumnWidth toValue:gridlineWidth] + floatingColumnWidth? 哇.. 就是这么简单。有时你需要一双额外的眼睛哈哈。非常感谢你????????? 【参考方案1】:

感谢@zrzka - 有时看似复杂的错误可能是最容易解决的,只需要多花一双眼睛。

解决办法是:

float snapped_x = [self closest:cellTopLeft.x - floatingColumnWidth toValue:gridlineWidth] + floatingColumnWidth
float snapped_y = [self closest:cellTopLeft.y - floatingRowHeight toValue:rowHeight] + floatingRowHeight;

【讨论】:

以上是关于Xcode - 考虑到更改的基本 x/y 位置,舍入到最接近的 X 值的主要内容,如果未能解决你的问题,请参考以下文章

移动节点后,SKSpriteNode的X,Y坐标不会更改

SQL中的取整函数取小数

jQuery获取textarea光标/插入符号X,Y位置并在下面显示一个DIV

如何在three.js对象渲染中从中心向左更改轴(x,y,z)位置?

hdu5714 拍照[2016百度之星复赛C题]

如何更改 xcode 项目中文件的位置?