Delete 6. 动画、音频与视频.md

This commit is contained in:
Yurk
2021-11-12 19:17:15 +08:00
committed by GitHub
parent 97da9618c4
commit 66590c7a45

View File

@@ -1,166 +0,0 @@
# 动画、音频与视频
## 动画
流畅的动画是 iOS 的灵魂所在。对于开发者而言,合理地使用动画,让用户体验得到提升是攻城狮们的必修课程。在前面的课程中我们 已经熟悉了对 Swift 的基础控件,接下来我们将把学习内容放到设计结构上。
对于动画的应用一般在 View 控件上,动画的种类大体上分为仿射变换、旋转变换以及平移三 种,对于动画过程中的速度时间我们都可以进行设置,这三种变换是所有动画的基础,例如:我们可以通过平移来实现 app 的加载和退场,可以使用仿射变换实现音乐播放时封面的动画,从而让用户有真实感。此外,我们还可以通过旋转来使整个程序增添一份趣味。下面的代码罗列了一些基本的动画使用方法,你需要熟练掌握并且试着学会如何应用。在 playgrounds 中:
```swift
import UIKit
import PlaygroundSupport
// View
let liveViewFrame = CGRect(x: 0, y: 0, width: 500, height: 500) let liveView = UIView(frame : liveViewFrame) liveView .
backgroundColor = . white
PlaygroundPage . current . liveView = liveView
let smallFrame = CGRect(x: 0, y: 0, width: 100, height: 100)
let square = UIView(frame: smallFrame)
square.backgroundColor = .purple
liveView.addSubview(square)
//
UIView.animate(withDuration: 2.0) {
square . backgroundColor = . orange
let scaleTransform = CGAffineTransform(scaleX : 2.0 , y: 2.0) //仿
let rotateTransform = CGAffineTransform(rotationAngle: .pi)//
let translateTransform = CGAffineTransform(translationX:200, y: 200) //
let comboTransform = scaleTransform.concatenating(rotateTransform ).concatenating (translateTransform ) square .transform = comboTransform //
}
```
## 短效果音播放
一个有趣的 app 离不开各种令人印象深刻的音效。在 Swift 中,我们通常使用 AudioToolbox 与 AVFoundation 来播放音频和视频。假设导入一个 30s 内的 wav 格式音频,并将其命名为 myVoice 接下来,我们需要将该音频的所在路径设置为虚拟的 url 地址,并将音频播放的地址设置为该地址:
```swift
import UIKit
import AudioToolbox
class ViewController : UIViewController{
override func viewDidLoad () {
super.viewDidLoad ()
var _soundId : SystemSoundID = 0
let path = Bundle.main.path(forResource: myVioce,ofType: wav)
let soundUrl = URL( fileURLWithPath : path ! )
AudioServicesCreateSystemSoundID ( soundUrl as CFURL,&_soundId )
AudioServicesAddSystemSoundCompletion(_soundId , nil , nil ,{(soundID , clientData ) > Void in
print()
AudioServicesPlaySystemSound ( soundID )
}, nil)
AudioServicesPlaySystemSound ( _soundId )
}
}
```
## 长音乐音乐播放
在一款 app 中,仅仅有 30s 的效果音可能还不够有时候我们需要导入长音乐。Swift 中内置了一款音乐播放器,对于基础开发者来说足够应用。该播放器的设置过程和短效果音的思路相同,我们也需要设置 url 路径来导入我们的本地音乐。请注意Swift 内置的音频播放器中并没有暂停和继续播放的功能,我们需要手动设置一个 Button 来实现该效果:
```swift
import UIKit
import AVFoundation
class ViewController: UIViewController,AVAudioPlayerDelegate {
var audioPlayer:AVAudioPlayer = AVAudioPlayer()
// AVAudioPlayer
override func viewDidLoad() {
super.viewDidLoad()
//
let path = Bundle.main.path(forResource: "兰亭序", ofType: "mp3") // URL
let soundUrl = URL(fileURLWithPath: path!)
do{
try audioPlayer = AVAudioPlayer(contentsOf: soundUrl) audioPlayer.volume = 1.0
// 1.0
audioPlayer.numberOfLoops = -1 //-1
audioPlayer.delegate = self audioPlayer.play()
} catch {
print(error)
}
///
let stopMusic = UIButton(frame: CGRect(x: 20, y: 80, width: 280, height: 44))
stopMusic.backgroundColor = UIColor.blue
stopMusic.setTitle("暂停/恢复音乐", for:UIControl.State.init(rawValue:0))
//
stopMusic.addTarget(self, action: #selector(ViewController.pauseOrResumeMusic), for: .touchUpInside)
self.view.addSubview(stopMusic)
}
// objc
@objc func pauseOrResumeMusic(){
if self.audioPlayer.isPlaying{
//isPlaying
self.audioPlayer.pause()
}else{
self.audioPlayer.play()
}
}
func audioPlayerBeginInterruption(_ player: AVAudioPlayer) {
print("被打断")
}
func audioPlayerDidFinishPlaying(_ player: AVAudioPlayer, successfully flag: Bool) {
print("播放完成")
}
}
```
附件中携带了一份我自己制作的兰亭序伴奏demo.mp3你可以用这个音频文件进行功能实现尝试。
## 视频播放
实现了音频播放该如何实现视频播放呢Swift 中内置了视频播放的功能,总体上来说,本地视频播放的思路和音频一样,都需要我们设置视频的 url 地址,将本地视频导入其中。在此之前我们需要导入 AVFoundation 头文件,在 `viewDidLoad()`中:
```swift
let moviePath = Bundle.main.path(forResource: "movie", ofType: "mp4")
let movieURL = URL(fileURLWithPath: moviePath!)
let avPlayer = AVPlayer(url: movieURL as URL)
let avPlayerLayer = AVPlayerLayer(player:avPlayer)
avPlayerLayer.frame = self.view.bounds
avPlayerLayer.videoGravity = AVLayerVideoGravity.resizeAspectFill self.view.layer.addSublayer(avPlayerLayer)
avPlayer.play()
```
### 借助播放器
在上面的代码中,我们实现了视频的播放,不过你可能发现在该 项目中我们无法进行暂停与快进,更不用提画中画和声音等功能,要想实现这些内容,我们需要借助 Swift 内置的播放器:
```swift
import UIKit
import AVFoundation
import AVKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// URL
let moviePath = Bundle.main.path(forResource: "movie", ofType: "mp4")
let movieURL = URL(fileURLWithPath: moviePath!)
//
let avPlayer = AVPlayer(url:movieURL as URL)
let playerVC = AVPlayerViewController()
playerVC.player = avPlayer
playerVC.videoGravity = AVLayerVideoGravity.resizeAspect
/*.resizeAspectFill
.resizeAspect */
playerVC.allowsPictureInPicturePlayback = true
playerVC.showsPlaybackControls = true playerVC.view.frame = self.view.bounds
playerVC.player!.play()
self.view.addSubview(playerVC.view)
}
}
```