切换横竖屏

上一篇文章是写我实现横竖屏之后遇到的问题,这里说一下是怎么实现横竖屏的


首先,因为我做的是其他页面禁止横屏,只要一个页面横屏,那么第一步,需要在AppDelegate中设置只能竖屏 然后在指定界面开启横屏.


- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    self.spOrientation = UIInterfaceOrientationMaskPortrait;

    return YES;

    

}

-(UIInterfaceOrientationMask)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window{

    

    return self.spOrientation;

}


下面是指定页面开启横屏

-(void)viewWillAppear:(BOOL)animated{

    AppDelegate * delegate = [UIApplication sharedApplication].delegate;

    delegate.spOrientation =  UIInterfaceOrientationMaskAll;

}

-(void)viewWillDisappear:(BOOL)animated{

    AppDelegate * delegate = [UIApplication sharedApplication].delegate;

    delegate.spOrientation =  UIInterfaceOrientationMaskPortrait;

}


因为前一个页面要求禁止横屏 则需要在上一个页面写 


- (void)viewWillAppear:(BOOL)animated {


    [super viewWillAppear:animated];

    

    [[UIDevice currentDevicesetValue: [NSNumber numberWithIntegerUIInterfaceOrientationPortraitforKey:@"orientation"];

}

在 HarmonyOS 中实现点击切换屏幕方向(横屏/竖屏)功能,可以通过调用系统提供的 `windowManager` 模块来控制窗口的方向设置。以下是详细的实现方案: ### 实现方式 1. **通过按钮触发屏幕方向切换** 在页面中添加一个按钮组件,当用户点击该按钮时,调用相关 API 切换屏幕方向。 2. **使用 `setWindowProperties` 设置方向** 可以通过 `windowManager.getTopWindow()` 获取当前窗口对象,并调用 `setWindowProperties` 方法设置方向属性。支持的屏幕方向包括: - `AUTO`: 自动旋转 - `LANDSCAPE`: 强制横屏 - `PORTRAIT`: 强制竖屏 - `REVERSE_LANDSCAPE`: 强制反向横屏 - `REVERSE_PORTRAIT`: 强制反向竖屏 示例代码如下: ```typescript import router from '@ohos.router'; import windowManager from '@ohos.window'; @Entry @Component struct OrientationToggle { build() { Column() { Button('切换为横屏') .onClick(() => { this.setOrientation(windowManager.WindowOrientation.LANDSCAPE); }) Button('切换为竖屏') .onClick(() => { this.setOrientation(windowManager.WindowOrientation.PORTRAIT); }) } .width('100%') .height('100%') } private setOrientation(orientation: windowManager.WindowOrientation): void { windowManager.getTopWindow().then((win) => { win.setWindowProperties({ orientation: orientation }); }).catch((err) => { console.error(`Failed to set orientation: ${JSON.stringify(err)}`); }); } } ``` ### 横竖屏监听与响应 为了在屏幕方向变化时更新 UI 或执行特定逻辑,可以注册方向变化的监听器。例如: ```typescript import mediaQuery from '@ohos.mediaquery'; let listener = mediaQuery.matchMediaSync('(orientation: landscape)'); listener.on('change', (mediaQueryInfo: mediaQuery.MediaQueryInfo) => { if (mediaQueryInfo.matches) { console.info('当前为横屏'); } else { console.info('当前为竖屏'); } }); ``` 上述方法可用于在不同方向下展示不同的布局结构,如横屏时左右分栏显示新闻列表和详情[^2]。 ### 注意事项 - 应用必须声明对屏幕方向控制的权限,在 `config.json` 文件中添加以下权限声明: ```json "module": { "reqPermissions": [ { "name": "ohos.permission.SET_WINDOW_ORIENTATION" } ] } ``` - 如果应用需要适配多种屏幕方向下的 UI 布局,建议为不同方向设计独立的页面结构或使用条件渲染控制视图内容[^1]。 - 对于视频类应用,建议结合“锁定旋转”功能,允许用户手动锁定当前屏幕方向,防止因设备传感器变化导致播放体验中断[^3]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值