我正面临一个让我发疯的问题。我读到了它,但我找不到解决方案。我正在开发一个应用程序,它根据设备方向以模态方式呈现视图控制器。当设备方向面朝上时,TabBarController以模态方式呈现。 TabBarController包含两个viewControllers,一个用于显示地图,另一个(尚未实现)用于其他目的。当我更改设备方向时,应用程序冻结,显示以下消息:
MobileAR [8642:707]使用两阶段旋转动画。要使用 更顺畅的单级动画,这个应用程序必须删除 两阶段方法实现。
2011-12-07 21:47:37.566 MobileAR [8642:707]使用两阶段旋转 旋转多个视图控制器时不支持动画 或查看控制器而不是窗口委托发生的问题 是地图视图控制器的
loadView:
方法
控制器的模态显示没有问题,只要mapviewcontroller loadView:
执行其他操作,一切正常。这是代码,以便更好地理解:
如果loadView:
是这样的话:
- (void)loadView{
UIView *faceUpView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 1024, 718)];
self.view = faceUpView;
[faceUpView release];
MKMapView *mkMap = [[MKMapView alloc] initWithFrame:CGRectMake(0, 0, 1024, 718)];
mkMap.mapType = MKMapTypeStandard;
[self.view addSubview:mkMap];
[mkMap release];
}
视图不会产生任何问题,因此地图在TabBarController中可以正确显示。
相反,如果在loadView:
我初始化这样的视图:
- (void)loadView{
//Initialize the MapView
MapView *mv = [[MapView alloc] initWithFrame:CGRectMake(0, 0, 1024, 718)];
mv.mapViewController = self;
self.mMapView = mv;
//Release of the local variable
[mv release];
}
只要我将设备“面朝上”,它就会冻结,即使我只留下第一行:MapView *mv = [[MapView alloc] initWithFrame:CGRectMake(0, 0, 1024, 718)];
这里执行其初始化程序MapView.m
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
// Initialization code
self.layer.borderWidth = 2; //Set the border of the box
//State that the subviews are confined within its bounds
self.clipsToBounds = YES;
//Initialize the View that contains the map with position and size
// MKMapView *mv = [[MKMapView alloc] initWithFrame:CGRectMake(-106, -106, BOX_SIDE, BOX_SIDE)];
MKMapView *mv = [[MKMapView alloc] initWithFrame:CGRectMake(0, 0, BOX_WIDTH, BOX_HEIGHT)];
//Set the map as standard map (Not satellite nor Hybrid)
mv.mapType = MKMapTypeStandard;
//Retains the map
self.mapView = mv;
//Add the map to the super view
[self addSubview:mv];
//Release the map view previously allocated
[mv release];
}
return self;
}
我没有采用任何两阶段旋转方法,也不是我在某些答案中读到的一个阶段。
我非常感谢任何帮助!!!! 谢谢