所有控制器上的快速播放器小部件(代码片段)

author author     2023-05-13     488

关键词:

我在我的应用程序中做广播播放器。并希望拥有带有信息+控制按钮的小部件,这些按钮将在播放时保留在应用程序中的所有控制器上。就像在itunes或像谷歌chromecast容器一样,将从底部推送其他viewcontroller的所有元素(不是覆盖元素)

enter image description here

我知道覆盖视图可以在appdelegate中添加到keywindow,因为GoogleCast Container添加了:

let appStoryboard = UIStoryboard(name: "Main", bundle: nil)
let navigationController = appStoryboard.instantiateViewController(withIdentifier: "MainNavigation")
let castContainerVC: GCKUICastContainerViewController = GCKCastContext.sharedInstance().createCastContainerController(for: navigationController)
castContainerVC.miniMediaControlsItemEnabled = true
self.window = UIWindow(frame: UIScreen.main.bounds)
self.window?.rootViewController = castContainerVC
self.window?.makeKeyAndVisible()

但我无法理解,我如何设计和实例化我的控制器+添加到窗口+隐藏什么都没有播放。

我忘了提,该应用程序已经启动并运行。导航栏内有大约30个视图控制器

答案

我会在当前窗口的顶部创建一个窗口,我将放置该无线电视图。然后,无线电视图将始终位于标准窗口中的视图层次结构之上。要允许触摸事件由无线电窗口下的标准窗口处理,您需要在无线电窗口中覆盖hitTest,以确保它不会处理不应由它处理的事件。

您可以将此作为示例:

import UIKit

class RadioController: UIViewController 

    fileprivate struct Static 
        static let window: UIHigherWindow = 
            let window = UIHigherWindow(frame: UIScreen.main.bounds)
            window.rootViewController = RadioController()
            window.windowLevel = UIWindowLevelAlert - 1
            return window
        ()
    

    override func loadView() 
        // use passView, as it will pass the touch events tu underlying window
        self.view = PassView()
        self.view.backgroundColor = UIColor.clear
    

    override func viewDidLoad() 
        super.viewDidLoad()

        // configure whatever subview you want, in your case the radio view
        let radioView = UIView(frame: CGRect(x: 0, y: UIScreen.main.bounds.height - 50, width: UIScreen.main.bounds.width, height: 50))
        radioView.backgroundColor = .red
        self.view.addSubview(radioView)
    

    override var preferredStatusBarStyle: UIStatusBarStyle 
        // this will now define the status bar style, as it will become the topmost window for most of the time
        return .default
    

    static var showing: Bool 
        get 
            return !Static.window.isHidden
        
    

    static func present() 
        Static.window.isHidden = false
    

    static func hide() 
        Static.window.isHidden = true
    


// MARK: Passing touch events to the back view
class PassView: UIView 

class UIHigherWindow: UIWindow 

    // this will allow touch events to be processed by the default window
    override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? 
        let hitView = super.hitTest(point, with: event)
        if hitView!.isKind(of: PassView.self) 
            return nil
        
        return hitView
    

另一答案

  1. 将初始视图控制器嵌入容器视图控制器中
  2. 将子视图添加到容器vc的视图底部
  3. 对齐子视图,使它们位于主视图下方的屏幕外
  4. 创建一种方法,在调用时将子视图从底部设置为适当的位置,将另一个方法设置为将子视图设置为底部下方的动画
  5. 在适当的代码中调用动画方法

笔记

您将需要向容器vc添加自定义类,以便可以在其上调用动画方法

android桌面小部件appwidget开发(代码片段)

...get,这样能方便地使用。典型的程序有时钟、天气、音乐播放器等。AppWidget是Android系统应用开发层面的一部分,有着特殊用途,使用得当的化,的确会为app增色不少, 查看详情

如何将所有分类结果打印到 GUI 上的文本小部件?

】如何将所有分类结果打印到GUI上的文本小部件?【英文标题】:HowcanIprintalltheclassificationresultstotheTextwidgetonmyGUI?【发布时间】:2021-10-3103:13:11【问题描述】:我有一个图形用户界面,可以将图像分类为正确或错误。如何在文本... 查看详情

phpwordpress|禁用页面模板上的侧边栏,小部件(代码片段)

查看详情

python从布局中删除所有小部件(代码片段)

查看详情

php[woocommercecore]让触摸设备上的价格小部件可拖动(代码片段)

查看详情

php论文wp中选定页面上的自定义小部件(代码片段)

查看详情

php[woocommercecore]让触摸设备上的价格小部件可拖动(代码片段)

查看详情

Flutter 小部件显示在所有屏幕上

...描述】:我有音乐列表屏幕,当按下播放音乐时,小音乐播放器显示在屏幕末尾。如果单击或向上滚动,将显示全屏音乐播放器。用户可以单击按钮折叠全屏音乐播放器。我正在使用sliding_up_panel插件来实现这一点。所以我的问... 查看详情

此应用小部件片段中所有意图 (PendingIntents) 的逻辑流

】此应用小部件片段中所有意图(PendingIntents)的逻辑流【英文标题】:LogicalFlowofallIntents(PendingIntents)inthisappwidgetsnippet【发布时间】:2014-11-0321:53:48【问题描述】:我正在学习如何在Android中构建主屏幕小部件。此代码用于应用小部... 查看详情

uniapp窗口小工具桌面小部件微件ba-appwidget(代码片段)

...工具(桌面小部件、微件)插件,默认为音乐播放器的样式,有其他界面需要,可联系作者定制。支持点击事件监听支持动态更改页面内容支持设置小工具的预览图片支持自定义样式截图展示使用方法在script... 查看详情

1.窗口组件小部件-qwidgt(代码片段)

一、前言QWidget翻译过来是小部件的意思,QWidgt类是所有用户界面对象的基类。窗口部件是用户界面的一个基本单元:它从窗口系统接收鼠标、键盘和其它事件,并且在屏幕上绘制自己。每一个窗口部件都是矩形的,并且它们按Z... 查看详情

kendoui好用的小部件--grid(代码片段)

KendoUiGrid控件,继承至Widget。https://demos.telerik.com/kendo-ui/grid/index 快速上手教程 下面的代码来自本教程做表格时非常方便,具有非常强大的功能:<divid="grid"></div><script>$(document).ready(function()$("#grid" 查看详情

小部件上的 dojo 查询

...否用于查找具有某些属性的小部件?例如,如果我想获取所有类型为hidden的输入小部件的列表。在我看来,dojo.query仅适用于DOM对象,并不意味着与对象一起使用。这是正确的吗?例如,dojo.query(\'input[type=hidden]\')通常适用于常规H... 查看详情

Jupyter - 在图形上使用播放头播放音频的小部件

...述】:是否有任何Jupyter小部件用于可视化与时间序列图上的播放头同步的音频?我想可视化从音频样本(例如频谱图和各种计算信号)中获得的数据,在收听音频样本的同时看到播放头在图上移动。我发现了这个老gisthttps://gis 查看详情

获取元素内的所有小部件

】获取元素内的所有小部件【英文标题】:getallwidgetsinsideanelement【发布时间】:2010-05-3108:42:50【问题描述】:从dijit.registry上的dojodocuments,我看到forEach方法接受最后一个参数thisObject。但这并不代表那个对象是什么。它是dijit小... 查看详情

Android 小部件+服务

...613:21:09【问题描述】:我有一个使用服务播放音乐的音乐播放器,该服务中的所有广播接收器都在服务内部而不是外部定义。我对小部件完全陌生,所以我看过一些教程。但它们对我帮助不大我对未决意图完全陌生。我现在很困... 查看详情

uniapp窗口小工具桌面小部件微件(日历时间)ba-awcalendars(代码片段)

...图片同类插件窗口小工具、桌面小部件、微件(音乐播放器)Ba-AppWidget(文档)截图展示使用方法在script中引入组件 constawCalendar=uni.requireNativePlugin('Ba-AwCalendarS')在script中调用(示例参考,可根据... 查看详情

显示尽可能大的所有小部件(代码片段)

...题视为Gtk::DrawingArea。我有3到9个相机之间的东西。我希望所有摄像机始终在屏幕上尽可能大地组织在网格中,并且所有摄像机图像应具有相同的大小。有没有办法用现有的Widgets实现这一点,还是我必须实现一些dark-gtk-magic?我想... 查看详情