ECSlidingViewController如何使用iOS中的动画从一个TopViewController转到另一个TopViewController

时间:2013-07-20 13:34:40

标签: iphone ios objective-c ecslidingviewcontroller

我在我的应用程序中使用ECSlidingViewController进行Facebook样式滑动效果。我有2个TopViewControllers,一个左侧和一个右侧视图控制器和一个initviewcontroller,它是一个slidingviewcontroller子类。

1。 InitViewController:ECSlidingViewController

2.MainViewController(TopViewController)

3.LeftMenuViewContrller(UIViewController)

4.RightMenuViewController(UIViewController)

5.DetailViewController(TopViewController)

我的MainViewController上有tableview,其中包含日历事件。问题是我想通过单击 tableView:didSelectRowAtIndexPath:方法中的事件来将MainViewController转到DetailViewController,以显示事件详细信息,这是另一个带有一些动画的topview控制器(我无法得到)远)。我正在使用以下代码将我带到DetailViewController

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {   
 DetailsViewController *newTopViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"details"];
    self.slidingViewController.topViewController = newTopViewController;
    [self.slidingViewController resetTopView];
}

这是我的viewDidLoad方法

 - (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view.

    self.view.layer.shadowOpacity = 0.75f;
    self.view.layer.shadowRadius = 10.0f;
    self.view.layer.shadowColor = [UIColor blackColor].CGColor;

    if (![self.slidingViewController.underLeftViewController isKindOfClass:[LeftViewController class]]) {
        self.slidingViewController.underLeftViewController  = [self.storyboard instantiateViewControllerWithIdentifier:@"Left"];
    }

    if (![self.slidingViewController.underRightViewController isKindOfClass:[RightViewController class]]) {
        self.slidingViewController.underRightViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"Right"];
    }

    [self.view addGestureRecognizer:self.slidingViewController.panGesture];

}

我想获得类似UINavigationController或Modal样式的动画

[self.navigationController pushViewController:newTopViewController animated:YES];

[self presentViewController:newTopViewController animated:YES completion:nil];

请帮忙。谢谢。

1 个答案:

答案 0 :(得分:0)

您使用的是Storyboard吗?你能进行一次冥想吗?在故事板中设置名称,链接和样式为Modal以及Transition。

在你的DidSelectRowAtIndex中放这个

[self performSegueWithIdentifier:@"eventDetail" sender:@(indexPath.row)];

然后声明这个方法

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if([segue.identifier isEqualToString:@"eventDetail"])
    {
        DetailsViewController *destViewController = segue.destinationViewController;
        destViewController.eventRow = sender;
    }
    // You can test for other Segue names here
}

然后在DetailsViewController.h中放入

// Allows sending View Controller to give this controller data
@property (nonatomic, strong) int *eventRow;

在.m put

@synthesize eventRow;

现在在DetailsViewController中它应该为它设置动画,并且将禁用滑动(除非您将所有ECS位声明为正常)。您还有一个Int eventRow,它告诉您单击了哪个单元格。

您可以创建一个后退按钮并执行此操作;

[self dismissViewControllerAnimated:YES completion:nil];

修改

或者你可以尝试这个,但我不确定它是否会动画加上你需要弄清楚如何传递东西,也许是两者的结合......

UIViewController *newTopViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"eventDetail"];

CGRect frame = self.slidingViewController.topViewController.view.frame;
self.slidingViewController.topViewController = newTopViewController;
self.slidingViewController.topViewController.view.frame = frame;
[self.slidingViewController resetTopView];