web-dev-qa-db-ja.com

UIViewのzインデックスまたはスタック順序を変更するにはどうすればよいですか?

グラデーションレイヤーを作成するために、既存のコントローラーの上にUIViewを積み重ねました。ただし、ビューをロードすると、新しいUIViewが(当然)すべての上に表示されます。

関連コード:

class ViewController: UIViewController {

    @IBOutlet weak var myGradientView: GradientView!

    override func viewDidLoad() {
        super.viewDidLoad()            
    }

    override func viewDidLayoutSubviews() {
        self.myGradientView.gradientWithColors(UIColor.whiteColor(), UIColor.blueColor())
    }
}

私はいくつかの検索を実行しましたが、私は Objective-Cの答え を使用することを説明しました:

[parentView bringSubviewToFront:view];

Objective-Cがわからないので、Swiftにはかなり慣れていないので、誰かがこれに何らかの光を当てることができれば感謝しています。

私の質問:

SwiftでUIViewのzインデックスまたはスタック順序を変更するにはどうすればよいですか?

35
Dan Beaulieu

UIViewdocumentation を調べることをお勧めします。サブビューの順序を操作するためのいくつかのメソッドがリストされています。

bringSubviewToFront(_:)
sendSubviewToBack(_:)
removeFromSuperview()
insertSubview(_:atIndex:)
insertSubview(_:aboveSubview:)
insertSubview(_:belowSubview:)
exchangeSubviewAtIndex(_:withSubviewAtIndex:)

あなたの状況では、あなたが試すことができます:

self.view.sendSubviewToBack(myGradientView)
// self is your view controller in this case.

または、IBでmyGradientViewを作成したため、ビュー階層を変更して、一番上に表示されるビューを変更できます。以下に説明する図を示します。

enter image description here

お役に立てば幸いです。

70
ABakerSmith

上記の答え

bringSubviewToFront(_:) sendSubviewToBack(_:)

変更されました:

In Swift 3.

view.sendSubview(toBack:yourUIView)
view.bringSubview(toFront:yourUIView)
7
Heki