我想知道是否有其他人发生过这种情况.我有一个iPhone应用程序,我已经更新超过一年,它已经在我的iPad2,iPhone 3GS,以及4G,4GS和5上工作得很好.但是,就在最近我获得了一个iPad3来测试应用程序.发生了一件非常奇怪的事情:当应用程序通过Xcode在开发中加载时,它会出现并且看起来很完美 - 但是,它根本不会响应任何触摸.我有一个警告,在加载时弹出,你可以关闭它,但实际的主视图控制器不会对任何拖动或触摸手势作出反应 - 它基本上是冻结的.然而!当我旋转设备并且App正确旋转时,它突然开始正常工作,即使我把它旋转回来!在正常和视网膜上运行iOS6的iPad的模拟器也做同样的事情,即使它在我的iPad2上工作得很好.但是,iPhone的模拟器工作得很好.
就像我说的,这不会发生在任何其他设备上.即使以相同的方式加载所有设备也允许像正常一样轻敲.以下是我能够确认的内容:
如果所有的iPhone都能正常工作且iPad没有,那么这将是有道理的.但我的ipad2工作正常.另外,如果我使用iPad3打开它,它就会冻结.但!如果我按下2X按钮,即使没有旋转,它也会再次开始工作.
我还决定测试它是否可以作为通用应用程序.在iPad3上,当我将它切换到Universal时,它可以正常工作.因此,模拟器必须进行一些奇怪的事情.有任何想法吗?
谢谢!!
-标记
我有一个动态的按钮设置,可根据故事板中设置的自动布局约束自动调整宽度和高度.在纵向时,按钮具有相等的宽度和高度,因此框架是完全正方形的,当设备旋转到横向时,按钮变得更短更宽.我已经设置cornerRadius了按钮的图层,因此它们在纵向时是完美的圆形并且效果很好,但是当我旋转到横向时,角落半径看起来不再明显.我需要改变它,所以它变成了椭圆形.问题是,无论我在哪里尝试放置代码,我都无法获得旋转发生后按钮的正确宽度和高度.我希望在旋转设备时发生这种情况 - 不想等到旋转完成.理想情况下cornerRadius 在过渡动画时会为变化添加动画效果.
如果我使用viewWillLayoutSubviews或者viewDidLayoutSubviews,它在应用程序启动时正确获取按钮框架,但在旋转到横向时,在为新方向更新按钮的框架之前调用此方法,因此我无法计算正确的角半径.
如果我使用viewWillTransitionToSize:withTransitionCoordinator:或willTransitionToTraitCollection:withTransitionCoordinator:或者willRotateToInterfaceOrientation,当应用程序被启动,并在旋转架为新的大小更新之前,它被称为设备就不会被调用.
如果我使用willAnimateRotationToInterfaceOrientation,则在启动应用程序时不会调用它,但在旋转设备时它会正确获取新的按钮框.但是这种方法已被弃用.
所以问题是,您可以使用什么方法根据旋转完成时按钮的大小来设置按钮的属性,这是在旋转完成之前调用的?
请注意,需要为每个方向更改调用它,而不仅仅是大小类更改(旋转iPad不会更改大小类).我只需要支持iOS 8.0+.
这是我在方法中放置的代码,以确定它是否获得正确的大小:
println("\(button.frame.size.width) x \(button.frame.size.height)")
Run Code Online (Sandbox Code Playgroud) 我已经通过不同的帖子和问题来处理轮换和AsyncTask.在每篇文章中都提到使用android:configChanges
是一种不好的做法.但我没有找到为什么气馁的实际原因以及为什么这是一个不好的做法.如果我们android:configChanges用来处理方向有什么缺点.
注意:
我知道它已经回答了如何处理方向和AsyncTask.但我想知道不使用的原因android:configChanges.
我的应用程序用于GLKit渲染3D场景OpenGL ES.
一切都很好,除了一件事.当我在iPad中启动我的应用程序并显示后台应用程序栏(单击双击"主页"按钮)然后更改设备的方向时,场景会被错误更新(最后渲染的图像只是拉伸以填充新的矩形).
我找到了原因.当出现后台应用程序栏时,GLKViewController's paused将YES自动设置(应用程序委托接收-applicationWillResignActive:),并且在此栏关闭之前不会进行渲染.
我在Apple指南(iOS的OpenGL ES编程指南/实现多任务感知的OpenGL ES应用程序)中找到了,在收到-applicationWillResignActive:应用程序后应停止GL渲染或终止.所以似乎一切都好,除了轮换后的糟糕渲染:)
我检查了一些OpenGL游戏.当显示此栏时,它们也会"暂停",但不知何故正确更新设备旋转时暂停的场景.他们是如何做到这一点的?
我在ipad上有uiviewcontroller这个配置:
shouldAutorotate (true)
supportedInterfaceOrientations (UIInterfaceOrientationMaskAll)
在里面willRotateToInterfaceOrientation我执行一些技巧来调整我的界面.
从这个控制器的一个孩子,我展示了一个带有这个-poor-代码的QuickLookController.
[[[[[UIApplication sharedApplication] delegate] window] rootViewController] presentViewController:previewController animated:YES completion:nil];
Run Code Online (Sandbox Code Playgroud)
但是,如果我旋转我的ipad方法willRotateToInterfaceOrientation没有被调用,所以我无法做到调整界面的技巧.
有人可以解释我或给我一些建议吗?谢谢
uiviewcontroller ipad screen-rotation presentmodalviewcontroller
当我旋转设备时,Google地图v2会刷新.如何防止此刷新发生?我正在SherlockFragment的标签中动态添加地图.
在采用新的时候,UISplitViewController我试图将更改作为使用UISplitViewControllerDisplayModeAutomatic模式时发生的默认行为.
在纵向工作时,我希望在用户触发推送到细节侧时隐藏主要叠加层.默认情况下,覆盖图保持在屏幕上,直到用户点击细节一侧.
我已尝试将以下内容与委托人一起使用:
- (BOOL)splitViewController:(UISplitViewController *)splitViewController showDetailViewController:(UIViewController *)vc sender:(id)sender
{
if (splitViewController.displayMode == UISplitViewControllerDisplayModePrimaryOverlay) {
[UIView animateWithDuration:0.3 animations:^{
splitViewController.preferredDisplayMode = UISplitViewControllerDisplayModePrimaryHidden;
}];
}
return NO;
}
Run Code Online (Sandbox Code Playgroud)
这给了我在肖像中所需的行为,但这打破了横向模式(我想表现得像UISplitViewControllerDisplayModeAllVisible).如果您已完成推动然后旋转设备,则左侧仍然是隐藏的(如预期的那样).我无法找到一个appriprite地方来重新设置旋转的首选模式以显示左侧(因为特征集合不能用于告诉iPad上的风景与肖像).
如何手动触发覆盖的解雇?
Dupe注意: iOS8已经UISplitViewController完全改变了,所以在2014年 6月之前所有其他的SO答案都可能是错误的(我已经挖掘了很多,只是因为)
uisplitviewcontroller screen-rotation ios ios-universal-app ios8
iOS 9.0(13A340)Xcode 7.0(7A220)OS X 10.10.5(14F27)
我有一种情况,如果我旋转模拟器或设备(使用iPhone 6s SIM和iPhone 6+设备),动画也不会发生.我不确定为什么会这样.我没有做任何异常或疯狂的任何UIKit方法,我没有调用任何方法不在主线程上.此外,UIView我添加的其他动画似乎工作得很好.只是旋转被打破了.其他应用似乎很好.我不确定我做错了什么.
试图找出/解决:
UIKit主线程上是否有任何执行.UIView.areAnimationsEnabled()程序执行中多个点的值.它总是打印出来true.UIView.setAnimationsEnabled(true)没有修复.我正在使用自定义的"nav"视图控制器(我制作的一个):SASlideDrawer(注意我单独使用此项目时没有遇到同样的问题)
谢谢.
我想做这样的事情:
基本上,我使用的是一个UICollectionView和细胞(3个不同.xib).
到目前为止,它的确有效.
我想做的是:
autoheightUIColectionView
2.1 添加1行如果平板电脑,则在纵向上将有2行并且横向3行.(基本上与第2点相同,只增加1行.我有这样的事情:
extension ViewController {
override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator){
setSizeSize()
}
func setSizeSize(){
if(DeviceType.IS_IPAD || UIDevice.current.orientation == .landscapeLeft || UIDevice.current.orientation == .landscapeRight){
if let layout = myCollectionView.collectionViewLayout as? UICollectionViewFlowLayout {
layout.estimatedItemSize = CGSize(width: 1, height: 1)
layout.invalidateLayout()
}
}else{
if let layout = myCollectionView.collectionViewLayout as? UICollectionViewFlowLayout {
layout.estimatedItemSize = UICollectionViewFlowLayoutAutomaticSize
layout.invalidateLayout()
}
}
myCollectionView.collectionViewLayout.invalidateLayout()
}
}
Run Code Online (Sandbox Code Playgroud)
不行.此外,它冻结设备.在模拟器上工作特殊.(我相信更多的设备)
我也尝试过这个,但它有时会起作用......
如果您需要更多信息,请告诉我.
提前谢谢大家的帮助.
我正在开发一个使用视图控制器的应用程序,并且正在慢慢迁移到使用使用 SwiftUI 构建的视图。
我正在开发新的 swiftUI 视图,因此我将 UIHostingController 设置为 SceneDelegate 中的 rootViewController
总的来说,我的整个应用程序仅限于此处的纵向
我希望允许在左侧纵向和横向显示一些个人视图
这是我到目前为止所使用的 swiftUI,它在 iOS 15 中完美运行
在 AppDelegate 我有
static var orientationLock = UIInterfaceOrientationMask.portrait
Run Code Online (Sandbox Code Playgroud)
然后在方法中
func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask
Run Code Online (Sandbox Code Playgroud)
这设置为返回
return AppDelegate.orientationLock
Run Code Online (Sandbox Code Playgroud)
然后在特定的 swiftUI 文件中我想要允许旋转,我只需通过将此修改器添加到主视图来处理屏幕旋转
.onReceive(NotificationCenter.default.publisher(for: UIDevice.orientationDidChangeNotification)) { _ in
if orientation.isLandscape {
AppDelegate.orientationLock = UIInterfaceOrientationMask.landscapeLeft
UIDevice.current.setValue(UIInterfaceOrientation.landscapeLeft.rawValue, forKey: "orientation")
UINavigationController.attemptRotationToDeviceOrientation()
} else {
AppDelegate.orientationLock = UIInterfaceOrientationMask.portrait
UIDevice.current.setValue(UIInterfaceOrientation.portrait.rawValue, forKey: "orientation")
UINavigationController.attemptRotationToDeviceOrientation()
}
}
.onDisappear {
DispatchQueue.main.async {
AppDelegate.orientationLock = UIInterfaceOrientationMask.portrait
UIDevice.current.setValue(UIInterfaceOrientation.portrait.rawValue, forKey: "orientation")
UINavigationController.attemptRotationToDeviceOrientation() …Run Code Online (Sandbox Code Playgroud) screen-rotation ×10
ios ×6
ipad ×3
swift ×3
android ×2
ios8 ×2
animation ×1
autosize ×1
glkit ×1
ios16 ×1
iphone ×1
objective-c ×1
rows ×1
size-classes ×1
swiftui ×1