如何计算与窗口大小相关的距离
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 框架矩形比例吗?任何代码都需要你先做这些。以上是关于如何计算与窗口大小相关的距离的主要内容,如果未能解决你的问题,请参考以下文章