向下拖动UIView在iOS 5 [英] Drag Down UIView in iOS 5

查看:125
本文介绍了向下拖动UIView在iOS 5的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在我的iPhone应用程序中看到状态栏上有一个可以访问通知中心的手势。如何在我的应用程序中实现这种转换?我认为这是用滑动手势识别器完成的,但如何从上到下包括滑动手势(如何拖动通知中心通过其完全转换)?有什么样的代码或东西可以帮助我做到这一点吗?
提前处理

I saw in my iPhone app that there is a gesture on the status bar which can access Notification Center. How can I implement that kind of transition in my app?. I think this is done with the swipe gesture recognizer, but how do I include a swipe gesture from top to bottom (how you can drag the Notification Center through its full transition)? Is there any sample code or something that can help me do this? Thaks in advance

推荐答案

应该很容易做。让我们假设你有一个 UIView mainView ),从中你要触发下拉的东西。

Should be easy to do. Let's say you have a UIView (mainView) from which you want to trigger the pull down thing.


  1. 在mainView的可见区域外部放置一个子视图( pulldownView )。

  2. 上实现 touchesBegan 并检查mainView ,并检查触摸是否在前30个像素点)。 c $> 如果移动方向为向下,则执行 touchesMoved 不可见,如果是这样,将 pulldownView 下拉到主视图的可见区域或检查移动方向是否向上, pulldownView

  3. 实施 touchesEnd ,在此处结束拖动或推动移动,方法是检查哪个方向 pulldownView 已被移动。

  1. Put a subview (pulldownView) on mainView top-outside of visible area.
  2. Implement touchesBegan on mainView and check if the touch is in the top 30 pixels (or points).
  3. Implement touchesMoved where you check, if move direction is down and pulldownView not visible and if so drag the pulldownView down into visible area of main view or check if move direction is up and pulldownView visible and if so push upwards out of visible area.
  4. Implement touchesEnd where you end the drag or push movement by checking in which direction the pulldownView was moved.

编辑:

这里是一些示例代码。未经测试,可能包含拼写错误,也许无法编译,但应包含所需的基本部分。

Here's some sample code. Untested, may contain typos, maybe won't compile, but should contain the essential part needed.

//... inside mainView impl:
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
  UITouch *touch = (UITouch *)[touches anyObject];
  start = [touch locationInView:self.superview].y;
  if(start > 30 && pulldownView.center.y < 0)//touch was not in upper area of view AND pulldownView not visible
  {
    start = -1; //start is a CGFloat member of this view
  }
}

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
  if(start < 0)
  {
    return;
  }
  UITouch *touch = (UITouch *)[touches anyObject];
  CGFloat now = [touch locationInView:self.superview].y;
  CGFloat diff = now - start;
  directionUp = diff < 0;//directionUp is a BOOL member of this view
  float nuCenterY = pulldownView.center.y + diff;
  pulldownView.center = CGPointMake(pulldownView.center.x, nuCenterY);
  start = now;
}


-(void) touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
  if (directionUp)
  {
    //animate pulldownView out of visibel area
    [UIView animateWithDuration:.3 animations:^{pulldownView.center = CGPointMake(pulldownView.center.x, -roundf(pulldownView.bounds.size.height/2.));}];
  }
  else if(start>=0)
  {
    //animate pulldownView with top to mainviews top
    [UIView animateWithDuration:.3 animations:^{pulldownView.center = CGPointMake(pulldownView.center.x, roundf(pulldownView.bounds.size.height/2.));}];
  }
}

这篇关于向下拖动UIView在iOS 5的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆