【Swift】UIViewを2分割で配置する

開発

こんなView2つを、画面の縦横に合わせて長辺を2等分して表示させる処理を実装します。

2015-03-01-20.22.06

Auto Layoutさせない

いくらプログラムでいじってもAuto LayoutがONになってたらそっちが勝ってしまうので、

2015-03-01-20.22.22

Use Auto Layoutのチェックを外します。

スクリーンサイズによってViewのRectを変更する

こんな関数を用意します。

    func resizeView(screenSize: CGSize) {
        var newView1Rect:CGRect
        var newView2Rect:CGRect
        if (screenSize.width > screenSize.height) {
            newView1Rect = CGRectMake(0, 0, screenSize.width / 2, screenSize.height)
            newView2Rect = CGRectMake(screenSize.width / 2, 0, screenSize.width / 2, screenSize.height)
        } else {
            newView1Rect = CGRectMake(0, 0, screenSize.width, screenSize.height / 2)
            newView2Rect = CGRectMake(0, screenSize.height / 2, screenSize.width, screenSize.height / 2)
        }
        View1.frame = newView1Rect
        View2.frame = newView2Rect
    }

で、Viewの初期表示時と画面向き変更時にそれを呼び出します。

    override func viewWillAppear(animated: Bool) {
        resizeView(UIScreen.mainScreen().bounds.size)
    }
    
    override func willRotateToInterfaceOrientation(toInterfaceOrientation: UIInterfaceOrientation, duration: NSTimeInterval) {
        let screenSize: CGSize = UIScreen.mainScreen().bounds.size
        var newScreenSize:CGSize;
        if ((toInterfaceOrientation.isLandscape && screenSize.width < screenSize.height) || (toInterfaceOrientation.isPortrait && screenSize.width > screenSize.height)) {
            newScreenSize = CGSizeMake(screenSize.height, screenSize.width)
        } else {
            newScreenSize = CGSizeMake(screenSize.width, screenSize.height)
        }
        resizeView(newScreenSize)
    }

画面向き変更時の処理はスクリーンの縦横を入れ替えて処理しますが、
180度回転するような場合もあるので、toInterfaceOrientationで向きを把握してメソッドに渡すRectを調整するか判断します。

2015.03.01-21.38.34

これで横にしても長辺でViewが分割されます。

コメント

タイトルとURLをコピーしました