ipad横竖屏切换解决方案

news/2024/11/15 15:01:18/
2011年08月01日 星期一 10:09
由于ipad的横竖屏不同,所以好的应用,横竖屏的页面布局也不一样。那么就需要横竖屏的整体解决方案。先看一个横竖屏布局不一样的界面。

上面两张图是来自同一个界面的横竖版的截屏。可以看出,横竖版显示的内容相同,但是界面布局不同。要实现上述布局,主要是运用UIView中 layoutSubviews方法。当UIView设置为自动适配屏幕时,当用户旋转设备的时候,会调用layoutSubviews方法,我们只需重写 这个方法,然后判断用户屏幕的方向。在调整每个空间的位置即可。

下面是实现上述界面的最简单的原型:

首先分析可以知道左面是图片,右面是一个图片加文字的视图。下面就实现一个左面视图右面是一个图加一段字的事例。
事例的截图如下:

其中右面的文字和绿色部分是用一个子视图封装的。
整个布局是我在主视图中添加了一个ContentView视图,在ContentView视图中添加了一个ArticleView视图。
其中ArticleView和ContentView的xib文件都打开了


在ContentView中重写layoutSubviews方法,然后根据stausbar的方向判断当前视图的横竖屏。具体代码:
-(void)layoutSubviews{
[super layoutSubviews];
UIDeviceOrientation interfaceOrientation=[[UIApplication sharedApplication] statusBarOrientation];
if (interfaceOrientation == UIDeviceOrientationPortrait || interfaceOrientation == UIDeviceOrientationPortraitUpsideDown) {
//翻转为竖屏时
[self setVerticalFrame];
}else if (interfaceOrientation==UIDeviceOrientationLandscapeLeft || interfaceOrientation == UIDeviceOrientationLandscapeRight) {
//翻转为横屏时
[self setHorizontalFrame];
}
}

-(void)setVerticalFrame
{
NSLog(@"竖屏");
[titleLable setFrame:CGRectMake(283, 0, 239, 83)];
[leftView setFrame:CGRectMake(38, 102, 384, 272)];
[rightView setFrame:CGRectMake(450, 102, 282, 198)];
}

-(void)setHorizontalFrame
{
NSLog(@"横屏");
[titleLable setFrame:CGRectMake(183, 0, 239, 83)];
[leftView setFrame:CGRectMake(168, 122, 384, 272)];
[rightView setFrame:CGRectMake(650, 122, 282, 198)];
}

在具体的横竖屏方法中,从新设置各个组件的坐标即可。

接下来在ContentView中添加ArticleView视图。
-(id)initWithCoder:(NSCoder *)aDecoder
{
if ((self = [super initWithCoder:aDecoder])) {

NSArray *arrayContentView =[[NSBundle mainBundle] loadNibNamed:@"ArticleView" owner:self options:nil];
rightView=[arrayContentView objectAtIndex:0];
[self addSubview:rightView];
}
return self;
}

由于我用的是xib,所以初始化方法为initWithCoder,在这个中添加新的视图。

同样在ArticleView中设置横竖屏相应空间的坐标即可。
-(void)layoutSubviews{
[super layoutSubviews];
UIDeviceOrientation interfaceOrientation=[[UIApplication sharedApplication] statusBarOrientation];
CGRect rect=self.frame;
rect.size.width=282;
rect.size.height=198;
[self setFrame:rect];
if (interfaceOrientation == UIDeviceOrientationPortrait || interfaceOrientation == UIDeviceOrientationPortraitUpsideDown) {
//翻转为竖屏时
[self setVerticalFrame];
}else if (interfaceOrientation==UIDeviceOrientationLandscapeLeft || interfaceOrientation == UIDeviceOrientationLandscapeRight) {
//翻转为横屏时
[self setHorizontalFrame];
}
}

-(void)setVerticalFrame
{
NSLog(@"竖屏");
[contentView setFrame:CGRectMake(12, 6, 250, 125)];
[textLable setFrame:CGRectMake(50, 139, 182, 39)];
}

-(void)setHorizontalFrame
{
NSLog(@"横屏");
[contentView setFrame:CGRectMake(12, 6, 106, 158)];
[textLable setFrame:CGRectMake(135, 11, 147, 39)];
}

 

layoutSubviews何时调用的问题

layoutSubviews何时调用的问题,这个方法是当你需要在调整subview的大小的时候需要重写(我这个翻译不严谨,以下是原文:You should override this method only if the autoresizing behaviors of the subviews do not offer the behavior you want.),但有时候经常指望它被调用的时候没被调用,不希望它被调用的时候被调用了,搞的很上火。根据国外社区一个人帖子,做了总结性翻译。

layoutSubviews在以下情况下会被调用:

1、init初始化不会触发layoutSubviews
2、addSubview会触发layoutSubviews
3、设置view的Frame会触发layoutSubviews,当然前提是frame的值设置前后发生了变化
4、滚动一个UIScrollView会触发layoutSubviews
5、旋转Screen会触发父UIView上的layoutSubviews事件
6、改变一个UIView大小的时候也会触发父UIView上的layoutSubviews事件

 https://developer.apple.com/library/ios/#samplecode/GLES2Sample/Listings/Classes_ES2Renderer_m.html#//apple_ref/doc/uid/DTS40009188-Classes_ES2Renderer_m-DontLinkElementID_8

 

from:http://www.cnblogs.com/pengyingh/archive/2012/03/25/2417211.html


http://www.ppmy.cn/news/696665.html

相关文章

ARM汇编语言中的符号

在汇编语言程序设计中,经常使用各种符号代替地址(addresses)、变量(variables)和常量(constants)等,以增加程序的灵活性和可读性。尽管符号的命名由编程者决定,但并不是任…

修改系统默认屏幕显示方向横屏或竖屏

在源码frameworks\base\core\java\android\view目录下的windowmanager.java里。 /** * Specific orientation value for a window. * May be any of the same values allowed * for {link android.content.pm.ActivityInfo#screenOrientation}. * If not set, a defa…

强制竖屏横屏

默认情况下,app会随着手机方向的改变进行屏幕切换,手机横向摆放的时候,app屏幕就会切换到横屏,反之切换到竖屏,但是app是一般都是根据竖屏设计的,一旦切换到横屏,布局就会乱掉,所以没…

计算机桌面倒过来了按什么恢复快,win10电脑屏幕倒过来了怎么办

我们现在的日常生活、工作和学习都离不开用电脑,电脑也的确方便了我们的生活,另外也有很好的娱乐休闲作用。我们的电脑有很多按键,但我们通常不知道有什么用,可能一不小心就误按了什么,导致很难恢复。那么电脑屏幕的画…

横竖屏的几种方法

1.媒体查询 media screen and (orientation: portrait){ //竖屏状态下 }media screen and (orientation: landscape) { //横屏状态下 }通过link 实现横竖屏不同的css <link rel"stylesheet" media"all and (orientation:portrait)" href"p…

[转载]电脑屏幕倒过来该怎么办?

不错支持&#xff01; 原文地址&#xff1a;电脑屏幕倒过来该怎么办&#xff1f; 作者&#xff1a;Allen 电脑屏幕倒过来该怎么办 提供以下两种解决方案&#xff1a; 1.桌面--属性--设置--高级--选择你显卡的那一项,然后图形属性--旋转--180度就可以了&#xff1b; 2.一般pc支持…

Android屏幕旋转-横屏竖屏切换

刚实现了App内手机横/竖放置时&#xff0c;屏幕横/竖屏的切换。记录一下中间需要的关键信息和实现过程。 开门见山的说&#xff0c;实现屏幕自动/手动旋转的方式有两种&#xff1a; 一种是在工程的代码中定义&#xff0c;这种方式在横竖屏切换时执行的操作是&#xff1a;销毁当…

横屏竖屏转换

在App Store上的大部分视频播放App中&#xff0c;都实现了竖屏小屏播放以显示更多相关信息&#xff0c;横屏切换到全屏播放&#xff0c;这样的交互显得优雅而大方。最近项目里有个这样的需求&#xff0c;为全屏视频播放加上竖屏模式。下面&#xff0c;让我们一起来实现这个需求…