【韦德国际1946】详解GALAXY Tab横竖屏切换解决方案

作者: 韦德国际1946  发布:2019-08-19

iOS_21团购_Popover适应三星平板横竖屏切换

终极效果图:

韦德国际1946 1

*代码片段:< 喎?" target="_blank" class="keylink">vc3Ryb25nPjwvcD4KPHA PHByZSBjbGFzcz0="brush:java;">// // DockItemLocation.m // 帅哥_团购 // // Created by beyond on 14-8-13. // Copyright (c) 2014年 com.beyond. All rights reserved. // #import "DockItemLocation.h" // 点击dock上边包车型大巴locationBtn,弹出的Popover封装的调整器,其上方是找寻栏,下方是tableView #import "CityLocationController.h" // 按键上边是图片,下边是文字,那是图表在高度上的比重 #define kImageHeightRatioInBtn 0.5 @interface DockItemLocation() { //popover调控器,创设出来以往,show方法呈现,因而不得以是一些变量,必须用成员变量记住,不然方法btnClick调用达成就销毁了,还什么 彰显捏? UIPopoverController _popoverCtrl; } @end @implementation DockItemLocation - (id)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; if (self) { // 1.调用父类的形式,设置内部的图样 [self setIcon:@"ic_district.png" selectedIcon:@"ic_district_hl.png"]; // 2.活动伸缩 self.autoresizingMask = UIViewAutoresizingFlexibleTopMargin; // 3.设置暗许的文字 [self setTitle:@"定位中" forState:UIControlStateNormal]【韦德国际1946】详解GALAXY Tab横竖屏切换解决方案,三星平板横竖屏切换中的注意点。; self.titleLabel.font = [UIFont systemFontOfSize:16]; self.titleLabel.textAlignment = NSTextAlignmentCenter; [self setTitleColor:[UIColor whiteColor] forState:UIControlStateDisabled]; [self setTitleColor:[UIColor grayColor] forState:UIControlStateNormal]; // 4.设置图片属性 self.imageView.contentMode = UIViewContentModeCenter; // 5.监听点击【Location定位】,弹出二个Popover调控器 [self addTarget:self action:@selector(locationBtnOnDockClicked) forControlEvents:UIControlEventTouchDown]; } return self; } // 5.监听点击【Location定位】,弹出三个Popover调整器 - (void)locationBtnOnDockClicked { // 禁止使用,只可点击叁回 self.enabled = NO; // 点击dock上边的locationBtn,弹出的Popover封装的调控器,其上边是寻觅栏,下方是tableView CityLocationController *cityVC = [[CityLocationController alloc] init]; // 独一多少个不是三回九转自UIViewController的调节器,它一而再自NSObject //popover调控器,成立出来未来,show方法突显,因而不得以是部分变量,必须用成员变量记住,不然方法btnClick调用完结就销毁了,还什么 展现捏? _popoverCtrl = [[UIPopoverController alloc] initWithContentViewController:cityVC]; // 设置那么些Popover调节器的来得的大小 _popoverCtrl.popoverContentSize = CGSizeMake(320, 480); // 代理,监听Popover调整器的XX事件 _popoverCtrl.delegate = self; // 因为别的事办公室法也要显得,_popoverCtrl,所以收取成自定义方法 [self showPopoverCtrl]; // 因为荧屏旋转时,弹出的popover的对准的岗位就狼狈了,所以有不可缺少注册监听显示屏旋转的布告// 先移除监听器,有限援助健壮性 [[NSNotificationCenter defaultCenter] removeObserver:self name:UIDeviceOrientationDidChangeNotification object:nil]; // 再增加八个监听器,一旦器材出现UIDeviceOrientationDidChangeNotification,就能够调用observer的selector方法 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(screenDidRotated) name:UIDeviceOrientationDidChangeNotification object:nil]; } // 5-1,因为侦听到显示器旋转了,也要再度显示_popoverCtrl,所以收取成自定义方法

  • (void)showPopoverCtrl { // 展现到哪个地方? 要是目的view是self自个儿,则rect使用bounds,因为bounds的原点才是相持于自身// 尽管目的view是self.superView,则rect使用frame,因为frame的原点才是对峙于父控件 [_popoverCtrl presentPopoverFromRect:self.bounds inView:self permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES]; } // 5-2,再增添二个监听器,一旦道具出现UIDeviceOrientationDidChangeNotification,就能调用observer的selector方法
  • (void)screenDidRotated { if (_popoverCtrl.popoverVisible) { // 1. 苏息在此之前地方上边的_popoverCtrl [_popoverCtrl dismissPopoverAnimated:NO]; // 2. 0.5秒后创立新的岗位上的_popoverCtrl [self performSelector:@selector(showPopoverCtrl) withObject:nil afterDelay:0.5]; } } #pragma mark - popOver代理方法 - (void)popoverControllerDidDismissPopover:(UIPopoverController *)popoverController { // 消失前,让定位开关恢复生机能够点击状态 self.enabled = YES; // 消失前,即popover被灭绝的时候,移除注册的监听器(文告) [[NSNotificationCenter defaultCenter] removeObserver:self name:UIDeviceOrientationDidChangeNotification object:nil]; } #pragma mark - 销毁时,移除当前对调整器对显示屏的监听,幸免野指针 - (void)dealloc { [[NSNotificationCenter defaultCenter] removeObserver:self]; } #pragma mark - 覆写调节图片和文字在开关中的Frame - (CGRect)imageRectForContentRect:(CGRect)contentRect { CGFloat btnW = contentRect.size.width; CGFloat imgH = contentRect.size.height * kImageHeightRatioInBtn; return CGRectMake(0, 0, btnW, imgH); } - (CGRect)titleRectForContentRect:(CGRect)contentRect { CGFloat btnW = contentRect.size.width; CGFloat textH = contentRect.size.height * (1 - kImageHeightRatioInBtn); // 文字在上边,图片在地点 CGFloat textY = contentRect.size.height - textH; return CGRectMake(0, textY, btnW, textH); } @end

**

最后效果图: 代码片段: vc3Ryb25nPjwvcD4KPHA PHByZSBjbGFzcz0="brush:java;">//// DockItemLocation.m// 靓仔_团购//// Created...

详解平板电脑横竖屏切换化解方案是本文要介绍的内容,不多说,先来看内容。由于ipad横竖屏昔不近年来,所以好的使用,横竖屏的页面布局也不等同。那么就必要横竖屏的全体缓和方案。先看一个横竖屏布局不平等的界面。

不久前商家要搞GALAXY Tab的竖屏版本,使用了PrimaryOverlay的方法体现左边包车型客车菜单栏,在事实上开垦进程中异常超越了部分标题,这里就记录一下吧:

Android横竖屏切换有何差异吗?
个人以为Android的横竖屏切换是因为重力的反响,之后软件的布局会退换,
不过横竖屏切换的切实差别是何等?

韦德国际1946 2 韦德国际1946 3

  1. 设备方向不等于实际方向
  2. 一部分竖屏页面不或者旋转到横屏
  3. Popover出现覆盖难题

地方两张图是发源同贰个分界面包车型大巴横竖版的截屏。可以看出,横竖版显示的内容一致,但是分界面布局分歧。要促成上述布局,主如果选择UIView中layoutSubviews方法。当UIView设置为电动适配显示器时,当用户旋转设备的时候,会调用layoutSubviews方法,大家只需重写这几个法子,然后决断用户荧屏的来头。在调动每一个空间的职分就可以。

有关那多少个难题,其实也并从未特意的分神,只是一念之差会想不到消除思路而已。

上边是完成上述分界面包车型大巴最简便的原型:

配备方向问题

设备方向不可见一直读取[UIDevice currentDevice]的大方向,因为device的大方向还留存FaceUp和FaceDown,要是只行使[UIDevice currentDevice]来赢得的话,会产出识别错误的情状。所以精确的做法应该是先利用[UIDevice currentDevice]赢得,假如是FaceUp也许FaceDown,在选择statusBar的矛头来开始展览辨别,最后获得科学的取向。

先是深入分析能够驾驭左面是图表,右面是三个图形加文字的视图。上面就落到实处叁个左方视图右面是一个图加一段字的例子。

局地页面不可能旋转的主题素材

其一关键是有一对页面是从primaryController弹出的页面,那么些页面在转屏时就能不大概旋转。正确的做法是应用category恐怕共有父类,重写present方法,推断如若是splitController的primaryController在弹出页面,修改为使用splitController弹出。

事例的截图如下:

Popover的遮蔽难题

由于PrimaryOverlay方式下,菜单页面包车型客车面世也是一个popover,借使不开始展览管理的话,就能够导致菜单页面覆盖了原页面包车型大巴popover。那一个标题绝非找到越来越好的秘诀,我也只是在荧屏旋转的时候,把当前页面弹出的popover消失,这样就足以制止出现覆盖的主题材料。当然,还可能有贰个格局,正是在荧屏旋转的时候,假如推断有popover,把情势设置为PrimaryHidden也是能够的。

重大的主题素材也就那样多个吗,轻易的证实和著录一下。

本文由韦德国际1946发布于韦德国际1946,转载请注明出处:【韦德国际1946】详解GALAXY Tab横竖屏切换解决方案

关键词: android iPad 有什么 差别

上一篇:没有了
下一篇:没有了