0

我有一个UIViewController的子类,当用户界面旋转时(例如,最常见的框架是相同的大小和集中在风景和肖像中)改变其框架。当视图旋转时,视图视觉按预期改变其框架。但结束于新框架区域的控件(按钮,滚动视图等)不会响应触摸。唯一能够回应的控件是保留在原始框架中的控件(因此,如果视图向下移动并向左移动,则右上角的控件或控件的某些部分保持响应。)任何想法发生了什么?旋转UIViews变得没有反应

下面是改变帧代码:

- (void) setLandscape:(bool)bLandscape { 

    if(bLandscape) 
     [self setFrame:m_landscapeFrame]; 
    else 
     [self setFrame:m_portraitFrame]; 
} 

而在直接处理旋转更大的视图控制器:

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration { 

    bool bToLandscape= UIInterfaceOrientationIsLandscape(toInterfaceOrientation); 

    [UIView beginAnimations:NULL context:nil]; 
    [UIView setAnimationDuration:duration]; 

    [m_pCurrentWindowViewController setLandscape:bToLandscape]; 

    // (Some unrelated stuff happens here...) 

    [UIView commitAnimations]; 

} 

对我来说,这似乎是一个错误或设计至少差上苹果公司的一部分 - 绝对不应该有一种观点在视觉上处于一个位置,而在控制方面则是另一个位置。但我只是想找一种方法来解决这个问题。

+0

看起来旧的控件仍然与原始框架相关联。因为你不能直接修改'CGRect',所以如果你想改变这些值的话,我看不出有什么新的选择。我同意这看起来很糟糕的设计。我环顾了'UIControl'类的引用,并没有看到任何将控件与新框架关联的方法。我能想到的唯一的事情就是使用自动修复功能而不是自定义方法 - 如果这可以用于您的程序。 – Dustin 2012-07-13 15:05:23

+0

绝对使用自动调节弹簧/支撑杆 - 从经验上讲,它比试图自己编写更容易,更可靠。 – jwj 2012-07-13 18:16:01

回答

1

我发现的最简单的解决方法是在willRotateToInterfaceOrientation动画之后更新didRotateFromInterfaceOrientation中的帧。