0

我想展示一个带有自定义 Segue 的模态视图控制器,包括 UIKit Dynamics。

rdelmar 在这篇文章https://stackoverflow.com/a/23039173/1016102中复制了以下代码,并尝试根据我的需要对其进行修改。

    -(id)initWithIdentifier:(NSString *)identifier source:(UIViewController *)source destination:(UIViewController *)destination {

    if (self = [super initWithIdentifier:identifier source:source destination:destination]) {
        UIViewController *src  = self.sourceViewController;
        UIViewController *dest = self.destinationViewController;
        self.animator = [[UIDynamicAnimator alloc] initWithReferenceView:src.view];
        [src addChildViewController:dest];
        [dest didMoveToParentViewController:src];
        dest.view.frame = CGRectMake(0, 300, src.view.bounds.size.width, src.view.bounds.size.height);
        [src.view addSubview:dest.view];
    }
    return self;
}

-(void)perform {
    UIGravityBehavior* gravityBehavior = [[UIGravityBehavior alloc] initWithItems:@[[self.destinationViewController view]]];

    CGVector vector = CGVectorMake(0, -1);
    [gravityBehavior setGravityDirection:vector];

    UICollisionBehavior *collide = [[UICollisionBehavior alloc] initWithItems:@[[self.destinationViewController view]]];

    CGPoint left = CGPointMake(self.animator.referenceView.bounds.origin.x, self.animator.referenceView.bounds.origin.y + self.animator.referenceView.bounds.size.height);
    CGPoint right = CGPointMake(self.animator.referenceView.bounds.origin.x + self.animator.referenceView.bounds.size.width, self.animator.referenceView.bounds.origin.y + self.animator.referenceView.bounds.size.height);

    [collide addBoundaryWithIdentifier:@"top" fromPoint:left toPoint:right];

    [collide setCollisionDelegate:self.sourceViewController];

    [self.animator addBehavior:gravityBehavior];
    [self.animator addBehavior:collide];
}

可悲的是,我的目的地控制器出现在错误的位置,并且在碰撞后直接消失。

我想在下面的草图中获得一些结果。

控制器应该从底部弹出,并且应该与顶部边缘对齐。 假设距离顶部 3/4 的空间。

实际上我的用户界面是这样的:我点击“+”按钮来触发我的自定义segue,黑色框直接在橙色导航栏下方弹出。它不会像草图中那样从橙色框的底部边框弹出。它只是出现并随着顶部弹出而消失。

我应该编辑什么来实现这一点?

4

0 回答 0