2015-07-23 3 views
3

У меня есть вопрос (связанный с Objective-C).Сдвиньте контроллер просмотра снизу с помощью жестов

Я хочу создать скользящий снизу ViewController поверх контроллера представления Root Map, щелкнув по аннотации.

1) После щелчка по аннотации он должен скользить снизу и показывать 10% высоты;
2) после жестокого движения вверх - он должен отображаться до 100%, если пользователь полностью перетащит его вверх;
3) пользователь нисходящего движения должен иметь возможность уменьшить свою видимую высоту до 10%;
4) на MapView щелкните внизу, чтобы ViewController должен скрыть.

Я включаю визуальную схему реализации процесса.

enter image description here

Любые идеи очень очень ценится!

+0

вы хотите добавить UIView или UIViewController там? –

+0

UIViewController –

+0

в то время, когда вы можете нажать только UIViewController на панели навигации –

ответ

1

проверить это демо

NHSlidingController

PanningViewController

+0

Спасибо. Просто проверил. Он скользит слева, но я ищу пример, когда контроллер соскальзывает снизу. –

0

Вы всегда можете попробовать написать свой собственный SEGUE анимацию перехода между ViewControllers. Просто создайте пользовательский UIStoryboardSegue и переопределите его метод выполнения. Ниже представлен фрагмент для примера:

@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 в окно, но это то, что вы могли бы попробовать и проверить/исправить.

Другой способ анимации перетекает использует 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]; 
} 
+0

Спасибо! Я обязательно проверю этот код. Все еще вокруг вопроса –

Смежные вопросы