iOS(swiftui)——系統懸浮窗( 可在其他應用上顯示,可實時更新內容)

因為ios系統對權限的限制是比較嚴格的,ios系統本身是不支持全局懸浮窗(可在其他app上顯示)。在iphone14及之后的iPhone機型中提供了一個叫 靈動島的功能,可以在手機上方可以添加一個懸浮窗顯示內容并實時更新,但這個功能有很多局限性

如:需要iPhone14及之后的機型且系統必須是iOS16.1+,在以后的新機型中還有沒有這個功能也還不明確,樣式和位置固定。

在ios系統中現有的,應用成熟的功能中,畫中畫是唯一可以在全局顯示的懸浮窗,但畫中畫中針對視頻。那我們就需要將我們想展示的內容放到視頻中展示。
 

效果如下:

  

1. 環境

iso14+
本文使用code14.2

2. 配置

在項目target中配置Background Modes 勾選Audio,AirPlay,and Picture in Picture 項

在Info.plist文件中添加如下

3. 代碼

(1)定義一個懸浮窗信息的model類

import Foundation
/**繼承ObservableObject,使用Published 發布 text 等,這樣當infoMode發生變化時,所有訂閱infoMode的訂閱者都能收到通知*/
class InfoModel: ObservableObject {@Published var id:Int@Published var text:String@Published var type:Intinit() {self.id = 0self.text = ""self.type = 0}
}

(2)創建畫中畫中顯示的view

//
//  PIPSubtitleView.swift
//畫中畫中顯示的viewimport Foundationimport UIKit
import SnapKit
import SwiftUIclass PIPSubtitleView: UIView {//logo圖片private lazy var logoImageView: UIImageView = {let imageView = UIImageView()imageView.image = UIImage.init(systemName: "globe")return imageView}()//懸浮窗名稱labellazy var nameLabel: UILabel = {let label = UILabel()label.font = UIFont.systemFont(ofSize: 16, weight: .semibold)label.textColor = UIColor.init(.black)label.adjustsFontSizeToFitWidth = truelabel.baselineAdjustment = .alignCentersreturn label}()//內容左側圖片private lazy var leftimg: UIImageView = {let imageView = UIImageView()imageView.contentMode = .scaleAspectFit // 設置內容模式適應視圖的大小imageView.image = UIImage.init(named: "getnew.jpge")return imageView}()lazy var textLabel: UILabel = createSubTextLable()func createSubTextLable() ->UILabel{let label = UILabel()label.textAlignment = .centerlabel.textColor = UIColor.init(.black)label.font = UIFont.init(name: "DINAlternate-Bold", size: 12)label.adjustsFontSizeToFitWidth = truelabel.baselineAdjustment = .alignCenterslabel.numberOfLines = 0label.lineBreakMode =

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/211088.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/211088.shtml
英文地址,請注明出處:http://en.pswp.cn/news/211088.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Java面試遇到的一些常見題

目錄 1. Java語言有幾種基本類型,分別是什么? 整數類型(Integer Types): 浮點類型(Floating-Point Types): 字符類型(Character Type): 布爾類…

(六)五種最新算法(SWO、COA、LSO、GRO、LO)求解無人機路徑規劃MATLAB

一、五種算法(SWO、COA、LSO、GRO、LO)簡介 1、蜘蛛蜂優化算法SWO 蜘蛛蜂優化算法(Spider wasp optimizer,SWO)由Mohamed Abdel-Basset等人于2023年提出,該算法模型雌性蜘蛛蜂的狩獵、筑巢和交配行為&…

【完整項目】雙模式答題卡識別軟件中YOLO模式的訓練部分詳解,包括訓練填涂區域和手寫準考證號,手把手詳細教學,可延申拓展訓練其他圖像數據

目錄 前言1. 數據準備2. 數據標注3. 先跑起來Windows下用本地的CPU或GPU訓練本地Windows系統連接服務器訓練前言 前文:【完整項目】基于Python+Tkinter+OpenCV+Yolo+手寫OCR的雙模式答題卡識別軟件的設計與實現 如果你需要訓練自己的答題卡模型,那么請先看上面的文章鏈接。…

Flutter自定義下拉選擇框dropDownMenu

利用PopupMenuButton和PopupMenuItem寫了個下拉選擇框,之所以不采用系統的,是因為自定義的更能適配項目需求,話不多說,直接看效果 下面直接貼出代碼、代碼中注釋寫的都很清楚,使用起來應該很方便,如果有任何…

C : DS靜態查找之順序索引查找

Description 給出一個隊列和要查找的數值,找出數值在隊列中的位置,隊列位置從1開始 要求使用順序索引查找算法,其中索引表查找和塊內查找都采用不帶哨兵、從頭開始的順序查找方法。 Input 第一行輸入n,表示主表有n個數據 第二…

OpenSSL 編程指南

目錄 前言初始化SSL庫創建SSL 上下文接口(SSL_CTX)安裝證書和私鑰加載證書(客戶端/服務端證書)加載私鑰/公鑰加載CA證書設置對端證書驗證例1 SSL服務端安裝證書例2 客戶端安裝證書創建和安裝SSL結構建立TCP/IP連接客戶端創建socket服務端創建連接創建SSL結構中的BIOSSL握手服務…

Scrum

Scrum是一個用于開發和維持復雜產品的框架,是一個增量的、迭代的開發過程。在這個框架中,整個開發過程由若干個短的迭代周期組成,一個短的迭代周期稱為一個Sprint,每個Sprint的建議長度是2到4周(互聯網產品研發可以使用1周的Sprin…

【Linux】輸出緩沖區和fflush刷新緩沖區

目錄 一、輸出緩沖區 1.1 輸出緩沖區的使用 1.2 緩沖區的刷新 1.3 輸出緩沖區的作用 二、回車換行 一、輸出緩沖區 C/C語言,當調用輸出函數(如printf()、puts()、fwrite()等)時,會給我們提供默認的緩沖區。這些數據先存…

虛擬機安裝 hyper—v 沙盒

一、下載系統鏡像 1、確認電腦內存在8G及以上并提前準備完整的系統鏡像 安裝Hyper-V并重啟電腦后打開程序選擇虛擬機 選擇安裝位置并設置保留第一代的虛擬參數即可開始分配內存,根據自己的需求進行設置 右鍵虛擬機啟動并開始運行,進行鏡像系統的安裝便完…

【Flutter】創建應用頂級組件,應用根組件 (學習記錄)

前言 在 Flutter 中,應用的頂級組件或根組件通常是在 main() 函數中通過 runApp() 方法創建的。這個組件通常是一個 MaterialApp、CupertinoApp、GetMaterialApp 或其他類似的應用框架組件。 以下是一個創建 MaterialApp 作為根組件的示例: void main()…

牛客算法心得——環形數組的連續子數組最大和(dp)

大家好,我是晴天學長, 一個找連續子數組最大和的變形題,需要的小伙伴可以關注支持一下哦!后續會繼續更新的。💪💪💪 1) .環形數組的連續子數組的最大和 描述 給定一個長度為 nn 的環形整數數組&…

『 MySQL數據庫 』聚合統計

文章目錄 前言 🥑🥝 聚合函數🍓 COUNT( ) 查詢數據數量🍓 SUM( ) 查詢數據總和🍓 AVG( ) 查詢數據平均值🍓 MAX( ) 查詢數據最大值🍓 MIN( ) 查詢數據最小值 🥝 數據分組GROUP BY子句…

湖科大計網:計算機網絡概述

一、計算機網絡的性能指標 一、速率 有時候數據量也認為是以10為底的,看怎么好算。(具體吉大考試用什么待商榷) 二、帶寬 在模擬信號系統中帶寬的含義,本課程中用到的地方是:香農定理和奈奎斯特定理公式的應用之中。 …

全面高壓化與全面超快充,破解新能源汽車的時代難題

是什么讓新能源車主感到疲憊與焦慮?是什么阻擋更多消費者選擇新能源汽車?我們在身邊進行一個簡單的調查就會發現,問題的答案非常一致:充電。 充電難,充電慢的難題,始終是困擾新能源汽車產業發展&#xff0c…

vue,uniapp的pdf等文件在線預覽

vue,uniapp文件在線預覽方案,用了個稍微偏門一點的方法實現了 通過后端生成文件查看頁面,然后前端只要展示這個網頁就行,uniapp就用web-view來展示,后臺系統就直接window.open()打開就行 示例查看PDF文件,…

每日一練【四數之和】

一、題目描述 18. 四數之和 給你一個由 n 個整數組成的數組 nums ,和一個目標值 target 。請你找出并返回滿足下述全部條件且不重復的四元組 [nums[a], nums[b], nums[c], nums[d]] (若兩個四元組元素一一對應,則認為兩個四元組重復&#x…

基于ssm社區管理與服務的設計與實現論文

目錄 摘 要 1 Abstract 2 第一章 緒論 3 1.1研究背景 3 1.2 研究現狀 3 1.3 研究內容 4 第二章 系統關鍵技術 5 2.1 Java簡介 5 2.2 MySql數據庫 5 2.3 B/S結構 6 2.4 Tomcat服務器 6 第三章 系統分析 7 3.1可行性分析 7 3.1.1技術可行性 7 3.1.2經濟可行性 7 3.1.3運行可行性…

uniapp自定義的日歷(純手寫)

效果圖&#xff1a; html&#xff1a; <!-- 年月 --><view class"box"><view class"box_time"><view class"time"><image click"lefts" :src"url/uploads/20231206/9d1fb520b12383960dca3c214d84fa0…

vue獲取主機id和IP地址

獲取主機id和IP地址 在vue.config.js const os require(“os”); function getNetworkIp() { let needHost “”; // 打開的host try { // 獲得網絡接口列表 let network os.networkInterfaces(); for (let dev in network) { let iface network[dev]; for (let i 0; i …

LLM之Agent(五)| AgentTuning:清華大學與智譜AI提出AgentTuning提高大語言模型Agent能力

?論文地址&#xff1a;https://arxiv.org/pdf/2310.12823.pdf Github地址&#xff1a;https://github.com/THUDM/AgentTuning 在ChatGPT帶來了大模型的蓬勃發展&#xff0c;開源LLM層出不窮&#xff0c;雖然這些開源的LLM在各自任務中表現出色&#xff0c;但是在真實環境下作…