iOS视图控制器两阶段旋转动画崩溃

时间:2011-12-07 21:26:42

标签: iphone ios ipad uiviewcontroller orientation

我正面临一个让我发疯的问题。我读到了它,但我找不到解决方案。我正在开发一个应用程序,它根据设备方向以模态方式呈现视图控制器。当设备方向面朝上时,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;
}

我没有采用任何两阶段旋转方法,也不是我在某些答案中读到的一个阶段。

我非常感谢任何帮助!!!! 谢谢

0 个答案:

没有答案