【问题标题】:Sliding a view controller from bottom with a Gesture使用手势从底部滑动视图控制器
【发布时间】:2015-07-23 09:33:41
【问题描述】:

我有一个问题(与 Objective-C 相关)。

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

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

我包括流程实现的视觉方案。

非常感谢任何想法!

【问题讨论】:

  • 你想在那里添加 UIView 或 UIViewController 吗?
  • 一次只能在导航栏上推送 UIViewController
  • 检查我编辑的答案。
  • 是的,正在检查。这个例子需要实施才能真正说出它是否适合。感谢您的洞察力
  • 嘿大卫罗伯逊,我遇到了类似的要求,你有没有找到任何合适的解决方案?

标签: ios objective-c xcode viewcontroller gesture


【解决方案1】:

【讨论】:

  • 谢谢。刚检查。它从左侧滑动,但我正在寻找一个控制器从底部滑动的示例。
【解决方案2】:

您总是可以尝试编写自己的 segue 动画来在 ViewController 之间进行转换。只需制作一个自定义 UIStoryboardSegue,并覆盖其 perform 方法。这是一个 sn-p 开始:

@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 添加到窗口的部分是否正确,但这是您可以尝试自己检查/更正的部分。

另一种动画segues的方法是使用CATransition:

-(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];
}

【讨论】:

  • 谢谢!我一定会检查该代码。仍在解决该问题
猜你喜欢
  • 2013-06-23
  • 1970-01-01
  • 2015-09-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-05
  • 1970-01-01
  • 2013-10-15
相关资源
最近更新 更多