Swift 4 中如何阻止背景阻挡其他元素?
How to stop background from blocking other elements in Swift 4?
我目前正在 Swift 4 / Xcode 10 中制作单视图应用程序,其中有一个动画背景和屏幕上的 6 个按钮,每个按钮链接到一个单独的 ViewController。当我 运行 应用程序时,动画背景似乎移动到前层并挡住了所有按钮。如何使按钮显示在背景前面?
问题是,我没有以编程方式创建按钮,而是从界面生成器的对象库中拖放它们。这就是为什么当我尝试发布 here and here 的解决方案时,它不起作用,因为我不知道是否有任何实际代码引用了任何按钮。例如,当我尝试
view.bringSubview(最前面:按钮)
我不确定用什么来代替 theButton,甚至不知道把那段代码放在哪里。
下面是我的 'home screen' 视图控制器上的代码。我最紧迫的问题是我将在哪里插入代码以将按钮移到前面或将背景移到后面。
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)
}
}
Here 就是我的 Main.storyboard 的样子。如果有帮助,层次结构当前为:
视图 > 视频视图 > 视图 > 按钮按钮按钮按钮按钮按钮按钮
第一个视图 -> 视频视图 -> buttonsBgView -> 按钮按钮按钮按钮按钮按钮
不要将 buttonsBgView 添加为视频视图的子视图。 Video View 和 buttonsBgView 应该是 1st View 的子视图。
第一个视图 -> 视频视图
第一个视图 -> buttonsBgView -> 按钮按钮按钮按钮按钮按钮按钮
为 buttonsBgView 创建一个 IBOutlet,并将该视图置于最前面
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)
}
}
我目前正在 Swift 4 / Xcode 10 中制作单视图应用程序,其中有一个动画背景和屏幕上的 6 个按钮,每个按钮链接到一个单独的 ViewController。当我 运行 应用程序时,动画背景似乎移动到前层并挡住了所有按钮。如何使按钮显示在背景前面?
问题是,我没有以编程方式创建按钮,而是从界面生成器的对象库中拖放它们。这就是为什么当我尝试发布 here and here 的解决方案时,它不起作用,因为我不知道是否有任何实际代码引用了任何按钮。例如,当我尝试
view.bringSubview(最前面:按钮)
我不确定用什么来代替 theButton,甚至不知道把那段代码放在哪里。
下面是我的 'home screen' 视图控制器上的代码。我最紧迫的问题是我将在哪里插入代码以将按钮移到前面或将背景移到后面。
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)
}
}
Here 就是我的 Main.storyboard 的样子。如果有帮助,层次结构当前为:
视图 > 视频视图 > 视图 > 按钮按钮按钮按钮按钮按钮按钮
第一个视图 -> 视频视图 -> buttonsBgView -> 按钮按钮按钮按钮按钮按钮
不要将 buttonsBgView 添加为视频视图的子视图。 Video View 和 buttonsBgView 应该是 1st View 的子视图。
第一个视图 -> 视频视图
第一个视图 -> buttonsBgView -> 按钮按钮按钮按钮按钮按钮按钮
为 buttonsBgView 创建一个 IBOutlet,并将该视图置于最前面
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)
}
}