Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 滑动导航,通过滑动UIView覆盖另一个UIView_Objective C_Ios_Uiview_Uiviewanimation - Fatal编程技术网

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从右侧出现,然后完全占据屏幕。希望你能想象出来。