当前位置: 首页 > 知识库问答 >
问题:

基于设备旋转更新变量-Swift UI

白丁雨
2023-03-14

null

null

    struct ContentView3: View, SizeClassAdjustable {
    
    @Environment(\.verticalSizeClass) var _verticalSizeClass
    @Environment(\.horizontalSizeClass) var _horizontalSizeClass
    var verticalSizeClass: UserInterfaceSizeClass? { _verticalSizeClass }
    var horizontalSizeClass: UserInterfaceSizeClass? { _horizontalSizeClass }
    
    var body: some View {
        if(self.isPadLandscape){
            Text("iPad Landscape")
        }else if(self.isPadPortrait){
            Text("iPad Portrait")
        }else if(self.isPortrait){
            Text("iPhone Portrait")
        }else if(self.isLandscape){
            Text("iPhone Landscape")
        }
    }
}

null

protocol SizeClassAdjustable {
    var verticalSizeClass: UserInterfaceSizeClass? { get }
    var horizontalSizeClass: UserInterfaceSizeClass? { get }
}
extension SizeClassAdjustable {
    
    var isPad: Bool {
        return horizontalSizeClass == .regular && verticalSizeClass == .regular
    }
    var isPadLandscape: Bool {
        isPad && UIDevice.current.orientation.isLandscape
    }
    var isPadPortrait: Bool {
        isPad && UIDevice.current.orientation.isPortrait
    }
    var isPadOrLandscapeMax: Bool {
        horizontalSizeClass == .regular
    }
    var isLandscapeMax: Bool {
        horizontalSizeClass == .regular && verticalSizeClass == .compact
    }
    var isLandscape: Bool {
        verticalSizeClass == .compact
    }
    var isPortrait: Bool {
        verticalSizeClass == .regular
    }
}

共有1个答案

阙星渊
2023-03-14

null

  let screen = UIScreen.main.bounds
    
    if UIDevice.current.userInterfaceIdiom == .phone{ //Phone
    
    if screen.width < screen.height { //Portrait
    } else{ //Landscape
    }
    
    } else{ //iPad
    
    if screen.width < screen.height { //Portrait
    } else{ //Landscape
    }
    
    }

null

 类似资料:
  • 我有一个聊天应用程序,可以打开一个到服务器的Websocket。该应用程序有2个模块- chat sdk:处理连接和来回消息传递。 用户界面:处理适配器和视图 聊天UI位于活动托管的片段上。 一切都很好,但当我决定在设备旋转上使用持久性时,我遇到了问题。当我旋转设备时,websocket重新连接(这是正常的),活动被重新创建,片段也被重新创建。 经过设备旋转和一些调试,我看到我的消息列表被正确填充

  • 问题内容: 我正在为Android创建音乐播放器,并且可以正常工作。问题是,当我水平转动设备时,我会丢失活动中的所有变量(这很有意义,因为它已销毁并重新创建)。 我曾尝试使用捆绑软件通过onSaveInstanceState和onRestoreInstanceState存储播放器的状态,但我仍然无法访问媒体播放器。是否可以通过捆绑方式传递诸如MediaPlayer之类的对象?我应该使用数据库吗?

  • 问题内容: 我有一个具有环境变量的Jenkins从站(Windows PC)。我更新了从站上的Java版本,因此也更新了环境变量。 当我通过Jenkins Web界面查看此Slave的系统属性时,该属性被报告为旧属性。 在Windows PC上运行会显示正确的值。在Slave的Jenkins Node脚本控制台上运行会显示旧的JAVA_HOME值。 我试图再次删除并添加从站,然后重新启动Jenki

  • 我正在编写一个应用程序,它有一个带有按钮和图像的菜单。我按下按钮,按钮的标签从“录制曲目”更改为“停止录制”。问题是,当我旋转设备时,带有按钮的活动会被操作系统终止。因此,我知道我必须在数据在方法中被杀死之前保存数据,然后在我的method中恢复数据。类似这样: 和: 虽然它完美地恢复了我的图像,但我的菜单仍然有问题:由于某些原因,它总是保持为“空”,因此它永远不会更改按钮的标签,尽管每次“活动”

  • 我正在Java中实现一个简单的水平JSlider。没有刻度线之类的东西。可能是人类所能想象的那么简单。 当我试图通过鼠标拖动JSlider左右“移动”它时,它的数值确实会更新(我设置了print语句来报告滑块的变化值,这些值看起来很好)。

  • 旋转变换rotate() 同画圆弧一样,这里的rotate(deg)传入的参数是弧度,不是角度。同时需要注意的是,这个的旋转是以坐标系的原点(0,0)为圆心进行的顺时针旋转。所以,在使用rotate()之前,通常需要配合使用translate()平移坐标系,确定旋转的圆心。即,旋转变换通常搭配平移变换使用的。 最后一点需要注意的是,Canvas是基于状态的绘制,所以每次旋转都是接着上次旋转的基础上