iOS 7 frame.origin.y在方向更改时更改为原始值

时间:2014-06-04 19:13:45

标签: ios objective-c uiview rotation

背景:

我正在使用xCode 5为iOS7编写琐事APP。截至目前,有两种类型的问题1)需要为答案输入文本字段的问题和2)多项选择题。在用户输入/选择答案后,他们点击"检查答案"显示UIView的按钮,该UIView具有评估标签(正确/不正确)和原因标签(这解释了他们的答案正确或不正确的原因)。在查看评估后,用户可以单击下一个问题按钮以显示下一个问题。我必须根据显示的问题类型重新定位检查答案按钮/ Reason Box UIView / Next Question Button,因为文本字段只占用一行,并且多个选项显示在tableview中,因此占用了更多空间。多选题和可能答案包含在一个UIView对象中,而文本问题和文本字段包含在单独的UIView中(我根据显示的问题将隐藏属性切换为true / false)。由于试图根据包含多项选项的UITableView的高度调整原始问题框的问题,我不得不这样做。这一切都很好但是......

我的问题: 如上所述,我可以根据需要通过执行以下操作来移动必要的标签/按钮......

我可以通过执行以下操作来移动检查答案按钮:

//Moves Check Answer back to original position for text field questions
-(void)moveCheckAnswerBack {
    CGRect checkAnswerFrame = self.CheckAnswerButton.frame;
    checkAnswerFrame.origin.y = 126;
    self.CheckAnswerButton.frame = checkAnswerFrame;
}
//Moves Check answer button down for Multiple Choice Questions
-(void)moveCheckAnswerButton {
    CGRect checkAnswerFrame = self.CheckAnswerButton.frame;
    checkAnswerFrame.origin.y = 300;
    self.CheckAnswerButton.frame = checkAnswerFrame;
}

通过执行以下操作,移动UIView(包含评估标签和原因标签)和下一个问题按钮:

 //MOVES REASONS UIView(containing evaluation label and reason label) and Next Button Back to original position for Text Questions
-(void)moveRBoxBack {
CGRect rBoxFrame = self.rBox.frame;
rBoxFrame.origin.y = 174;
self.rBox.frame = rBoxFrame;
self.rBox.hidden= false;
CGRect NBFrame = self.NextQuestionButton.frame;
NBFrame.origin.y = 313;
self.NextQuestionButton.frame = NBFrame;
}
//MOVES REASONS UIView(containing evaluation label and reason label) and Next Button Down for Multiple Choice Questions
-(void)moveRBox {
CGRect rBoxFrame = self.rBox.frame;
rBoxFrame.origin.y = 320;
self.rBox.frame = rBoxFrame;
self.rBox.hidden= false;
CGRect NBFrame = self.NextQuestionButton.frame;
NBFrame.origin.y = 463;
self.NextQuestionButton.frame = NBFrame;
}

问题出现在哪里...如果我改变设备的方向,则所有上述内容都会重新定位到原来的位置,导致它与多项选择问题重叠。 (注意:对于文本字段问题,这不是问题,因为原始位置设置为与文本字段问题一起使用。)

我试图通过调用willRotateToInterfaceOrientation中的相应方法来解决这个问题,如下所示:

-(void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration{
    if (UIInterfaceOrientationIsPortrait(toInterfaceOrientation)) {
        [self reOrderToPortrait];
    } else if (UIInterfaceOrientationIsLandscape(toInterfaceOrientation)){
        [self reOrderToLandScape];
    }
}
-(void) reOrderToPortrait {
    NSString *qType = [_tempDictionary objectForKey:@"question_type"];
    //CHANGE LABEL WIDTH TO CONTRACT TO FIT ON PORTRAIT
    self.LabelWidth.constant = 240;
    self.mcQLabelWidth.constant = 240;
    // CHECK QUESTION TYPE 1 = TEXT 2 = MULTIPLE CHOICE
    if ([qType intValue] == 1) {
        [self moveCheckAnswerBack];
        [self moveRBoxBack];
    } else if ([qType intValue] == 2) {
        [self moveCheckAnswerButton];
        [self moveRBox];
    }

}

-(void)reOrderToLandScape {
NSString *qType = [_tempDictionary objectForKey:@"question_type"];
// CHECK FOR RETINA DISPLAY
if ([[UIScreen mainScreen] scale] == 2.0) {
    //CHECK QUESTION TYPE  1 = TEXT FIELD 2 = MULTIPLE CHOICE
    if ([qType intValue] == 1) {
        [self moveCheckAnswerBack];
        [self moveRBoxBack];
    } else if ([qType intValue] == 2) {
        [self moveCheckAnswerButton];
        [self moveRBox];
    }
    if([UIScreen mainScreen].bounds.size.height == 568){
        // iPhone retina-4.0 inch and change Label width 
        self.mcQLabelWidth.constant = 488;
        self.LabelWidth.constant = 488;
     } else{
        // iPhone retina-3.5 inch and change label width
        self.mcQLabelWidth.constant = 380;
        self.LabelWidth.constant = 380;
     }
  }
}

无论我是从风景出发,定位都搞砸了 - >肖像或来自肖像 - >风景......如果我删除了willRotateToInerfaceOrientation方法,也可能值得注意的是元素仍保留在正确的位置...但是内容会停止缩放到适当的宽度并保持默认的纵向宽度......

我是使用自动布局的新手,所以我不确定这是否是一个约束问题。另外值得注意的是,所有这些都包含在UIScrollview中。

任何帮助将不胜感激...感谢您的提前时间。

0 个答案:

没有答案