我有一个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
或重新初始化它(但我尝试再次初始化它并且没有工作)
如果有人能够看到这一点并帮助我实现这一目标。
答案 0 :(得分:1)
如果您能够展示更多内容,特别是alloc
和init
worldV
viewDidLoad
以及@property(strong, nonatomic) DetailViewController *detailViewController;
中的内容,将会很有帮助。
通常,您不会为SplitView设置创建新的DetailViewController。
尝试通过创建属性来抓住现有的详细视图控制器,而不是创建新的DetailViewController:
self.detailViewController = (DetailViewController *)[[self.splitViewController.viewControllers lastObject] topViewController];
和
worldV
首先要测试的是nil
是animateToPosition
。 [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