ipad横竖屏切换解决方案

ipad横竖屏切换解决方案,第1张

概述2011年08月01日 星期一 10:09 由于ipad的横竖屏不同,所以好的应用,横竖屏的页面布局也不一样。那么就需要横竖屏的整体解决方案。先看一个横竖屏布局不一样的界面。 上面两张图是来自同一个界面的横竖版的截屏。可以看出,横竖版显示的内容相同,但是界面布局不同。要实现上述布局,主要是运用UIView中 layoutSubviews方法。当UIView设置为自动适配屏幕时,当用户旋转设备的时候 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,239,83)];
[leftVIEw setFrame:CGRectMake(38,102,384,272)];
[rightVIEw setFrame:CGRectMake(450,282,198)];
}

-(voID)setHorizontalFrame
{
NSLog(@"横屏");
[TitleLable setFrame:CGRectMake(183,83)];
[leftVIEw setFrame:CGRectMake(168,122,272)];
[rightVIEw setFrame:CGRectMake(650,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,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

总结

以上是内存溢出为你收集整理的ipad横竖屏切换解决方案全部内容,希望文章能够帮你解决ipad横竖屏切换解决方案所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1089362.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-27
下一篇 2022-05-27

发表评论

登录后才能评论

评论列表(0条)

保存