Ios 使用手势从底部滑动视图控制器

Ios 使用手势从底部滑动视图控制器,ios,objective-c,xcode,viewcontroller,gesture,Ios,Objective C,Xcode,Viewcontroller,Gesture,我有一个问题(目标C相关) 我想通过单击注释在根贴图视图控制器的顶部创建一个从底部滑动的视图控制器 1) 点击注释后,它应该从底部滑动并显示10%的高度 2) 向上滑动手势后-如果用户完全向上拖动,则应显示100% 3) 在向下的手势上,用户应该能够再次将其可见高度降低到10% 4) 在地图视图上,单击底部视图控制器应隐藏 我将包括流程实现的可视化方案 任何想法都非常感谢 查看此演示 您可以尝试编写自己的segue动画以在ViewController之间转换。只需创建一个自定义的UIStor

我有一个问题(目标C相关)

我想通过单击注释在根贴图视图控制器的顶部创建一个从底部滑动的视图控制器

1) 点击注释后,它应该从底部滑动并显示10%的高度
2) 向上滑动手势后-如果用户完全向上拖动,则应显示100%
3) 在向下的手势上,用户应该能够再次将其可见高度降低到10%
4) 在地图视图上,单击底部视图控制器应隐藏

我将包括流程实现的可视化方案

任何想法都非常感谢

查看此演示


您可以尝试编写自己的segue动画以在ViewController之间转换。只需创建一个自定义的UIStoryboardSegue,并重写它的perform方法。以下是一个代码片段:

@interface HorizontalSegue : UIStoryboardSegue

@property CGPoint originatingPoint;

@end


@implementation VerticalSegue

- (void)perform {
    UIViewController *sourceViewController = self.sourceViewController;
    UIViewController *destinationViewController = self.destinationViewController;

    NSArray* windowArray = [UIApplication sharedApplication].windows;
    if (windowArray.count > 0) {
        UIWindow* appWindow = [windowArray lastObject];
        [appWindow insertSubview:destinationViewController.view aboveSubview:sourceViewController.view];
    }
    else
        [sourceViewController.view addSubview:destinationViewController.view];

    // Store original centre point of the destination view
    CGPoint originalCenter = destinationViewController.view.center;

    // Set center to start point of the button
    destinationViewController.view.center = CGPointMake(self.originatingPoint.x, self.originatingPoint.y*3);

    [UIView animateWithDuration:0.25
                          delay:0.0
                        options:UIViewAnimationOptionCurveEaseInOut
                     animations:^{
                         destinationViewController.view.center = originalCenter;
                     }
                     completion:^(BOOL finished){
                         [sourceViewController presentViewController:destinationViewController animated:NO completion:NULL]; // present VC
                     }];
}

@end
使用此选项,您可以轻松制作自定义动画。我不完全确定将ViewController添加到窗口的部分是否正确,但这是您可以尝试自己检查/更正的部分

设置序列动画的另一种方法是使用CATTransition:

-(void)perform
{
    UIViewController *sourceViewController = (UIViewController*)[self sourceViewController];
    UIViewController *destinationController = (UIViewController*)[self destinationViewController];

    CATransition* transition = [CATransition animation];
    transition.duration = 0.25;
    transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
    transition.type = kCATransitionMoveIn; //kCATransitionMoveIn; //, kCATransitionPush, kCATransitionReveal, kCATransitionFade
    transition.subtype = kCATransitionFromLeft; //kCATransitionFromLeft, kCATransitionFromRight, kCATransitionFromTop, kCATransitionFromBottom

    [destinationController.view.layer addAnimation:transition forKey:kCATransition];
    [sourceViewController presentViewController:destinationController animated:NO completion:nil];
}

是否要在此处添加UIView或UIViewController?一次只能按导航栏上的UIViewController检查我已编辑的答案。是,正在检查。这个例子需要实现,我才能真正说出它是否合适。谢谢你的见解嘿David Robertson,我遇到了一个类似的要求你有什么,你找到合适的解决方案了吗?谢谢。刚查过。它从左侧滑动,但我正在寻找一个控制器从底部滑动的示例。谢谢!我一定会查一查代码的。仍在围绕这个问题工作