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

做网站的公司cnfg简述seo

做网站的公司cnfg,简述seo,搜索引擎是什么意思,怎么用dw做地图网站在 iOS 应用中,如果你想实现一个简洁优雅的音乐播放器组件,Apple 的 AVPlayer 是一个非常可靠的工具。本文将带你用 SwiftUI 构建一个支持: ✅ 在线音频播放 ✅ 实时播放进度条 ✅ 音量调节 ✅ 后台播放(锁屏仍可播放&#xff09…

在 iOS 应用中,如果你想实现一个简洁优雅的音乐播放器组件,Apple 的 AVPlayer 是一个非常可靠的工具。本文将带你用 SwiftUI 构建一个支持:

✅ 在线音频播放
✅ 实时播放进度条
✅ 音量调节
✅ 后台播放(锁屏仍可播放)

实现效果

下图展示了本文要实现的 SwiftUI 播放器界面:

项目结构预览

我们将实现以下三个主要组件:

  • PlayerViewModel: 音频播放逻辑 + 状态管理
  • PlayerView: 播放器界面(播放按钮、进度条、音量调节)
  • ContentView: 加载一个在线音频 URL 进行播放

1. 创建 PlayerViewModel:播放逻辑核心

我们使用 ObservableObject 管理 AVPlayer 播放器状态,支持实时监听播放进度和音量。

import Foundation
import AVFoundation
import Combine
import SwiftUIclass PlayerViewModel: ObservableObject {@Published var player: AVPlayer                    // 播放器对象@Published var isPlaying = false                   // 是否正在播放@Published var currentTime: Double = 0             // 当前播放时间(秒)@Published var duration: Double = 1                // 音频总时长(秒)@Published var volume: Float = 0.5                 // 音量(0~1)private var timeObserverToken: Any?                // 播放进度监听private var cancellables = Set<AnyCancellable>()   // Combine 订阅集合// 初始化 AVPlayer 并配置监听init(url: URL) {self.player = AVPlayer(url: url)setupObserver()          // 监听播放进度setupVolume()            // 音量变化绑定configureAudioSession()  // 配置后台播放}// 销毁时移除观察者deinit {if let token = timeObserverToken {player.removeTimeObserver(token)}}/// 设置播放进度监听private func setupObserver() {timeObserverToken = player.addPeriodicTimeObserver(forInterval: CMTime(seconds: 0.5, preferredTimescale: 600),queue: .main) { [weak self] time inguard let self = self,let currentItem = self.player.currentItem else { return }self.currentTime = time.secondsself.duration = currentItem.duration.seconds}}/// 音量绑定监听private func setupVolume() {player.volume = volume$volume.sink { [weak self] newVolume inself?.player.volume = newVolume}.store(in: &cancellables)}/// 播放 / 暂停 控制func togglePlayPause() {if isPlaying {player.pause()} else {player.play()}isPlaying.toggle()}/// 拖动进度条跳转到指定时间func seek(to time: Double) {player.seek(to: CMTime(seconds: time, preferredTimescale: 600))}/// 开启后台播放能力private func configureAudioSession() {do {try AVAudioSession.sharedInstance().setCategory(.playback, mode: .default)try AVAudioSession.sharedInstance().setActive(true)} catch {print("Failed to configure audio session: \(error)")}}
}

2. 构建 SwiftUI 播放界面 PlayerView

这个界面包含播放按钮、音量滑块和进度条。

struct PlayerView: View {@StateObject private var viewModel: PlayerViewModel// 接收外部传入的音频 URLinit(url: URL) {_viewModel = StateObject(wrappedValue: PlayerViewModel(url: url))}var body: some View {VStack(spacing: 20) {// 播放 / 暂停 按钮Button(action: {viewModel.togglePlayPause()}) {Image(systemName: viewModel.isPlaying ? "pause.circle.fill" : "play.circle.fill").resizable().frame(width: 80, height: 80)}// 音量调节HStack {Text("音量: \(Int(viewModel.volume * 100))%")Slider(value: Binding(get: { viewModel.volume },set: { viewModel.volume = $0 }),in: 0...1).accentColor(.green).padding(.horizontal)}// 播放进度条HStack {Text("\(formatTime(viewModel.currentTime))")Slider(value: $viewModel.currentTime,in: 0...viewModel.duration,onEditingChanged: { isEditing inif !isEditing {viewModel.seek(to: viewModel.currentTime)}})Text("\(formatTime(viewModel.duration))")}}.padding()}/// 时间格式化工具:转成 mm:ss 格式private func formatTime(_ time: Double) -> String {let minutes = Int(time) / 60let seconds = Int(time) % 60return String(format: "%02d:%02d", minutes, seconds)}
}

3. 在 ContentView 中加载播放器

我们选用一首可用的在线音频地址示例:

struct ContentView: View {let audioURL = URL(string: "https://er-sycdn.kuwo.cn/307531268bf6fddfb4adb34fe9d4c3a3/6805fabb/resource/30106/trackmedia/M500004CJfjo2EGyPZ.mp3")!var body: some View {PlayerView(url: audioURL)}
}

4. 支持后台播放说明 

 通过设置:

try AVAudioSession.sharedInstance().setCategory(.playback)

 在 Info.plist 中添加: 

<key>UIBackgroundModes</key>
<array><string>audio</string>
</array>

即可支持后台音频播放(包括锁屏继续播放)功能。 

http://www.dtcms.com/wzjs/201797.html

相关文章:

  • 有哪些网站有做网页用的小图片网上教育培训机构哪家好
  • 海南省住房建设厅网站杭州优化商务服务公司
  • 公司官网推广百度优化培训
  • 上海专业做网站建设公司二级域名网址查询
  • 哈尔滨网站建设丿薇下载百度导航最新版本
  • 佛山网站建设公司价格seo优化工具大全
  • b2c网站服务内容百度开户渠道商哪里找
  • wordpress子页面都转到首页seo还有前景吗
  • 模具 东莞网站建设东莞seo网站管理
  • php做的网站优缺点付费推广外包
  • 网站模版广州推广排名
  • 群晖ds218+做网站seo专员工资一般多少
  • 专注微信网站建设厦门关键词优化企业
  • 政府采购电子商城网站营销型网站制作企业
  • 大连网站建设服务公司谷歌网址
  • 键盘事件对网站交互怎么投放广告是最有效的
  • 网站正在建设中 html 模板建站系统源码
  • 网站建设网络课程随州今日头条新闻
  • 做虾皮网站赚钱吗免费网站seo优化
  • 静态页面网站怎么做渠道推广
  • wordpress google字体插件seo优化系统
  • 做教育类seo网站靠谱吗东莞seoseo关键词排名优化
  • 开发jsp网站合肥网站关键词排名
  • 帮客户做网站 没签合同咋办百度一下知道首页
  • 网站建设技术方案模板下载seo网站诊断流程
  • wordpress 展开目录网站建设优化哪家公司好
  • 微信投票网站怎么做西地那非片说明书
  • wordpress 风格 切换seo引擎搜索网站关键词
  • 网站空间商怎么做网络营销方法
  • 做公司的网站有哪些东西百度权重1是什么意思