Skip to content
切换导航条
切换导航条
当前项目
正在载入...
登录
陈高翔
/
DreamSleep-iOS
转到一个项目
切换导航栏
切换导航栏固定状态
项目
群组
代码片段
帮助
项目
活动
版本库
流水线
图表
问题
0
合并请求
0
维基
网络
创建新的问题
作业
提交
问题看板
文件
提交
网络
比较
分支
标签
Commit f283b9c3
由
cgx
编写于
2022-05-09 15:39:23 +0800
浏览文件
选项
浏览文件
标签
下载
电子邮件补丁
差异文件
优化播放逻辑,完成上一首/下一首功能
1 个父辈
f02ca2ec
隐藏空白字符变更
内嵌
并排
正在显示
4 个修改的文件
包含
81 行增加
和
42 行删除
DreamSleep/DreamSleep/Basement/DSConfig/PrefixHeader.pch
DreamSleep/DreamSleep/Class/HomeModule/Home/MusicPlayerController.m
DreamSleep/DreamSleep/Class/HomeModule/Home/MusicPlayerView.h
DreamSleep/DreamSleep/Class/HomeModule/Home/MusicPlayerView.m
DreamSleep/DreamSleep/Basement/DSConfig/PrefixHeader.pch
查看文件 @
f283b9c
...
@@ -38,4 +38,6 @@
...
@@ -38,4 +38,6 @@
#import "LoginUtils.h"
#import "LoginUtils.h"
#import "TimerProxy.h"
#endif /* PrefixHeader_pch */
#endif /* PrefixHeader_pch */
DreamSleep/DreamSleep/Class/HomeModule/Home/MusicPlayerController.m
查看文件 @
f283b9c
...
@@ -8,7 +8,6 @@
...
@@ -8,7 +8,6 @@
#import "MusicPlayerController.h"
#import "MusicPlayerController.h"
#import "MusicPlayerView.h"
#import "MusicPlayerView.h"
#import <FSAudioController.h>
#import <FSAudioController.h>
#import "TimerProxy.h"
#import "SubAudioModel.h"
#import "SubAudioModel.h"
@interface
MusicPlayerController
()
<
MusicPlayerViewDelegate
>
@interface
MusicPlayerController
()
<
MusicPlayerViewDelegate
>
...
@@ -19,6 +18,8 @@
...
@@ -19,6 +18,8 @@
@property
(
nonatomic
,
strong
)
CADisplayLink
*
progressTimer
;
@property
(
nonatomic
,
strong
)
CADisplayLink
*
progressTimer
;
/// 是否正在拖动滑块
/// 是否正在拖动滑块
@property
(
nonatomic
,
assign
)
BOOL
isDraging
;
@property
(
nonatomic
,
assign
)
BOOL
isDraging
;
/// streamState
@property
(
nonatomic
,
assign
)
FSAudioStreamState
streamState
;
@end
@end
@implementation
MusicPlayerController
@implementation
MusicPlayerController
...
@@ -31,14 +32,13 @@
...
@@ -31,14 +32,13 @@
[
super
viewDidLoad
];
[
super
viewDidLoad
];
if
(
self
.
currentIndex
>=
self
.
playAudios
.
count
)
{
return
;
}
if
(
self
.
currentIndex
>=
self
.
playAudios
.
count
)
{
return
;
}
SubAudioModel
*
currentAudioModel
=
self
.
playAudios
[
self
.
currentIndex
];
[
self
launchPlayer
];
[
self
.
playerView
updatePlayerView
:
currentAudioModel
];
WS
(
weakSelf
);
WS
(
weakSelf
);
[
self
.
audioStream
playFromURL
:[
NSURL
URLWithString
:
currentAudioModel
.
audio_url
]];
[
self
.
audioStream
setOnStateChange
:
^
(
FSAudioStreamState
state
)
{
[
self
.
audioStream
setOnStateChange
:
^
(
FSAudioStreamState
state
)
{
weakSelf
.
streamState
=
state
;
weakSelf
.
playerView
.
isPlaying
=
state
==
kFsAudioStreamPlaying
;
weakSelf
.
playerView
.
isPlaying
=
state
==
kFsAudioStreamPlaying
;
[
weakSelf
.
progressTimer
setPaused
:
!
(
state
==
kFsAudioStreamPlaying
)];
switch
(
state
)
{
switch
(
state
)
{
case
kFsAudioStreamRetrievingURL
:
case
kFsAudioStreamRetrievingURL
:
[
UIApplication
sharedApplication
].
networkActivityIndicatorVisible
=
YES
;
[
UIApplication
sharedApplication
].
networkActivityIndicatorVisible
=
YES
;
...
@@ -46,7 +46,7 @@
...
@@ -46,7 +46,7 @@
break
;
break
;
case
kFsAudioStreamStopped
:
case
kFsAudioStreamStopped
:
[
UIApplication
sharedApplication
].
networkActivityIndicatorVisible
=
NO
;
[
UIApplication
sharedApplication
].
networkActivityIndicatorVisible
=
NO
;
DSLog
(
@"kFsAudioStreamStopped --- 停止播放了
"
);
DSLog
(
@"kFsAudioStreamStopped --- 停止播放了"
);
break
;
break
;
case
kFsAudioStreamBuffering
:
{
case
kFsAudioStreamBuffering
:
{
[
UIApplication
sharedApplication
].
networkActivityIndicatorVisible
=
YES
;
[
UIApplication
sharedApplication
].
networkActivityIndicatorVisible
=
YES
;
...
@@ -62,7 +62,7 @@
...
@@ -62,7 +62,7 @@
break
;
break
;
case
kFsAudioStreamPlaying
:
case
kFsAudioStreamPlaying
:
[
UIApplication
sharedApplication
].
networkActivityIndicatorVisible
=
NO
;
[
UIApplication
sharedApplication
].
networkActivityIndicatorVisible
=
NO
;
DSLog
(
@"播放ing
--
"
);
DSLog
(
@"播放ing
...
"
);
break
;
break
;
case
kFsAudioStreamFailed
:
case
kFsAudioStreamFailed
:
[
UIApplication
sharedApplication
].
networkActivityIndicatorVisible
=
NO
;
[
UIApplication
sharedApplication
].
networkActivityIndicatorVisible
=
NO
;
...
@@ -98,51 +98,49 @@
...
@@ -98,51 +98,49 @@
self
.
progressTimer
=
nil
;
self
.
progressTimer
=
nil
;
}
}
#pragma mark - private
-
(
void
)
updateProgress
{
-
(
void
)
updateProgress
{
if
(
self
.
isDraging
==
YES
)
return
;
if
(
self
.
isDraging
==
YES
)
return
;
FSStreamPosition
cur
=
self
.
audioStream
.
currentTimePlayed
;
FSStreamPosition
cur
=
self
.
audioStream
.
currentTimePlayed
;
FSStreamPosition
end
=
self
.
audioStream
.
duration
;
FSStreamPosition
end
=
self
.
audioStream
.
duration
;
// 音频播放进度、音频当前播放时间、音频总时间
//
更新
音频播放进度、音频当前播放时间、音频总时间
[
self
.
playerView
updateProgress
:
cur
.
position
currentTime
:[
NSString
stringWithFormat
:
@"%02i:%02i"
,
cur
.
minute
,
cur
.
second
]
totalTime
:
[
NSString
stringWithFormat
:
@"%02i:%02i"
,
end
.
minute
,
end
.
second
]];
[
self
.
playerView
updateProgress
:
cur
.
position
currentTime
:[
NSString
stringWithFormat
:
@"%02i:%02i"
,
cur
.
minute
,
cur
.
second
]
totalTime
:
[
NSString
stringWithFormat
:
@"%02i:%02i"
,
end
.
minute
,
end
.
second
]];
}
}
-
(
void
)
audioStreamPlaybackCompleted
{
-
(
void
)
audioStreamPlaybackCompleted
{
DSLog
(
@"kFsAudioStreamPlaybackCompleted -- 回放完成"
);
DSLog
(
@"kFsAudioStreamPlaybackCompleted -- 回放完成"
);
[
self
.
progressTimer
setPaused
:
YES
];
if
(
self
.
playerView
.
mode
==
SoundPlayModeSingle
)
{
// 单节播放:播放完当前音频就自动停止了
if
(
self
.
playerView
.
mode
==
SoundPlayModeSingle
)
{
// 单节播放
[
self
reset
];
// 判断是否有下一首
if
(
self
.
currentIndex
<
self
.
playAudios
.
count
-
1
)
{
self
.
currentIndex
++
;
SubAudioModel
*
audioModel
=
self
.
playAudios
[
self
.
currentIndex
];
[
self
.
playerView
updatePlayerView
:
audioModel
];
[
self
.
audioStream
playFromURL
:[
NSURL
URLWithString
:
audioModel
.
audio_url
]];
[
self
.
progressTimer
setPaused
:
NO
];
}
else
{
FSStreamPosition
pos
=
{
0
};
pos
.
position
=
0
;
[
self
.
audioStream
seekToPosition
:
pos
];
FSStreamPosition
end
=
self
.
audioStream
.
duration
;
[
self
.
playerView
updateProgress
:
0
currentTime
:
@"00:00"
totalTime
:
[
NSString
stringWithFormat
:
@"%02i:%02i"
,
end
.
minute
,
end
.
second
]];
}
}
else
if
(
self
.
playerView
.
mode
==
SoundPlayModeCycle
)
{
// 单曲循环
}
else
if
(
self
.
playerView
.
mode
==
SoundPlayModeCycle
)
{
// 单曲循环
[
self
.
audioStream
play
];
[
self
.
audioStream
play
];
[
self
.
progressTimer
setPaused
:
NO
];
}
else
if
(
self
.
playerView
.
mode
==
SoundPlayModeOrder
)
{
// 顺序播放
}
else
if
(
self
.
playerView
.
mode
==
SoundPlayModeOrder
)
{
// 顺序播放
//
获取下一首需要播放的
音频
//
播放列表最后一个
音频
if
(
self
.
currentIndex
+
1
>=
self
.
playAudios
.
count
)
{
if
(
self
.
currentIndex
+
1
>=
self
.
playAudios
.
count
)
{
self
.
currentIndex
=
0
;
[
self
reset
]
;
}
else
{
}
else
{
// 获取下一首需要播放的音频
self
.
currentIndex
++
;
self
.
currentIndex
++
;
[
self
launchPlayer
];
}
}
SubAudioModel
*
audioModel
=
self
.
playAudios
[
self
.
currentIndex
];
[
self
.
playerView
updatePlayerView
:
audioModel
];
[
self
.
audioStream
playFromURL
:[
NSURL
URLWithString
:
audioModel
.
audio_url
]];
[
self
.
progressTimer
setPaused
:
NO
];
}
}
}
}
-
(
void
)
reset
{
FSStreamPosition
pos
=
{
0
};
pos
.
position
=
0
;
[
self
.
audioStream
seekToPosition
:
pos
];
FSStreamPosition
end
=
self
.
audioStream
.
duration
;
[
self
.
playerView
updateProgress
:
0
currentTime
:
@"00:00"
totalTime
:
[
NSString
stringWithFormat
:
@"%02i:%02i"
,
end
.
minute
,
end
.
second
]];
}
-
(
void
)
launchPlayer
{
SubAudioModel
*
audioModel
=
self
.
playAudios
[
self
.
currentIndex
];
[
self
.
playerView
updatePlayerView
:
audioModel
];
[
self
.
audioStream
playFromURL
:[
NSURL
URLWithString
:
audioModel
.
audio_url
]];
}
#pragma mark - MusicPlayerViewDelegate
#pragma mark - MusicPlayerViewDelegate
-
(
void
)
didSliderTouchBegan
:
(
float
)
value
{
-
(
void
)
didSliderTouchBegan
:
(
float
)
value
{
self
.
isDraging
=
YES
;
self
.
isDraging
=
YES
;
...
@@ -163,9 +161,44 @@
...
@@ -163,9 +161,44 @@
self
.
isDraging
=
YES
;
self
.
isDraging
=
YES
;
}
}
-
(
void
)
didClickPlayBtn
{
-
(
void
)
playControlActionWithItem
:
(
UIButton
*
)
item
{
// 播放和暂停是同一个方法
switch
(
item
.
tag
)
{
[
self
.
audioStream
pause
];
case
1
:
// 上一首
{
if
(
self
.
currentIndex
-
1
<
0
)
{
[
DSProgressHUD
showToast
:
@"没有上一首了"
];
return
;
}
self
.
currentIndex
--
;
[
self
launchPlayer
];
}
break
;
case
2
:
// 播放暂停
{
if
(
self
.
streamState
==
kFsAudioStreamStopped
)
{
[
self
.
audioStream
play
];
}
else
if
(
self
.
streamState
==
kFsAudioStreamPlaying
)
{
// 暂停播放
[
self
.
audioStream
pause
];
}
else
if
(
self
.
streamState
==
kFsAudioStreamPaused
)
{
// 恢复播放
[
self
.
audioStream
pause
];
}
}
break
;
case
3
:
// 下一首
{
if
(
self
.
currentIndex
+
1
>=
self
.
playAudios
.
count
)
{
[
DSProgressHUD
showToast
:
@"没有下一首了"
];
return
;
}
self
.
currentIndex
++
;
[
self
launchPlayer
];
}
break
;
default
:
break
;
}
}
}
#pragma mark - 隐藏导航栏
#pragma mark - 隐藏导航栏
...
...
DreamSleep/DreamSleep/Class/HomeModule/Home/MusicPlayerView.h
查看文件 @
f283b9c
...
@@ -21,8 +21,9 @@ NS_ASSUME_NONNULL_BEGIN
...
@@ -21,8 +21,9 @@ NS_ASSUME_NONNULL_BEGIN
-
(
void
)
didSliderTouchEnded
:(
float
)
value
;
-
(
void
)
didSliderTouchEnded
:(
float
)
value
;
-
(
void
)
didSliderValueChange
:(
float
)
value
;
-
(
void
)
didSliderValueChange
:(
float
)
value
;
/// 点击播放按钮事件
/// 上一首、播放、下一首事件
-
(
void
)
didClickPlayBtn
;
/// @param item item
-
(
void
)
playControlActionWithItem
:(
UIButton
*
)
item
;
@end
@end
/// 音频播放页面
/// 音频播放页面
...
...
DreamSleep/DreamSleep/Class/HomeModule/Home/MusicPlayerView.m
查看文件 @
f283b9c
...
@@ -178,9 +178,9 @@
...
@@ -178,9 +178,9 @@
}
}
}
}
-
(
void
)
play
erBtnClick
:
(
UIButton
*
)
sender
{
-
(
void
)
play
ControlAction
:
(
UIButton
*
)
sender
{
if
(
self
.
delegate
&&
[
self
.
delegate
respondsToSelector
:
@selector
(
didClickPlayBtn
)])
{
if
(
self
.
delegate
&&
[
self
.
delegate
respondsToSelector
:
@selector
(
playControlActionWithItem
:
)])
{
[
self
.
delegate
didClickPlayBtn
];
[
self
.
delegate
playControlActionWithItem
:
sender
];
}
}
}
}
...
@@ -275,7 +275,8 @@
...
@@ -275,7 +275,8 @@
-
(
UIButton
*
)
playerBtn
{
-
(
UIButton
*
)
playerBtn
{
if
(
!
_playerBtn
)
{
if
(
!
_playerBtn
)
{
_playerBtn
=
[
UIButton
new
];
_playerBtn
=
[
UIButton
new
];
[
_playerBtn
addTarget
:
self
action
:
@selector
(
playerBtnClick
:
)
forControlEvents
:
UIControlEventTouchUpInside
];
_playerBtn
.
tag
=
2
;
[
_playerBtn
addTarget
:
self
action
:
@selector
(
playControlAction
:
)
forControlEvents
:
UIControlEventTouchUpInside
];
[
_playerBtn
dk_setBackgroundImage
:
DKImagePickerWithNames
(
@"audio_play_icon"
,
@"dk_audio_play_icon"
,
@"dk_audio_play_icon"
)
forState
:
UIControlStateNormal
];
[
_playerBtn
dk_setBackgroundImage
:
DKImagePickerWithNames
(
@"audio_play_icon"
,
@"dk_audio_play_icon"
,
@"dk_audio_play_icon"
)
forState
:
UIControlStateNormal
];
[
_playerBtn
dk_setBackgroundImage
:
DKImagePickerWithNames
(
@"audio_pause"
,
@"dk_audio_pause"
,
@"dk_audio_pause"
)
forState
:
UIControlStateSelected
];
[
_playerBtn
dk_setBackgroundImage
:
DKImagePickerWithNames
(
@"audio_pause"
,
@"dk_audio_pause"
,
@"dk_audio_pause"
)
forState
:
UIControlStateSelected
];
}
}
...
@@ -285,7 +286,8 @@
...
@@ -285,7 +286,8 @@
-
(
UIButton
*
)
leftPlayBtn
{
-
(
UIButton
*
)
leftPlayBtn
{
if
(
!
_leftPlayBtn
)
{
if
(
!
_leftPlayBtn
)
{
_leftPlayBtn
=
[
UIButton
new
];
_leftPlayBtn
=
[
UIButton
new
];
[
_leftPlayBtn
addTarget
:
self
action
:
@selector
(
leftPlayBtnClick
:
)
forControlEvents
:
UIControlEventTouchUpInside
];
_leftPlayBtn
.
tag
=
1
;
[
_leftPlayBtn
addTarget
:
self
action
:
@selector
(
playControlAction
:
)
forControlEvents
:
UIControlEventTouchUpInside
];
[
_leftPlayBtn
setBackgroundImage
:[
UIImage
imageNamed
:
@"previous_icon"
]
forState
:
UIControlStateNormal
];
[
_leftPlayBtn
setBackgroundImage
:[
UIImage
imageNamed
:
@"previous_icon"
]
forState
:
UIControlStateNormal
];
}
}
return
_leftPlayBtn
;
return
_leftPlayBtn
;
...
@@ -294,7 +296,8 @@
...
@@ -294,7 +296,8 @@
-
(
UIButton
*
)
rightPlayBtn
{
-
(
UIButton
*
)
rightPlayBtn
{
if
(
!
_rightPlayBtn
)
{
if
(
!
_rightPlayBtn
)
{
_rightPlayBtn
=
[
UIButton
new
];
_rightPlayBtn
=
[
UIButton
new
];
[
_rightPlayBtn
addTarget
:
self
action
:
@selector
(
rightPlayBtnClick
:
)
forControlEvents
:
UIControlEventTouchUpInside
];
_rightPlayBtn
.
tag
=
3
;
[
_rightPlayBtn
addTarget
:
self
action
:
@selector
(
playControlAction
:
)
forControlEvents
:
UIControlEventTouchUpInside
];
[
_rightPlayBtn
setBackgroundImage
:[
UIImage
imageNamed
:
@"next_icon"
]
forState
:
UIControlStateNormal
];
[
_rightPlayBtn
setBackgroundImage
:[
UIImage
imageNamed
:
@"next_icon"
]
forState
:
UIControlStateNormal
];
}
}
return
_rightPlayBtn
;
return
_rightPlayBtn
;
...
...
编写
预览
支持
Markdown
格式
附加文件
你添加了
0
人
到此讨论。请谨慎行事。
Finish editing this message first!
Cancel
请
注册
或
登录
后发表评论