141

iOS 8 で導入された新しいメソッドを実装しようとしviewWillTransitionToSizeています (他のすべての回転メソッドは廃止されました)。実行する必要がある多くのクリーンアップ タスクがあり、新しいブロックへの「移行」時に呼び出すためにdidRotateFromInterfaceOrientation割り当てることができるブロックが表示されないため、現在の同等物が何であるかを知りたいです。UIViewControllerTransitionCoordinatorサイズ仕上げ。ありがとう。

4

7 に答える 7

72

奇妙な答えのSwiftバージョン

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)
}
于 2015-03-10T08:12:33.433 に答える
10

iOS 10.3 & スウィフト 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)
    }
于 2017-04-11T12:00:29.990 に答える
7

Swift 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)
}

それは私にとってはうまくいきます

于 2016-11-18T16:34:57.313 に答える
3

[[UIApplication sharedApplication] statusBarOrientation]iOS9 では非推奨です。さまざまなデバイスのUITraitCollectionに対してテストする必要があります。

  override func willTransitionToTraitCollection(newCollection: UITraitCollection, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator) {

    if newCollection.containsTraitsInCollection(UITraitCollection(verticalSizeClass: .Regular)) {
      ...
    }
  }
于 2015-10-19T12:50:22.247 に答える