DetailViewController不更新动画

时间:2014-03-25 11:43:46

标签: ios objective-c uisplitviewcontroller

我有一个UISplitview控制器(带有主视图和详细视图)。因此,当detailview加载viewDidLoad时,会使用以下代码调用名为[self animateToPosition];的函数:

-(void*)animateToPosition
{
    NSLog(@"Called Function");
    [worldV animateToPosition:MaplyCoordinateMakeWithDegrees(-122.4192, 37.7793) time:1.0];

    [self.view setNeedsDisplay];

    return 0;
}

现在,首次运行时,globeViewC正确设置了传入位置的动画(worldV已初始化,并在detailviewController的viewDidLoad中创建全部"已调用功能"打印在日志中。 但是,我有一个视图控制器,在didSelectRowAtIndexPath我有以下代码(在文件masterViewController.m中)

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    if ([[testArray objectAtIndex:indexPath.row]isEqualToString:@"Menu1"]) {
        DetailViewController *test=[[DetailViewController alloc]init];
        [self addChildViewController:test];
        [self.view addSubview:test.view];
        [test didMoveToParentViewController:self];
        [test animateToPosition];
    }
}

当我选择名为menu1的单元格时,"被调用的函数"是否显示在NSLog中,但是首次加载视图时发生的动画不再显示。我想知道我是否必须以某种方式重新加载detailviewcontroller或重新初始化它(但我尝试再次初始化它并且没有工作)

如果有人能够看到这一点并帮助我实现这一目标。

2 个答案:

答案 0 :(得分:1)

如果您能够展示更多内容,特别是allocinit worldV viewDidLoad以及@property(strong, nonatomic) DetailViewController *detailViewController; 中的内容,将会很有帮助。

通常,您不会为SplitView设置创建新的DetailViewController。

尝试通过创建属性来抓住现有的详细视图控制器,而不是创建新的DetailViewController:

self.detailViewController = (DetailViewController *)[[self.splitViewController.viewControllers lastObject] topViewController];

worldV

首先要测试的是nilanimateToPosition[self.detailViewController animateToPosition]; 中的简单NSLog会显示答案。

无论何时需要调用该方法,请执行以下操作:

animateToPosition

要随时间从一个坐标动画到另一个坐标,您可能需要将-(void)animateToPosition:(MaplyCoordinate)coordinates time:(CGFloat)time 方法更改为:

MaplyCoordinate

咨询您的viewDidLoad是否是一个对象,我怀疑。

因此,总而言之,在您的tableview的didSelectRow中,获取详细视图控制器。

调用[self.detailViewController animateToPosition:coordinates time:1.0]; 时,使用建议的新方法并以这种方式传递坐标和时间:

{{1}}

希望这有帮助。

答案 1 :(得分:0)

在didSelectRowAtIndexPath函数中,您可以创建DetailViewController,但不要将其添加到视图层次结构中。您应该像这样

将它添加到父视图控制器
[self addChildViewController:viewController];
[self.view addSubview:viewController.view];
[viewController didMoveToParentViewController:self];

或者只是将其添加到导航或将其显示为modalViewController