我用旋钮创建了一个控件。该旋钮应该可以沿x轴移动,而y轴只能 我已经实现了以下方法:
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
我知道,限制沿一个轴的移动必须在touchMoved
中实现。当我限制运动时,例如x轴一切都按预期工作。但是如何为y轴启用运动呢?当我启用第二个轴时,旋钮的移动不受仅这两个轴的限制。
这是touchMoved
实现的一部分:
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touch = [[event allTouches] anyObject];
CGPoint currentLocation = [touch locationInView:self.view];
CGPoint centerPoint = _triggerCap.center;
CGPoint selectionTriggerCenter = _selectionTrigger.center;
double distance = ({double d1 = centerPoint.x - selectionTriggerCenter.x, d2 = centerPoint.y - selectionTriggerCenter.y; sqrt(d1 * d1 + d2 * d2); });
if (distance < 100.0) {
if (fabsf(selectionTriggerCenter.y - currentLocation.y) > 5) {
centerPoint.y = currentLocation.y;
_triggerCap.center = centerPoint;
有人可以给我一个提示如何启用这些两个轴仅的移动吗?
答案 0 :(得分:0)
我能想到的最快捷的方式,我的头脑:
在touchesBegan
中,记录旋钮内第一次触摸的位置。然后,在touchesMoved
中,等到触摸至少一些最小距离(可能是15个像素 - 在第一次触摸时发挥作用,看看效果最好)。检查是否距离x方向或y方向的第一次触摸更远。这将确定当前触摸序列的剩余部分应限制哪个轴移动。设置一个标志以指示轴,然后使用已经移动的代码限制在单个轴上。重置touchesEnded
中的标志,或当旋钮返回到距离交叉点一定距离内时。