【问题标题】:push uiviewcontroller to another viewcontroller with animation from Top - bottom将 uiviewcontroller 推送到另一个具有上下动画的 viewcontroller
【发布时间】:2016-04-14 10:35:05
【问题描述】:

在我的项目中,当用户在顶栏上滑动时,会出现一个屏幕,并带有从上到下的动画效果

有两个视图控制器 oneviewcontroller.m

- (void)swipe
{
    listViewController *list_obj=[[listViewController alloc] initWithNibName:@"listViewController" bundle:NULL];
    UIViewAnimationTransition trans = UIViewAnimationTransitionCurlUp;
    [UIView beginAnimations: nil context: nil];
    [UIView setAnimationTransition: trans forView: [self.view window] cache: YES];
    [self.navigationController pushViewController:list_obj animated:YES];
    [UIView commitAnimations];
}

但这并没有从上到下给出动画

我想实现从 推 := 顶部 - 底部 Pop : = 底部 - 顶部

请帮帮我 谢谢

【问题讨论】:

    标签: ios transition uianimation uinavigationcontroller


    【解决方案1】:

    您可以按如下方式将视图控制器从上到下推送:

    对象-C:

    - (void) pushVC:(UIViewController )dstVC {
        CATransition *transition = [CATransition animation];
        transition.duration = 0.5;
        transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
        transition.type = kCATransitionPush;
        transition.subtype = kCATransitionFromTop;
        [self.navigationController.view.layer addAnimation:transition forKey:kCATransition];
        [self.navigationController pushViewController:dstVC animated:NO];
    }
    

    使用以下代码从下到上弹出视图控制器:

    - (void) popVC {
        CATransition *transition = [CATransition animation];
        transition.duration = 0.5;
        transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
        transition.type = kCATransitionFade;
        transition.subtype = kCATransitionFromBottom;
        [self.navigationController.view.layer addAnimation:transition forKey:kCATransition];
        [self.navigationController popViewControllerAnimated:NO];
    }
    

    斯威夫特 3:

      func open() {
        let settingsVC = SettingsVC()
        let transition = CATransition()
        transition.duration = 0.5
        transition.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
        transition.type = kCATransitionPush
        transition.subtype = kCATransitionFromTop
        navigationController?.view.layer.add(transition, forKey: kCATransition)
        navigationController?.pushViewController(settingsVC, animated: false)
      }
    
      func close() {
        let transition = CATransition()
        transition.duration = 0.5
        transition.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
        transition.type = kCATransitionFade
        transition.subtype = kCATransitionFromBottom
        navigationController?.view.layer.add(transition, forKey:kCATransition)
        let _ = navigationController?.popViewController(animated: false)
      }
    

    【讨论】:

    • @iOSdeveloper 谢谢 :-)
    • 我本来会投票,但我还没有资格投票。但一旦我赢得了声誉,我肯定会这样做。
    • @iOSdeveloper 谢谢 :-) ... 你真好 :-)
    • 我已将代码转换为 swift 但它在 pop 中不起作用
    • @Microprocessor8085 :我遇到了这个问题。当我使用此代码时,动画可以按要求正常工作,但是由于我从一个呈现在另一个视图控制器上的视图控制器推送视图控制器,因此在动画进行时会显示呈现的控制器。有没有人知道,用相同的视图层次结构来避免这种情况?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-16
    • 1970-01-01
    • 1970-01-01
    • 2012-02-18
    • 1970-01-01
    • 2013-05-24
    相关资源
    最近更新 更多