iOS(swiftui)——系统悬浮窗( 可在其他应用上显示,可实时更新内容) ...

打印 上一主题 下一主题

主题 801|帖子 801|积分 2403

因为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类
  1. import Foundation
  2. /**
  3. 继承ObservableObject,使用Published 发布 text 等,这样当infoMode发生变化时,所有订阅infoMode的订阅者都能收到通知
  4. */
  5. class InfoModel: ObservableObject {
  6.     @Published var id:Int
  7.     @Published var text:String
  8.     @Published var type:Int
  9.     init() {
  10.         self.id = 0
  11.         self.text = ""
  12.         self.type = 0
  13.     }
  14. }
复制代码
(2)创建画中画中显示的view
  1. //
  2. //  PIPSubtitleView.swift
  3. //画中画中显示的view
  4. import Foundation
  5. import UIKit
  6. import SnapKit
  7. import SwiftUI
  8. class PIPSubtitleView: UIView {
  9.     //logo图片
  10.     private lazy var logoImageView: UIImageView = {
  11.         let imageView = UIImageView()
  12.         imageView.image = UIImage.init(systemName: "globe")
  13.         return imageView
  14.     }()
  15.     //悬浮窗名称label
  16.     lazy var nameLabel: UILabel = {
  17.         let label = UILabel()
  18.         label.font = UIFont.systemFont(ofSize: 16, weight: .semibold)
  19.         label.textColor = UIColor.init(.black)
  20.         label.adjustsFontSizeToFitWidth = true
  21.         label.baselineAdjustment = .alignCenters
  22.         return label
  23.     }()
  24.     //内容左侧图片
  25.     private lazy var leftimg: UIImageView = {
  26.         let imageView = UIImageView()
  27.         imageView.contentMode = .scaleAspectFit // 设置内容模式适应视图的大小
  28.         imageView.image = UIImage.init(named: "getnew.jpge")
  29.         return imageView
  30.     }()
  31.     lazy var textLabel: UILabel = createSubTextLable()
  32.    
  33.     func createSubTextLable() ->UILabel{
  34.         let label = UILabel()
  35.         label.textAlignment = .center
  36.         label.textColor = UIColor.init(.black)
  37.         label.font = UIFont.init(name: "DINAlternate-Bold", size: 12)
  38.         label.adjustsFontSizeToFitWidth = true
  39.         label.baselineAdjustment = .alignCenters
  40.         label.numberOfLines = 0
  41.         label.
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

道家人

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表