问题标签 [viewwilltransitiontosize]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
237 浏览

ios - CGAffineTransformMakeRotation 在 vi​​ewWillTransitionToSize 中旋转 UISlider

我想在 iPhone 横向布局中旋转我的 UISlider 并使用此代码来处理它。

self.customSlider.transform = CGAffineTransformMakeRotation(M_PI/2);

但是,我想使用它,-(void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator以便它根据尺寸等级适当地旋转。

我有以下代码,我在其中放置了其他轮换代码

-(void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id)coordinator {

}

我想确保 UISlider 在每个方向上都处于正确的方向,滑块的左边缘在横向顶部,右侧在底部。无论用户如何从纵向向左或向右旋转,我都需要检查旋转以确保滑块处于正确的位置。我怎样才能做到这一点?

编辑:我正在使用 GPUImage 并且预览视图使用该视图的左/右方向,因此我需要找到一个允许我保留它同时还允许通用大小类自定义的实现。

0 投票
1 回答
130 浏览

ios - 在 iOS7 中使用动画处理界面方向

从 iOS8 开始,就有了非常方便的viewWillTransitionToSize方法来处理界面方向的变化。我在我的应用程序中使用以下方式(为了简单起见,我只使用一个elementViewUIView,我想在示例中调整大小):

这个方法可以很好地处理方向变化,在实际旋转的同时为 resize 方法设置动画;再简单不过了。但是,我想同时支持iOS 7iOS8和 iOS9,而这种方法在那儿不可用。所以,我的问题是:

如何使用旧版 iOS7 代码获得相同的平滑动画调整大小结果?

我正在尝试使用willRotateToInterfaceOrientation 之类的方法,但无法确定新界面的确切尺寸以及如何在设备旋转的同时为我的调整大小方法设置动画。我需要更熟悉遗留代码的人的帮助。

0 投票
1 回答
1318 浏览

ios - Swift viewWillTransitionToSize 不使用分屏调用

我正在为 iPad Air 2 和 iPad Mini 4 实现分屏功能。我试图检测分屏大小何时发生变化。作为主应用程序运行时,将执行viewWillTransitionToSize或。willTransitionToTraitCollection如果我的应用程序作为辅助应用程序运行,viewWillTransitionToSize则在打开辅助应用程序或处于横向模式时调用该函数,从屏幕的 1/4 变为 1/2。当我将辅助应用程序从使用屏幕的 1/2 更改为 1/4 时,不会调用任何函数来帮助指示该更改。应该有一个函数调用吗?

0 投票
1 回答
91 浏览

xcode - ios8 上的 SKSceneScaleModeResizeFill 缩放不正确

我使用 Objective C 在 SpriteKit 中编写了一个游戏,它在 ios9 上完美运行,但在 ios8 上看起来很糟糕。我真的很想知道如何解决这个问题,或者通过“纠正”我的错误,或者如果我没有错误,那么通过寻找 ios8 中的错误的解决方法。

我想我已经尽我所能让问题尽可能清晰,包括制作大量屏幕截图来说明问题,以及制作一个尽可能简单同时仍然显示问题的新 Xcode 项目。

如果你想尝试 Xcode 项目,这里是它的链接……。 xcode 项目

如果您想查看问题的屏幕截图,那么这里是屏幕截图的链接。 截图

现在我将尝试解释我编写的代码和屏幕截图中说明的问题。

请记住:我的代码在 iOS9.3 上完美运行。所以我的代码显然不是完全垃圾。但不可否认,我不是处理屏幕旋转的专家,所以我的代码可能会更好。

我应该提一下,两个场景的缩放模式都设置为 SKSceneScaleModeResizeFill。我之所以选择这种模式,是因为在使用 SKSceneScaleModeAspectFill 时,我很难为所有可能的屏幕尺寸(包括 iPhone)进行正确的布局。我希望我能在坚持使用 SKSceneScaleModeResizeFill 的同时解决这个问题。

无论如何,我的应用程序是一个有两个场景的 SpriteKit 游戏。主要场景是您玩游戏的 GameScene。而且这个场景有一个指向 SettingsScene 的指针,你可以在其中更改场景的设置。(例如更改难度级别)。

每当用户旋转屏幕时,GameViewController 都会在 viewWillTransitionToSize 中检测到这种变化,并告诉 GameScene 对象新的屏幕宽度和屏幕高度。然后游戏场景会根据新的屏幕方向调整其精灵的位置,然后将新的屏幕宽度和高度告知其 SettingsScene 对象,以确保设置场景也已正确布局。

请注意,使用这种设计,无论何时用户旋转屏幕,两个场景上的所有精灵都会重新定位,而不管当时哪个场景实际处于活动状态。

正如我之前所说,在 ios9.3 上一切正常。但是在ios8上,结果很糟糕。屏幕截图说明了 ios8 上的一个典型体验示例。如果用户在使用游戏时旋转屏幕然后转到设置屏幕,他会看到一些可怕的东西。并且经常会陷入这种糟糕的体验,因为返回主游戏的​​按钮甚至可能不再适合屏幕。

起初,我似乎无法在设置场景中为横向模式重新定位精灵。但这种解释是错误的。屏幕上的文本显示最后一个布局是在考虑横向的情况下执行的。

那么这里出了什么问题呢?

任何建议都将受到高度高度赞赏。

谢谢!

-j

ps 如果您不想直接查看链接的项目文件,这里有一些关于示例代码的详细信息。GameViewController 实现 viewTransitionToSize 来处理任何屏幕旋转。它直接将新的屏幕尺寸告诉 GameScene,然后再告诉 SettingsScene。考虑到新的屏幕尺寸,两个场景都重新排列了它们的精灵。在ios9上一切顺利。然而,在 ios8 上,不活动的场景在呈现时最终看起来很丑陋,尽管它显然确实根据新的尺寸重新定位了它的精灵。

在此处输入图像描述

0 投票
2 回答
509 浏览

ios - 在ios中禁用自定义键盘的旋转

我正在创建一个自定义键盘,我不想支持横向模式。因此,如果用户将设备旋转到横向模式,则键盘必须仍处于纵向模式。我尝试了以下方法:

但是这些方法都不起作用。旋转设备时触发的唯一方法是:

在这里,我得到旋转后的当前视图大小。但是如何停止旋转?任何帮助将不胜感激。

0 投票
0 回答
88 浏览

ios - iPad 旋转动画滞后

我有一个 iPad 应用程序,需要为纵向和横向显示独特的布局。我正在使用 viewWillTransitionToSize 来实现这一点。我有两个容器视图,每个都有一个视图控制器,所以我的方法如下所示:

我的日志输出如下所示:

所以 viewWillTransitionToSize 不是罪魁祸首。在我得到这个日志输出之后,在旋转动画发生之前有很长的延迟。我主要想知道在我可以调查的 viewWillTransitionToSize 之后触发了哪些其他方法。旋转后布局看起来很好,这只是花费了太多时间。

0 投票
1 回答
411 浏览

ios - 如果在两个类中使用 ViewWillTransitionToSize 不起作用

我想检测不同 ViewController 中的方向变化。我用了这段代码

在我将此代码添加到另一个 ViewController 之前,它运行良好。现在该函数仅在第二个 ViewController 中执行。如果我从那里删除,它会再次开始在第一个 ViewController 中工作。你知道问题是什么吗?

0 投票
1 回答
208 浏览

ios - 如何在 StackView 中使用子视图的属性设置为按比例填充,因为它在旋转设备后重新计算

我已经实现了一个堆栈视图,其中在我的主视图控制器的弹出框内按比例填充了图像、标签、文本和按钮。当我转到弹出框时,我使用视图将出现覆盖,以将我称为 ProfileImage 的图像的角半径定义为其高度的 1/2,以便它显示为圆形。

当我旋转设备时,堆栈会重新计算并更改 profileImage 的大小。我试图使用下面的代码来调整角半径,以便在视图转换时它是一个圆。我已经在完成块和 sideTransition 块中尝试了这段代码。

当我旋转设备时,角半径由 OLD 方向的图像大小设置,而不是 NEW 方向。感觉好像发生了向新方向的过渡,然后堆栈重新计算自己。在这种情况发生之前,角半径似乎会更新。我想帮助了解如何调用图像的高度属性,该属性将是设备旋转后新视图中的高度,并且堆栈根据该新方向重新计算图像大小。

感谢您提供的任何指导。请参阅下面的相关代码:

0 投票
6 回答
17424 浏览

ios - Swift viewWillTransition 未调用

我正在使用UICollectionView. 当用户旋转设备时,我对UICollectionView内部执行更新

func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator)

我以UIViewController模态方式呈现这个并UICollectionView占据了全屏。在 内viewDidLoad,我将流布局创建为:

我的尺寸也为:

当我旋转我的设备时,viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator)永远不会调用,这会导致UICollectionViewLayout不更新。当我旋转设备时,我确实收到了消息:

我在网上阅读过,我可以添加:

UIViewController,但这并没有影响。没有内容或部分插图UICollectionView

我也有super.viewWillTransition函数内的调用。任何人都可以帮助我解决可能导致此问题的原因吗?

0 投票
2 回答
543 浏览

ios - viewWillTransitionToSize 在 TabBarController 中调用错误的 ViewController

我有带有 4 个视图控制器的 tabBarController 应用程序。这个应用程序启用了横向,所以我在每个 viewcontroller.m 文件中都有 viewWillTransitionToSize:(CGSize)size 和TransitionCoordinator:(id)coordinator 来控制方向的变化。

我遇到的问题是,当我在第三个视图控制器中更改设备方向时,第二个视图控制器中的 viewWillTransitionToSize 被调用,因此运行了错误的代码。

第二个视图控制器的 viewWillTransitionToSize 怎么可能被调用?特别是,当它甚至还没有加载时。我知道它尚未加载,因为我 NSLog 它是 viewDidLoad 并且当我从第三个视图控制器更改方向时它会显示。

附加信息:第三个视图控制器的 viewWillTransitionToSize、viewWillAppear、viewWillDisappear 等中没有引用第二个视图控制器的代码。

我正在使用 Xcode 8.2.1 和 Objective-C 代码。请帮忙,谢谢。