Objective c 滑动导航,通过滑动UIView覆盖另一个UIView
在我对这种导航技术的研究中,我发现这是一个很好的开始。然而,我想要的与此略有不同。当您只需从顶部滑动以显示Objective c 滑动导航,通过滑动UIView覆盖另一个UIView,objective-c,ios,uiview,uiviewanimation,Objective C,Ios,Uiview,Uiviewanimation,在我对这种导航技术的研究中,我发现这是一个很好的开始。然而,我想要的与此略有不同。当您只需从顶部滑动以显示视图时,您可以将其视为iOS'通知中心,然后再向后滑动以隐藏它。在我的例子中,我希望显示一个隐藏的UIView,它来自屏幕的右侧,向左滑动,并通过相同的手势再次隐藏它(这次是向右) 我已经在上一篇文章中找到了一个关于显示/隐藏UIView的解决方案。我想补充的一件事是滑动手势 我不想像Nick Harris那样调整我的应用程序代理来实现这一点。因此,如果有人对我如何做到这一点有任何想法/代码
视图时,您可以将其视为iOS'通知中心
,然后再向后滑动以隐藏它。在我的例子中,我希望显示一个隐藏的UIView
,它来自屏幕的右侧,向左滑动,并通过相同的手势再次隐藏它(这次是向右)
我已经在上一篇文章中找到了一个关于显示/隐藏UIView的解决方案。我想补充的一件事是滑动手势
我不想像Nick Harris那样调整我的应用程序代理来实现这一点。因此,如果有人对我如何做到这一点有任何想法/代码示例,我将不胜感激
显示一些信息:)您可以通过向左滑动的手势从屏幕右侧显示隐藏的UIView,也可以通过相同的手势再次隐藏它(这次是向右)。添加转换
在.h文件中添加BOOL didNotSwipe在.m文件viewDidLoad方法中添加其值didNotSwipe=TRUE
使用不同的选择器向self.view添加左右方向的滑动手势
UISwipeGestureRecognizer *recognizer;
recognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeRight:)];
[recognizer setDirection:UISwipeGestureRecognizerDirectionRight];
[[self view] addGestureRecognizer:recognizer];
[recognizer release];
UISwipeGestureRecognizer *recognizer1;
recognizer1 = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeleft:)];
[recognizer1 setDirection:UISwipeGestureRecognizerDirectionLeft];
[[self view] addGestureRecognizer:recognizer1];
[recognizer1 release];
向左滑动时,调用此方法:
-(void)swipeleft:(UISwipeGestureRecognizer *)swipeGesture
{
if (didNotSwipe) {
didNotSwipe = FALSE;
CATransition *animation = [CATransition animation];
[animation setDelegate:self];
[animation setType:kCATransitionPush];
[animation setSubtype:kCATransitionFromRight];
[animation setDuration:0.50];
[animation setTimingFunction:
[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]];
[self.view.layer addAnimation:animation forKey:kCATransition];
[self.view addSubView:self.overlayView];
//[self.overlayView setFrame:CGRectMake(0,0,self.overlayView.frame.size.width,self.overlayView.frame.size.height)];
}
}
使用此方法向右滑动时:
-(void)swipeRight:(UISwipeGestureRecognizer *)swipeGesture
{
if(!didNotSwipe){
didNotSwipe = TRUE;
CATransition *animation = [CATransition animation];
[animation setDelegate:self];
[animation setType:kCATransitionPush];
[animation setSubtype:kCATransitionFromLeft];
[animation setDuration:0.40];
[animation setTimingFunction:
[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]];
[self.view.layer addAnimation:animation forKey:kCATransition];
[self.overlayView removeFromSuperView];
}
}
哈鲁,我已经试过这个密码了。对于我向右滑动时的反馈,叠加视图显示良好。但是,当我再次向右滑动时,覆盖视图会很快消失,然后再次出现。接下来,当我向左滑动时,叠加视图突然消失得如此之快。即使我将动画的持续时间设置为2.5,覆盖视图也会很快消失。添加一个标志,该标志在vieDidLoad中初始为true。现在,如果(标志){flag=FALSE;此处的所有其他代码},则使用向右滑动方法。现在处于向左滑动状态,flag=TRUE;这只是我第一次在这里的评论中刷入任何directionEDIT的一次:Halu,我已经尝试过这段代码了。当我向左滑动时,叠加视图显示良好。但是,当我再次向左滑动时,覆盖视图会很快消失,然后再次出现。接下来,当我向右滑动时,叠加视图突然消失得如此之快。即使我将动画的持续时间设置为2.5,覆盖视图也会很快消失。我已经添加了标志,根据您的建议,我只是将if(标志)条件更改为向左滑动方法,在向右滑动方法中,我将标志设置为TRUE。但是,这并不能解决问题。来自带有标志的UI行为的反馈:第一次向左滑动是好的,UIView从屏幕右侧移动,然后在动画持续时间后完全占据屏幕,太棒了!但当我向右滑动时,UIView消失得如此之快,它不会显示正在发生的动画。接下来,当我再次向左滑动时,一个UIView从屏幕左侧出现,然后消失,另一个UIView从屏幕右侧出现,然后消失,另一个UIView从右侧出现,然后完全占据屏幕。希望你能想象出来。