当前位置: 首页 > news >正文

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 = .byWordWrappinglabel.textAlignment = .leftreturn label}override init(frame: CGRect) {super.init(frame: frame)
//        setupUI()}required init?(coder: NSCoder) {fatalError("init(coder:) has not been implemented")}//将上面定义的view添加到UIViewfunc setupUI() {backg
http://www.lryc.cn/news/255006.html

相关文章:

  • css弹窗动画效果,示例弹窗从底部弹出
  • STM32CubeIDE(CUBE-MX hal库)----RTC时钟,时钟实时显示
  • ubuntu 安装Nvidia驱动
  • 『亚马逊云科技产品测评』活动征文|基于亚马逊云EC2搭建PG开源数据库
  • 【开题报告】基于J2EE的高校水电费管理系统的设计与实现
  • Revisiting Proposal-based Object Detection阅读笔记
  • Docker部署NFS服务
  • 深度学习TensorFlow2基础知识学习后半部分
  • 电脑系统重装Win10专业版操作教程
  • 打包Python项目
  • 使用Python实现爬虫IP负载均衡和高可用集群
  • Jenkins+Maven+Gitlab+Tomcat 自动化构建打包,部署
  • 泰凌微(Telink)8258配置串口收发自定义数据
  • 入门低代码开发:快速构建应用程序的方法
  • 常见客户端消息推送服务【Java后端】
  • C++11(下)
  • 深度学习与逻辑回归模型的融合--TensorFlow多元分类的高级应用
  • 水库大坝安全监测参数与设备
  • 要求CHATGPT高质量回答的艺术:提示工程技术的完整指南—第 22 章:情感分析提示
  • 数据清洗、特征工程和数据可视化、数据挖掘与建模的主要内容
  • C++ STL容器与常用库函数
  • Nmap脚本简介
  • Kafka -- 初识
  • 玩转Sass:掌握数据类型!
  • Django + Matplotlib:实现数据分析显示与下载为PDF或SVG
  • 【Rust】第一节:安装
  • 12-07 周四 Pytorch 使用Visdom 进行可视化
  • 基于微信小程序的智慧校园导航系统研究
  • VUE3给table的head添加popover筛选、时间去除时分秒、字符串替换某字符
  • 19、XSS——HTTP协议安全