Drag Down UIView in iOS 5(在 iOS 5 中下拉 UIView)
问题描述
我在我的 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.
- 在 mainView 可见区域的顶部外部放置一个子视图(
pulldownView
). - 在
mainView
上实现touchesBegan
并检查触摸是否在前 30 个像素(或点)中. - 在你检查的地方实现
touchesMoved
,如果移动方向向下并且pulldownView
不可见,如果是这样,将pulldownView
向下拖动到可见区域主视图或检查移动方向是否向上并且pulldownView
可见,如果是,则向上推出可见区域. - 实现
touchesEnd
,通过检查pulldownView
的移动方向来结束拖动或推动移动.
- Put a subview (
pulldownView
) on mainView top-outside of visible area. - Implement
touchesBegan
onmainView
and check if the touch is in the top 30 pixels (or points). - Implement
touchesMoved
where you check, if move direction is down andpulldownView
not visible and if so drag thepulldownView
down into visible area of main view or check if move direction is up andpulldownView
visible and if so push upwards out of visible area. - Implement
touchesEnd
where you end the drag or push movement by checking in which direction thepulldownView
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.));}];
}
}
这篇关于在 iOS 5 中下拉 UIView的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:在 iOS 5 中下拉 UIView
基础教程推荐
- android 应用程序已发布,但在 google play 中找不到 2022-01-01
- 如何在 iPhone 上显示来自 API 的 HTML 文本? 2022-01-01
- Kivy Buildozer 无法构建 apk,命令失败:./distribute.sh -m “kivy"d 2022-01-01
- 如何在没有IB的情况下将2个按钮添加到右侧的UINavigationbar? 2022-01-01
- Android:对话框关闭而不调用关闭 2022-01-01
- 如何在 UIImageView 中异步加载图像? 2022-01-01
- 当从同一个组件调用时,两个 IBAction 触发的顺序是什么? 2022-01-01
- UIWebView 委托方法 shouldStartLoadWithRequest:在 WKWebView 中等效? 2022-01-01
- 如何让对象对 Cocos2D 中的触摸做出反应? 2022-01-01
- 在 gmail 中为 ios 应用程序检索朋友的朋友 2022-01-01