gpt4 book ai didi

ios - 为以编程方式加载的 subview 提供自动旋转支持 - iPad

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:56:56 24 4
gpt4 key购买 nike

我有一个 iPad 项目结构如下:- AppDelegate- 主窗口- 查看 Controller -- 查看

View Controllers .m 文件以编程方式加载另一个 View 并将其定位在屏幕上。此 View 将滑入和滑出。

我这样做:

- (void)viewDidLoad
{
[super viewDidLoad];

CGRect viewRect = CGRectMake(0, 0, 0, 0);
CalculatorView *v = [[[CalculatorView alloc]
initWithFrame:viewRect] autorelease];
[self.view.window addSubview:v];

[UIView beginAnimations:nil context:NULL];
[UIView setAnimationCurve:UIViewAnimationCurveEaseIn];
v.view.frame = CGRectMake(0, 0, 460, 320);
[UIView commitAnimations];
}

我遇到的问题是我在此处添加的 subview 似乎没有正确的方向。该项目仅支持景观,并启动景观。容器 View 很好,它包含一些也很好的按钮。然而,这个以编程方式加载的 View 停留在纵向模式。我提供了以下自动旋转代码(在加载 View 的 .m 中):

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
// Return YES for supported orientations
return (interfaceOrientation == UIInterfaceOrientationLandscapeLeft || interfaceOrientation == UIInterfaceOrientationLandscapeRight);
}

但它永远不会被调用。

那么,如何让以编程方式添加的 subview 以横向而非纵向模式加载?TIA!

最佳答案

UIView 类不接收方向更改消息。

(特别是 shouldAutorotateToInterfaceOrientation 方法,它是一个 UIViewController 方法)

http://developer.apple.com/library/ios/#documentation/uikit/reference/UIViewController_Class/Reference/Reference.html#//apple_ref/doc/uid/TP40006926-CH3-SW23

您必须在 View 中手动添加一个方法来通知它方向已更改,您应该在 Controller shouldAutorotateToInterfaceOrientation 方法中调用此方法。

为此,您必须在 Controller 中创建对 View 的引用并自行处理内存。

@interface MyController : UIViewController {

CalculatorView *_calculatorView;

}

@end

@implementation MyController


- (void)viewDidLoad
{
[super viewDidLoad];

CGRect viewRect = CGRectMake(0, 0, 0, 0);

//inits _calculatorView without the autorelease. Will be released in the dealloc method
_calculatorView = [[CalculatorView alloc]
initWithFrame:viewRect];
[self.view.window addSubview:v];

[UIView beginAnimations:nil context:NULL];
[UIView setAnimationCurve:UIViewAnimationCurveEaseIn];
_calculatorView.view.frame = CGRectMake(0, 0, 460, 320);
[UIView commitAnimations];
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
//calls custom interface orientation method
[_calculatorView MyInterfaceChangedCustomMethod:interfaceOrientation];

// Return YES for supported orientations
return (interfaceOrientation == UIInterfaceOrientationLandscapeLeft || interfaceOrientation == UIInterfaceOrientationLandscapeRight);
}

-(void) dealloc {

[_calculatorView release];
[super dealloc];
}



@end

编辑:如果您的 CalculatorView 很简单,并且您只需要在设备旋转后正确更改其框架,我认为最好的方法是使用类似于以下 View 的 autoresizingMask

_calculatorView = [[CalculatorView alloc] 
initWithFrame:viewRect];
_calculatorView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;

关于ios - 为以编程方式加载的 subview 提供自动旋转支持 - iPad,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5957903/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com