Подтвердить что ты не робот

Как изменить индекс z или порядок стека UIView?

Я собрал 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, если бы кто-то мог пролить свет на это, я был бы признателен.

Мой вопрос:

Как изменить индекс z или порядок стека UIView в Swift?

4b9b3361

Ответ 1

Я бы порекомендовал посмотреть в UIView documentation, где перечислены несколько методов для управления порядком subviews:

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

В вашей ситуации вы можете попробовать:

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

В качестве альтернативы, поскольку вы создали myGradientView в IB, вы можете изменить иерархию представления, чтобы изменить, какие представления отображаются сверху. Вот изображение, иллюстрирующее:

enter image description here

Надеюсь, что это поможет.

Ответ 2

приведенный ответ

bringSubviewToFront(_:) sendSubviewToBack(_:)

изменилось:

В Swift 3.0

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