为什么supportedInterfaceOrientations在ios6中多次调用

时间:2013-03-28 03:57:11

标签: iphone uiinterfaceorientation

在我的ios6应用程序的supportedInterface方法中调用2次。如何防止这种情况以及如何在ios6中只调用一次。请让我知道解决此问题的方法。提前谢谢。

-(BOOL)shouldAutorotate
{
    return YES;
}




- (NSUInteger)supportedInterfaceOrientations
{
    orientationControlString=@"thumbnailNotSelected";
    NSLog(@"appdelegate.previewImageScallingmethodCallControlValue value is %d",appdelegate.previewImageScallingmethodCallControlValue); //Gestures settings
    viewsHiddingGesture=[[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(operationsOnViews:)];
    viewsHiddingGesture.cancelsTouchesInView=NO;
    [self.view addGestureRecognizer:viewsHiddingGesture];


    launchPopOverGesture=[[UILongPressGestureRecognizer alloc]initWithTarget:self action:@selector(annotationsPopOver:)];
    launchPopOverGesture.minimumPressDuration=0.8;
    launchPopOverGesture.allowableMovement=NO;
    launchPopOverGesture.cancelsTouchesInView=NO;
    [tiledView addGestureRecognizer:launchPopOverGesture];
    addAnnotationsGesture=[[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(addPinAnnotation:)];
    annotationScroller.contentSize=CGSizeMake(258, 700);

    appdelegate =(AppDelegate *)[[UIApplication sharedApplication]delegate];

    UIInterfaceOrientation statusBarOrientation =[UIApplication sharedApplication].statusBarOrientation;


    NSLog(@"statusBarOrientation in supported interface orientations is %d",statusBarOrientation);

    NSLog(@"PREVIEWIMAGESCALLING VALUE IS %d",appdelegate.previewImageScallingmethodCallControlValue);



    if(statusBarOrientation == UIInterfaceOrientationLandscapeLeft  || statusBarOrientation == UIInterfaceOrientationLandscapeRight)
    {
        // code for landscape orientation
        patternRemovalValue=0;

        [self landscapeOrientation];


        if(appdelegate.previewImageScallingmethodCallControlValue==1)
        {
            [self previewImageScallingInLandscape];
            firstOrientationChange=YES;
            appdelegate.getImagesResponseArrayObjectNumber=0;

        }

        else if(((appdelegate.previewImageScallingmethodCallControlValue%2)==0) && (appdelegate.previewImageScallingmethodCallControlValue > 1))
        {
            [self previewImageScallingInLandscape];
            firstOrientationChange=NO;


        }

        appdelegate.orientationChangesCount++;
        patternRemovalValue++;
        appdelegate.previewImageScallingmethodCallControlValue++;


    }
    else if(statusBarOrientation == UIInterfaceOrientationPortraitUpsideDown || statusBarOrientation == UIInterfaceOrientationPortrait)

    {
        // code for Portrait orientation
        patternRemovalValue=0;

        [self potraitOrientation];


        if(appdelegate.previewImageScallingmethodCallControlValue==1)
        {
            [self previewImageScallingInPotrait];
            firstOrientationChange=YES;
            appdelegate.getImagesResponseArrayObjectNumber=0;


        }

        else if(((appdelegate.previewImageScallingmethodCallControlValue%2)==0) && (appdelegate.previewImageScallingmethodCallControlValue > 1))
        {
            [self previewImageScallingInPotrait];
            firstOrientationChange=NO;

        }


        patternRemovalValue++;
        appdelegate.previewImageScallingmethodCallControlValue++;


    }

return UIInterfaceOrientationMaskAll;
}

1 个答案:

答案 0 :(得分:0)

我不知道为什么会发生这种情况,但根据我的经验,您必须假设supportedInterfaceOrientations将被多次调用,并让您的逻辑处理它。您应该将大部分代码从那里移到其他地方,可能是loadView或init函数。标准做法是只在supportedInterfaceOrientations中包含代码,该代码会立即报告您支持的方向。