使用Quartz 2d捕捉网格效果? iphone开发

时间:2009-10-16 11:05:09

标签: iphone objective-c grid quartz-graphics

仍然是iphone开发者,但正在尝试。

我希望用户触摸屏幕,此时视图上会放置一个图钉(点)。

我已经完成了这个(是的)但是我想抓住抓握效果,并且无法想出解决方案。 这就是我放置那个点的方式:

  

CGPoint drawPoint = CGPointMake(lastTouch.x - horizo​​ntalOffset,lastTouch.y - > verticalOffset);   [drawImage drawAtPoint:drawPoint]; //告诉图像自己绘制

我有一个网格作为Viewcontroller的背景,重叠该网格我有一个带有自定义绘图的UIView,每次用户触摸屏幕时都会显示一个图钉。

(由于某种原因,点已经在用户触摸之前出现......尽管这是我目前正在调查的另一个查询)

因此对齐网格效果。有什么想法吗?

2 个答案:

答案 0 :(得分:5)

假设您的方法是让用户点击,然后将引脚放在最近的网格交叉点,这基本上只是一个舍入问题。

// assume these constants
// kVGridOffset, kHGridOffset: the difference between the origin of the view
//   and the origin of the grid
// kVGridSpacing, kHGridSpacing: the size of the grid itself

// set initial coordinates from touch
CGPoint drawPoint = CGPointMake(lastTouch.x - horizontalOffset, lastTouch.y - verticalOffset);

// remove the offset, round to nearest increment of spacing, and return offset
drawPoint.x = floor((drawPoint.x - kHGridOffset) / kHGridSpacing + 0.5) * kHGridSpacing + kHGridOffset;
drawPoint.y = floor((drawPoint.y - kVGridOffset) / kVGridSpacing + 0.5) * kVGridSpacing + kVGridOffset;

// draw the image
[drawImage drawAtPoint:drawPoint];

编辑,有nearbyint()四舍五入的可用性,事情可能有点整洁:

drawPoint.x = nearbyint((drawPoint.x - kHGridOffset) / kHGridSpacing) * kHGridSpacing + kHGridOffset;
drawPoint.y = nearbyint((drawPoint.y - kVGridOffset) / kVGridSpacing) * kVGridSpacing + kVGridOffset;

答案 1 :(得分:1)

您需要某种表示视图控制器中网格的数据结构。也许它会包含一个坐标数组,每个坐标代表垂直和水平线交叉的位置。

然后,当您触摸视图时,将y值与网格结构中的所有y值进行比较,并选择最接近的值。 x值相同。这应该给出一个对齐网格的想法。