Как остановить фон от блокировки других элементов в Swift 4? - PullRequest
1 голос
/ 19 мая 2019

В настоящее время я создаю одно приложение для просмотра в Swift 4 / Xcode 10, в котором есть анимированный фон и 6 кнопок на экране, каждая из которых связана с отдельным ViewController. Когда я запускаю приложение, кажется, что анимированный фон перемещается на передний слой и блокирует все кнопки. Как сделать так, чтобы кнопки отображались перед фоном?

Проблема в том, что я не создавал кнопки программно, а вместо этого перетаскивал их из библиотеки объектов в конструкторе интерфейсов. Вот почему, когда я попробовал решения, размещенные здесь и здесь , это не сработало, потому что я не знаю, существует ли какой-либо реальный код, который ссылается на какую-либо из кнопок. Например, когда я пытался

view.bringSubview (toFront: theButton)

Я не был уверен, что поставить вместо кнопки или даже где поместить этот фрагмент кода.

Ниже приведен код, который я имею на моем контроллере вида «домашний экран». Мой самый насущный вопрос - куда мне вставить код, чтобы переместить либо кнопки вперед, либо фон назад?

import UIKit
import AVFoundation
import AVKit

class ViewController: UIViewController {
    @IBOutlet weak var videoView: UIView!

    override func viewDidLoad() {
        super.viewDidLoad()
        setupView()
    }
    private func setupView() {
        let path = URL(fileURLWithPath: Bundle.main.path(forResource: "Ocean_Waves_slow_motion_videvo", ofType: "mov")!)
        let player = AVPlayer(url: path)

        let newLayer = AVPlayerLayer(player: player)
        newLayer.frame = self.videoView.frame
        self.videoView.layer.addSublayer(newLayer)
        newLayer.videoGravity = AVLayerVideoGravity.resizeAspectFill

        player.play()
        player.actionAtItemEnd = AVPlayer.ActionAtItemEnd.none

        NotificationCenter.default.addObserver(self, selector: #selector(ViewController.videoDidPlayToEnd(_:)), name: NSNotification.Name(rawValue: "AVPlayerItemDidPlayToEndTimeNotification"), object: player.currentItem)
    }
    @objc func videoDidPlayToEnd(_ notification: Notification) {
        let player: AVPlayerItem = notification.object as! AVPlayerItem
        player.seek(to: CMTime.zero)
    }
}

Здесь - это то, как выглядит мой Main.storyboard. Если это помогает, иерархия в настоящее время:

Просмотр> Просмотр видео> Просмотр> Кнопка Кнопка Кнопка Кнопка Кнопка Кнопка

1 Ответ

0 голосов
/ 19 мая 2019

1-й вид -> Просмотр видео -> buttonsBgView -> Кнопка Кнопка Кнопка Кнопка Кнопка Кнопка

Не добавляйте buttonBgView в качестве подпредставления Video View. Просмотр видео и кнопки BgView должны быть подвидом первого просмотра.

1-й вид -> Просмотр видео

1-й вид -> buttonsBgView -> Кнопка Кнопка Кнопка Кнопка Кнопка Кнопка

Создайте IBOutlet для кнопок BgView и перенесите это представление на передний план

class ViewController: UIViewController {
    @IBOutlet weak var videoView: UIView!
    @IBOutlet weak var buttonsBgView: UIView!

    override func viewDidLoad() {
        super.viewDidLoad()
        setupView()
        buttonsBgView.backgroundColor = .clear
        view.bringSubview(toFront: buttonsBgView)
    }
}
...