Невозможно понять ориентацию в программировании iphone?

Я пишу код в ViewDidLoad следующим образом,

    [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(orientationChanged:)                                               name:UIDeviceOrientationDidChangeNotification object:nil]; 
    //Whenever the device orientation changes, orientationChanged will be called

и тело directionChanged: метод следующий

    - (void)orientationChanged:(NSNotification *)notification
    {
        UIDeviceOrientation deviceOrientation = [UIDevice currentDevice].orientation;

        NSLog(@"Method is Called"); 

        self.view.frame = CGRectMake(0, 0, 480, 320);
        //self.view.superview.frame = CGRectMake(-50, -70, 800, 900);

        //Based upon which orientation the device is in, update your View rotations.
        //A simple view.transform = CGAffineTransformMakeRotation(whatever); will work well.
    }

Я не могу понять поведение этого метода, может ли кто-нибудь сказать мне, что будут делать эти две строки, первая из которых меняет фрейм self.view.frame, а вторая - для суперпредставления, которое я прокомментировал.

Спасибо заранее Saeen

3 ответа

Вы можете управлять своими взглядами в соответствии с ориентацией. Проверьте мой ответ здесь.

Используйте этот центр уведомлений, он работает нормально

    -(void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration

    - (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation duration:(NSTimeInterval)duration
    {
        appDelegate.interface=interfaceOrientation;
        [popoverController dismissPopoverAnimated:YES];
        if (interfaceOrientation == UIInterfaceOrientationLandscapeLeft || interfaceOrientation == UIInterfaceOrientationLandscapeRight)
        {  
        if(UI_USER_INTERFACE_IDIOM()==UIUserInterfaceIdiomPad)
        {
            txt_description.font = [UIFont systemFontOfSize:17];
            appDelegate.screenWidth = 1024;
            img_background.frame = CGRectMake(0, 0, 1024, 748);
            img_background.image = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"background_ipad_landscape" ofType:@"png"]];

            lbl_friendName.frame=CGRectMake(185, 58, 180, 30);
            btn_friendName.frame=CGRectMake(390, 60, 436, 27);
            [btn_friendName setImage:[UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"dropdown_s14_ipad_landscape" ofType:@"png"]] forState:UIControlStateNormal];
            lbl_friendNameValue.frame=CGRectMake(399, 59, 300, 30);
            lbl_date.frame=CGRectMake(185, 110, 180, 30);
            btn_date.frame=CGRectMake(390, 110, 436, 27);
            [btn_date setImage:[UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"dropdown_s14_ipad_landscape" ofType:@"png"]] forState:UIControlStateNormal];
            lbl_dateValue.frame=CGRectMake(399, 109, 300, 30);
            lbl_category.frame=CGRectMake(185, 160, 180, 30);
            btn_category.frame=CGRectMake(390, 160, 436, 27);
            [btn_category setImage:[UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"dropdown_s14_ipad_landscape" ofType:@"png"]] forState:UIControlStateNormal];
            lbl_categoryValue.frame=CGRectMake(399, 159, 300, 30);
            //btn_radio2.frame=CGRectMake(199, 128, 21, 21);
            lbl_amount.frame=CGRectMake(185, 210, 180, 30);
            txt_amount.frame=CGRectMake(390, 210, 436, 31);
            lbl_currency.frame=CGRectMake(185, 260, 180, 30);
            lbl_currencyValue.frame=CGRectMake(399, 258, 330, 30);
            btn_currency.frame = CGRectMake(390, 260, 436, 27);
            [btn_currency setImage:[UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"dropdown_s14_ipad_landscape" ofType:@"png"]] forState:UIControlStateNormal];
            lbl_typeofCost.frame=CGRectMake(185, 310, 180, 30);
            btn_radio1.frame = CGRectMake(390, 310, 21, 21);
            lbl_allocate.frame = CGRectMake(420, 308, 180, 27);
            btn_radio2.frame = CGRectMake(600, 310, 21, 21);
            lbl_share.frame = CGRectMake(630, 308, 180, 27);
            lbl_typeofCostValue.frame=CGRectMake(399, 348, 430, 30);
            btn_typeofCost.frame = CGRectMake(390, 350, 436, 27);
            [btn_typeofCost setImage:[UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"dropdown_s14_ipad_landscape" ofType:@"png"]] forState:UIControlStateNormal];
            lbl_Description.frame=CGRectMake(185, 394, 180, 30);
            img_inputbox.frame=CGRectMake(390, 400, 436, 61);
            img_inputbox.image=[UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"input_box_s14_1_ipad_landscape" ofType:@"png"]];
            txt_description.frame=CGRectMake(395, 405, 436, 53);
            lbl_placeholder.frame=CGRectMake(402, 405, 350, 21);
            btn_save.frame=CGRectMake(430, 550, 128, 51);
            scrollView.contentSize=CGSizeMake(self.view.frame.size.width, 800);
            lbl_colon1.frame = CGRectMake(378, 58, 5, 30); 
            lbl_colon2.frame = CGRectMake(378, 108, 5, 30);
            lbl_colon3.frame = CGRectMake(378, 158, 5, 30);
            lbl_colon4.frame = CGRectMake(378, 208, 5, 30);
            lbl_colon5.frame = CGRectMake(378, 258, 5, 30);
            lbl_colon6.frame = CGRectMake(378, 304, 5, 30);
            lbl_colon7.frame = CGRectMake(378, 392, 5, 30);

        }
        else
        {
            appDelegate.screenWidth=480;
            [scrollView setContentSize:CGSizeMake(480, 440)];
            img_background.frame=CGRectMake(0, 0, 480,320);
            img_topbar.frame=CGRectMake(0, 0, 480, 44);
            img_background.image=[UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"background_landscape" ofType:@"png"]];
            //lbl_head.frame=CGRectMake(160, 9, 159, 33);

            lbl_friendName.frame=CGRectMake(13, 30, 110, 21);
            btn_friendName.frame=CGRectMake(130, 27, 286, 27);
            [btn_friendName setImage:[UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"drop-down_s6_landscape" ofType:@"png"]] forState:0];


            lbl_date.frame=CGRectMake(13, 67, 95, 21);
            btn_date.frame=CGRectMake(130, 64, 286, 27);
            [btn_date setImage:[UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"drop-down_s6_landscape" ofType:@"png"]] forState:0];

            lbl_category.frame=CGRectMake(13, 106, 95, 21);
            btn_category.frame=CGRectMake(130, 102, 286, 27);
            [btn_category setImage:[UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"drop-down_s6_landscape" ofType:@"png"]] forState:0];
                        //btn_radio2.frame=CGRectMake(199, 128, 21, 21);
            lbl_amount.frame=CGRectMake(13, 143, 95, 21);
            txt_amount.frame=CGRectMake(130, 140, 286, 31);
            lbl_currency.frame=CGRectMake(13, 182, 95, 21);
            btn_currency.frame = CGRectMake(130, 179, 286, 27);
            [btn_currency setImage:[UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"drop-down_s6_landscape" ofType:@"png"]] forState:0];

            lbl_typeofCost.frame=CGRectMake(13, 212, 95, 21);
            btn_radio1.frame=CGRectMake(130, 212, 21, 21);
            lbl_allocate.frame = CGRectMake(155, 212, 100, 21);
            btn_radio2.frame = CGRectMake(275, 212, 21, 21);
            lbl_share.frame = CGRectMake(310, 212, 80, 21);
            btn_typeofCost.frame = CGRectMake(130, 240, 286, 27);
            lbl_typeofCostValue.frame = CGRectMake(135, 242, 250, 21);
            [btn_typeofCost setImage:[UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"drop-down_s6_landscape" ofType:@"png"]] forState:UIControlStateNormal];
            //[btn_provideDate setImage:[UIImage imageNamed:@"dropdown_s5.png"] forState:UIControlStateNormal];
            lbl_Description.frame=CGRectMake(13, 276, 150, 21);
            img_inputbox.frame=CGRectMake(130, 275, 286, 61);
            img_inputbox.image=[UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"input_box_s42_landscape" ofType:@"png"]];
            txt_description.frame=CGRectMake(135, 281, 276, 45);
            lbl_placeholder.frame=CGRectMake(142, 278, 200, 21);
            btn_save.frame=CGRectMake(190, 345, 108, 41);
            //btn_adv.frame=CGRectMake(0, 175, 480, 48);
            lbl_colon1.frame = CGRectMake(119, 27, 5, 27); 
            lbl_colon2.frame = CGRectMake(119, 63, 5, 27);
            lbl_colon3.frame = CGRectMake(119, 102, 5, 27);
            lbl_colon4.frame = CGRectMake(119, 140, 5, 27);
            lbl_colon5.frame = CGRectMake(119, 179, 5, 27);
            lbl_colon6.frame = CGRectMake(119, 208, 5, 27);
            lbl_colon7.frame = CGRectMake(119, 272, 5, 27);
            [self displayProperFontSize];
            }


        }
        if (interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown || interfaceOrientation == UIInterfaceOrientationPortrait)
        { 

            if(UI_USER_INTERFACE_IDIOM()==UIUserInterfaceIdiomPad)
            {
            txt_description.font = [UIFont systemFontOfSize:17];
            appDelegate.screenWidth=768;
            img_background.frame = CGRectMake(0, 0, 768, 1004);
            img_background.image = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"background_ipad" ofType:@"png"]];

            lbl_friendName.frame=CGRectMake(105, 65, 180, 30);
            btn_friendName.frame=CGRectMake(310, 67, 316, 27);
            [btn_friendName setImage:[UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"dropdown_s6_ipad" ofType:@"png"]] forState:0];
            lbl_friendNameValue.frame=CGRectMake(318, 66, 280, 28);
            lbl_date.frame=CGRectMake(105, 116, 180, 30);
            btn_date.frame=CGRectMake(310, 116, 316, 27);
            [btn_date setImage:[UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"dropdown_s6_ipad" ofType:@"png"]] forState:0];
            lbl_dateValue.frame=CGRectMake(315, 116, 278, 26);
            lbl_category.frame=CGRectMake(105, 164, 180, 30);
            btn_category.frame=CGRectMake(310, 166, 316, 27);
            [btn_category setImage:[UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"dropdown_s6_ipad" ofType:@"png"]] forState:0];
            lbl_categoryValue.frame=CGRectMake(318, 167, 273, 26);
            //btn_radio2.frame=CGRectMake(199, 128, 21, 21);
            lbl_amount.frame=CGRectMake(105, 210, 180, 30);
            txt_amount.frame=CGRectMake(310, 210, 316, 31);
            lbl_currency.frame=CGRectMake(105, 260, 180, 30);
            btn_currency.frame = CGRectMake(310, 258,316, 33);
            lbl_currencyValue.frame=CGRectMake(316, 260, 310, 30);
            [btn_currency setImage:[UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"dropdown_s6_ipad" ofType:@"png"]] forState:0];
            lbl_typeofCost.frame=CGRectMake(105, 310, 180, 30);
            btn_radio1.frame=CGRectMake(310, 318, 21, 21);
            lbl_allocate.frame = CGRectMake(340, 318, 100, 21);
            btn_radio2.frame = CGRectMake(445, 318, 21, 21);
            lbl_share.frame = CGRectMake(475, 318, 200, 21);
            btn_typeofCost.frame = CGRectMake(310, 357,316, 33);
            lbl_typeofCostValue.frame=CGRectMake(315, 359, 310, 30);
            [btn_typeofCost setImage:[UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"dropdown_s6_ipad" ofType:@"png"]] forState:0];
            //[btn_provideDate setImage:[UIImage imageNamed:@"dropdown_s5.png"] forState:UIControlStateNormal];
            lbl_Description.frame=CGRectMake(105, 400, 180, 30);
            img_inputbox.frame=CGRectMake(310, 410, 316, 61);
            img_inputbox.image=[UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"input_box_s42_1_ipad" ofType:@"png"]];
            txt_description.frame=CGRectMake(316, 414, 310, 53);
            lbl_placeholder.frame = CGRectMake(322, 414, 290, 21);

            lbl_colon1.frame = CGRectMake(300, 65, 7, 30); 
            lbl_colon2.frame = CGRectMake(300, 114, 7, 30);
            lbl_colon3.frame = CGRectMake(300, 164, 7, 30);
            lbl_colon4.frame = CGRectMake(300, 209, 7, 30);
            lbl_colon5.frame = CGRectMake(300, 260, 7, 30);
            lbl_colon6.frame = CGRectMake(300, 313, 7, 30);
            lbl_colon7.frame = CGRectMake(300, 402, 7, 30);

            btn_save.frame=CGRectMake(300, 550, 128, 51);
            } 
            else
            {
               appDelegate.screenWidth=320;
               [scrollView setContentSize:CGSizeMake(self.view.frame.size.width, self.view.frame.size.height)];
                img_background.frame=CGRectMake(0, 0, 320,480);
                img_background.image=[UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"background" ofType:@"png"]];
                lbl_friendName.frame=CGRectMake(8, 16, 97, 34);
                btn_friendName.frame=CGRectMake(114, 20, 196, 27);
                [btn_friendName setImage:[UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"dropdown_s6" ofType:@"png"]] forState:UIControlStateNormal];

            lbl_friendNameValue.frame=CGRectMake(121, 20, 170, 28);
            lbl_date.frame=CGRectMake(8, 59, 95, 21);
            btn_date.frame=CGRectMake(114, 56, 196, 27);
            [btn_date setImage:[UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"dropdown_s6" ofType:@"png"]] forState:UIControlStateNormal];
            lbl_dateValue.frame=CGRectMake(121, 53, 170, 34);
            lbl_category.frame=CGRectMake(8, 96, 95, 21);
            btn_category.frame=CGRectMake(114, 94, 196, 27);
            [btn_category setImage:[UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"dropdown_s6" ofType:@"png"]] forState:UIControlStateNormal];
            lbl_categoryValue.frame=CGRectMake(120, 90, 166, 34);
            //btn_radio2.frame=CGRectMake(199, 128, 21, 21);
            lbl_amount.frame=CGRectMake(8, 136, 95, 21);
            txt_amount.frame=CGRectMake(114, 131, 196, 31);
            lbl_currency.frame=CGRectMake(8, 170, 95, 21);

            btn_currency.frame =CGRectMake(114, 170, 196, 27);
            [btn_currency setImage:[UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"dropdown_s6" ofType:@"png"]] forState:UIControlStateNormal];
            lbl_typeofCost.frame=CGRectMake(8, 205, 95, 21);
            btn_radio1.frame=CGRectMake(114, 205, 21, 21);
            lbl_allocate.frame = CGRectMake(140, 205, 80, 21);
            btn_radio2.frame = CGRectMake(220, 205, 21, 21);
            lbl_share.frame = CGRectMake(245, 199, 65, 34);
            btn_typeofCost.frame = CGRectMake(114, 233, 196, 27);
            lbl_typeofCostValue.frame = CGRectMake(119, 229, 170, 34);
            [btn_typeofCost setImage:[UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"dropdown_s6" ofType:@"png"]] forState:UIControlStateNormal];
            //[btn_provideDate setImage:[UIImage imageNamed:@"dropdown_s5.png"] forState:UIControlStateNormal];
            lbl_Description.frame=CGRectMake(8, 265, 95, 21);
            img_inputbox.frame=CGRectMake(114, 267, 196, 51);
            img_inputbox.image=[UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"input_box_s16" ofType:@"png"]];
            txt_description.frame=CGRectMake(117, 274, 185, 37);
            lbl_placeholder.frame = CGRectMake(124, 270, 160, 21);
            btn_save.frame=CGRectMake(109, 326, 88, 41);

            lbl_colon1.frame = CGRectMake(105, 20, 5, 27); 
            lbl_colon2.frame = CGRectMake(105, 55, 5, 27);
            lbl_colon3.frame = CGRectMake(105, 94, 5, 27);
            lbl_colon4.frame = CGRectMake(105, 133, 5, 27);
            lbl_colon5.frame = CGRectMake(105, 168, 5, 27);
            lbl_colon6.frame = CGRectMake(105, 201, 5, 27);
            lbl_colon7.frame = CGRectMake(105, 262, 5, 27);
            [self displayProperFontSize];
            }   
        }
        [appDelegate adjustTab];


    }

Этот метод будет вызываться всякий раз, когда вы поворачиваете устройство, вы можете установить кадр в этом методе

     - (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation duration:(NSTimeInterval)duration
        {
        if (interfaceOrientation == UIInterfaceOrientationLandscapeLeft || interfaceOrientation == UIInterfaceOrientationLandscapeRight)
        {
           self.view.frame = CGRectMake(0, 0, 480, 300);

        }
        else
        {
           self.view.frame = CGRectMake(0, 0, 320, 460);

        }
     }
Другие вопросы по тегам