首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我只想沿着y轴拖动dropTarget视图,并且只在特定的范围内拖动。

我只想沿着y轴拖动dropTarget视图,并且只在特定的范围内拖动。
EN

Stack Overflow用户
提问于 2014-01-18 11:02:48
回答 1查看 96关注 0票数 0
代码语言:javascript
复制
if ([touch view]==dropTarget1)
{
  CGPoint current = [touch locationInView:self.view];
  if (homeY > 540 && homeY < dropTarget1.frame.origin.y+dropTarget1.frame.size.height)
  {
     dif = current.y - beginY;
     CGRect newDragObjectFrame = CGRectMake(self.dropTarget1.frame.origin.x, homeY+dif,
     self.dropTarget1.frame.size.width,dropTarget1.frame.size.height);
     self.dropTarget1.frame = newDragObjectFrame;
     homeY = homeY+dif;
  }
}

当我使用这段代码时,它是向上移动的,但我不能再上下移动它了。

EN

回答 1

Stack Overflow用户

发布于 2014-01-20 16:26:57

您所遇到的问题可能是由于if语句中的情况所致。一旦homeY大于540或小于dropTarget1.frame.origin.y+dropTarget1.frame.size.height,条件将不再为真(除非在代码的其他地方更改homeY ),并且将忽略触摸。我认为获得您想要的交互的最好方法是使用UIPanGestureRecognizer。下面是一个如何做到这一点的例子:

代码语言:javascript
复制
// Add this to where you initialize dropTarget1
UIPanGestureRecognizer * panGesture = [[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(handlePan:)];
panGesture.delegate = self;
[dropTarget1 addGestureRecognizer:panGesture];


- (void)handlePan:(UIPanGestureRecognizer *)recognizer 
{
    CGPoint translation = [recognizer translationInView:self.dropTarget1];
    if (recognizer.view.center.y + translation.y > 80 && recognizer.view.center.y + translation.y < 350)
    {
        recognizer.view.center = CGPointMake(recognizer.view.center.x,recognizer.view.center.y + translation.y);
        [recognizer setTranslation:CGPointMake(0, 0) inView:self.dropTarget1];
    }
}

只需将80和350更改为实际需要的值。此外,您还需要将UIGestureRecognizerDelegate添加到类中。

祝好运!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21203203

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档