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

Tom*_*m G 1 iphone grid objective-c quartz-graphics

仍然是一个iphone开发者,但尝试.

我希望用户触摸屏幕,此时将在视图上放置一个引脚(点).

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

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

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

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

因此对齐网格效果.有任何想法吗?

Six*_*tto 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];
Run Code Online (Sandbox Code Playgroud)

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

drawPoint.x = nearbyint((drawPoint.x - kHGridOffset) / kHGridSpacing) * kHGridSpacing + kHGridOffset;
drawPoint.y = nearbyint((drawPoint.y - kVGridOffset) / kVGridSpacing) * kVGridSpacing + kVGridOffset;
Run Code Online (Sandbox Code Playgroud)