如何计算与窗口大小相关的距离

Posted

技术标签:

【中文标题】如何计算与窗口大小相关的距离【英文标题】:How to calculate distance in relation to the size of the window 【发布时间】:2016-02-22 17:42:20 【问题描述】:

我想让 UIButton 适合所有 iPhone 屏幕:

iPhone 4s iPhone 5 iPhone 5s iPhone 6s Plus

我如何计算与屏幕尺寸相关的距离?

我需要为所有 iPhone 屏幕安装暂停按钮和录制按钮。

实际上,它在 iPhone 6 上看起来很完美,但在 iPhone 6 plus 上却大不相同。

我没有使用 Storyboard!我只需要使用代码就可以做到这一点非常重要!

iPhone 6:

iPhone 6 Plus:

GameViewController:

暂停按钮:

 func addPauseButton() 
        //create Pause Button
        PauseButton = UIButton.init(frame: CGRectMake(self.view!.frame.size.width/2 + 150,self.view!.frame.size.height/2 - 315 ,30,30))

        PauseButton.setImage(UIImage(named: "Pause-Button.png"), forState: UIControlState.Normal)

        PauseButton.addTarget(self, action: "pressedPauseGame:", forControlEvents: .TouchUpInside)

        self.view.addSubview(PauseButton)

录制按钮:

func addRecordButton() 

            startRecordingButton = UIButton.init(frame: CGRectMake(self.view!.frame.size.width/2 + 155 ,self.view!.frame.size.height/2 - 275 ,25,25))

            startRecordingButton.setImage(UIImage(named: "Record-Off.png"), forState: UIControlState.Normal)

            startRecordingButton.addTarget(self, action: "startRecordingButtonTapped:", forControlEvents: .TouchUpInside)

            self.view.addSubview(startRecordingButton)

            stopRecordingButton = UIButton.init(frame: CGRectMake(self.view!.frame.size.width/2 + 155 ,self.view!.frame.size.height/2 - 275 ,25,25))

            stopRecordingButton.setImage(UIImage(named: "Record-On.png"), forState: UIControlState.Normal)

            stopRecordingButton.addTarget(self, action: "stopRecordingButtonTapped:", forControlEvents: .TouchUpInside)

            self.view.addSubview(stopRecordingButton)

    

【问题讨论】:

您说因为 Sprite Kit(在 cmets 中读取)而无法使用自动布局? github.com/mgrebenets/SpriteKitAutoLayout 【参考方案1】:

“故事板”是您的朋友,现在花点时间学习如何使用故事板来为自己节省大量时间,请看下面这张图片,所有按钮都在所有设备上的相同位置,零编码工作。一种绝妙的想法,一些编码领域的老手并没有使用,(或者编码人员太习惯于对计算机屏幕上的每个 x,y 点进行编码)

不幸的是,这些老前辈中的一些人进入了 Apple,然后我们失去了一些东西......比如 xCode 快照......真的太糟糕了,所以要么使用它,要么失去它。

【讨论】:

我不使用情节提要。我正在使用精灵套件,我不能使用自动布局。我正在使用 ViewController,我知道没有故事板也可以做到这一点 您可以轻松地使用带有 spriteKit 或任何其他套件的故事板,您甚至可以进行半程序布局和半故事板,而不必使用自动布局。它可以是另一个视图中的一个视图中的一个视图,其中一些以编程方式布局,以便准确地在屏幕上显示什么。 --- 有人说如果菜单或按钮很简单,那么只需使用 spritekit,但我认为即使有几个按钮,这也可以节省您的时间/精力,只需将按钮指向要在 spritkit 中执行的代码,然后将 spritkit 视图设置为在情节提要视图的视图内工作。【参考方案2】:

实际呈现视图的大小仅在 will-layout 或 will-appear 视图控制器回调中有效,因此,如果您在代码中创建 UI 对象,您可能需要(重新)调整 UI 的框架矩形对象成为您当时想要的视图矩形比例(在那些后来的回调中,而不是接近 init 或启动时间的早期方法)。

当用户在较新的 iPad 上旋转显示屏或对应用程序窗口大小进行其他操作时,还有视图转换回调。

【讨论】:

所以我需要为每个单独的屏幕设置一个单独的屏幕? 每次显示或更改视图时,您都需要(重新)调整每个 UI 对象的框架。 您有视图布局或过渡委托方法吗?你知道你想要的 UI 框架矩形比例吗?任何代码都需要你先做这些。

以上是关于如何计算与窗口大小相关的距离的主要内容,如果未能解决你的问题,请参考以下文章

使用WPF更改与窗口大小相关的字体大小?

窗口尺寸与大小

如何评测一个软件工程师的计算机网络知识水平与网络编程技能水平?

深度学习中CNN的窗口大小如何选择?

如何在 PySpark 中计算不同窗口大小的滚动总和

带有着色器的 2D 照明 - 受窗口大小影响的光半径