我試圖實現已在iOS 8中引入的新的viewWillTransitionToSize
方法(所有其他旋轉方法已被棄用)。我想知道didRotateFromInterfaceOrientation
的等價物是什麼,因爲我們需要執行一些清理任務,並且我看不到我們可以分配給UIViewControllerTransitionCoordinator
以便在「過渡」時調用的塊一個新的尺寸完成。謝謝。棄用循環方法,等同於'didRotateFromInterfaceOrientation'?
回答
好的發現它,只需要在傳遞的UIViewControllerTransitionCoordinator
上使用animateAlongsideTransition:completion:
方法。
- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator
{
[coordinator animateAlongsideTransition:^(id<UIViewControllerTransitionCoordinatorContext> context)
{
UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation];
// do whatever
} completion:^(id<UIViewControllerTransitionCoordinatorContext> context)
{
}];
[super viewWillTransitionToSize:size withTransitionCoordinator:coordinator];
}
答案的雨燕版本奇怪的
override func viewWillTransitionToSize(size: CGSize, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator) {
coordinator.animateAlongsideTransition({ (UIViewControllerTransitionCoordinatorContext) -> Void in
let orient = UIApplication.sharedApplication().statusBarOrientation
switch orient {
case .Portrait:
println("Portrait")
// Do something
default:
println("Anything But Portrait")
// Do something else
}
}, completion: { (UIViewControllerTransitionCoordinatorContext) -> Void in
println("rotation completed")
})
super.viewWillTransitionToSize(size, withTransitionCoordinator: coordinator)
}
[[UIApplication sharedApplication] statusBarOrientation]
在iOS9已經過時,你必須測試針對UITraitCollection各種設備。
override func willTransitionToTraitCollection(newCollection: UITraitCollection, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator) {
if newCollection.containsTraitsInCollection(UITraitCollection(verticalSizeClass: .Regular)) {
...
}
}
只有setter已被棄用。一位蘋果員工發佈說:「閱讀狀態欄的方向並不被棄用,只能寫入它,如果你在getter上看到這個,這可能是我們構建標題的錯誤。」 (https://forums.developer.apple.com/thread/12937) –
雖然也不贊成getter。根據[文檔](https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIApplication_Class/index.html#//apple_ref/occ/instp/UIApplication/statusBarOrientation)它是。 – Groot
由於問題是:什麼是的didRotateFromInterfaceOrientation
相當於我想我會貢獻代碼如下:
@implementation ViewController
- (void)traitCollectionDidChange:(UITraitCollection *)previousTraitCollection {
[super traitCollectionDidChange:previousTraitCollection];
if (previousTraitCollection.verticalSizeClass == UIUserInterfaceSizeClassRegular) {
NSLog(@"User has rotated to landscape");
} else if (previousTraitCollection.verticalSizeClass == UIUserInterfaceSizeClassCompact) {
NSLog(@"User has rotated to portrait");
}
}
@end
我在模擬器上的iPhone進行測試,但如果使用iPad進行測試,我的打印語句將無法運行,因爲traitsCollection不會更改。
這很奇怪,因爲這正是蘋果recommends:
- (void) traitCollectionDidChange: (UITraitCollection *) previousTraitCollection {
[super traitCollectionDidChange: previousTraitCollection];
if ((self.traitCollection.verticalSizeClass != previousTraitCollection.verticalSizeClass)
|| self.traitCollection.horizontalSizeClass != previousTraitCollection.horizontalSizeClass)) {
// your custom implementation here
}
}
第二個代碼段中缺少括號 –
這是否適用於全屏幕上垂直和水平類都爲Regular的iPad? –
在斯威夫特3接受的答案:
override func willTransition(to newCollection: UITraitCollection, with coordinator: UIViewControllerTransitionCoordinator) {
coordinator.animate(alongsideTransition: { (_) in
let orient = UIApplication.shared.statusBarOrientation
switch orient {
case .portrait:
print("Portrait")
// Do something
default:
print("Anything But Portrait")
// Do something else
}
}, completion: { (UIViewControllerTransitionCoordinatorContext) -> Void in
print("rotation completed")
})
super.willTransition(to: newCollection, with: coordinator)
}
它工作正常,我
在iOS 10上不適用於我 - 它打印舊的方向,而不是新的方向。 –
@VaddadiKartick因爲你應該使用'讓東方= newCollection.verticalSizeClass 開關東方{ 情況下.compact: 打印( 「Lanscape」) //做一些 默認: 打印( 「縱向」) //完成'別的東西 }' –
iOS的10.3 & Swift 3
override func willTransition(to newCollection: UITraitCollection, with coordinator: UIViewControllerTransitionCoordinator) {
coordinator.animate(alongsideTransition: { (_) in
let orient = newCollection.verticalSizeClass
switch orient {
case .compact:
print("Lanscape")///Excluding iPads!!!
default:
print("Portrait")
}
}, completion: { _ in
print("rotation completed")
})
super.willTransition(to: newCollection, with: coordinator)
}
- 1. 是否已棄用didRotateFromInterfaceOrientation?
- 2. 比較循環鏈表等於方法
- 3. for循環中,$ i等於在相同的循環
- 4. for循環同步方法
- 5. 問題與循環/等於==
- 6. 雙等於for循環?
- 7. 持有和等待不同於循環等待?
- 8. 循環方法
- 9. 從不同方法的循環返回
- 10. for循環中的同步方法
- 11. Ruby類似於Haskells循環的方法
- 12. 對於循環錯誤作爲方法
- 13. 由於等於方法實現而導致無限循環的OutOfMemoryError
- 14. For循環調用方法
- 15. 用於在cmd中創建等待循環的語法
- 16. C#等同於Java的Arrays.fill()方法
- 17. Hashcode方法,等於在Java合同
- 18. 觸摸等同於focus()方法?
- 19. MEF方法等同於棱鏡Unity
- 20. PHP for循環:等於或小於 - 工程,等於 - 創建infinte環
- 21. For循環等待完成調用的方法
- 22. 棄用方法addPreferencesFromResources
- 23. GCD棄用方法
- 24. For循環在xCode 7.3上棄用
- 25. Javascript循環,計數器等於0兩次循環
- 26. LinkedHashSet等於方法
- 27. SQL While循環,其中場不能等同於
- 28. 在matlab中實現「不等於」循環
- 29. 什麼是在Outlook 2013中等同於已棄用的ItemContextMenuDisplay
- 30. Swift ++& - 已棄用。一個循環的替代方案
每次我們像didRotateFromInterfaceOrientation一樣旋轉時,這個方法會調用嗎?你可以請我分享你使用的方法。謝謝 – ask123
是的。這是我做: ' - (無效)viewWillTransitionToSize:(CGSize)大小withTransitionCoordinator:(ID)協調{ [協調animateAlongsideTransition:^(ID 上下文){ UIInterfaceOrientation取向= [ [UIApplication sharedApplication] statusBarOrientation]; //做任何事 }完成:^(id context){ }]; [super viewWillTransitionToSize:size withTransitionCoordinator:coordinator]; }' –
strange
謝謝你:)請試試這個 – ask123