var myString = "Hello world! - swift.jsrun.net"
print(myString)
//3.3.2 UIView动画播放方法
//1.UIView的旋转方法
let iv = self.view.viewWithTag(4)
UMeManimotelnthontrion ocneadotcFoot350)
1)
//2.UIView的平移动画
let iv =self.view.view(4)!
UIView,animate(withDuration: 2,animatons:(
iv.frame.orign.x += 100
if iv.frame.origin.x > self.view.feame.size.width(
iv.frame.origin.x = 0
1了
1)
//3.UIView的缩放动画
let iv =self.view.viewWithTag(4)!
UIView,animate(withDuration: 2,animatons(
iv.transfrom=CGAffineTranfrom(scaleX: 0.8,y: 0.8)))
//4.UIView的透明度动画
let iv = self.view.viewWithTag(4)!
UIView.animate(withDuration: 2,animatons(
iv.alpha = 0.1
3)
//播放沙盒的视频文件
impoort Ulkit
impoort AVkit
class ViewController: UIViewController (
@IBAction func play(sender:Any)
//打开在沙盒中的视频文件test.mov
let path = Bundle.main.path(forResource:"test",offype:"mov")
//转化为URL
let url = URL(fileURLWithpath: path!)
//打开AVplayer
let plsyer =AVplayer(url:url)
//AVplayerViewController实例化
let PlayerViewController =AVplayerVlewConterollerO
//设置播放器
PlayerViewController.plsyer =plsyer
//添加播放器的view大小和范围
PlayerViewController.view.frame =CGRect(x:20,y:100,width:self.view.bounds.width -40,heihjt:20self.addChild(PlayerViewController)
self.view.addSubview(PlayerViewController.view)
mport Ulkit
mport AVkit
lass ViewController: UIViewController {
@IBAction func Networkplay(_sender:UIButton) (
let neturl ="http://bos.nj.bpc.baidu.com/tieba-smallideo/11772_3c435014fb2dd9a5fd56a57
guard let networkUrl = URL(string: neturl) else (return]
//播放网络视频
let player = AVplayer(url: networkUrl)
let PlayerViewController = AVplayerVlewConteroller(0
PlayerViewController.player =player
self.present(PlayerViewController,true,completion: nil)
}
}
//3.5.1听音看形识动物
import UlKit
//导入视频支持库
import AVKit
//导入音频支持库
import AVFoundation
class ViewController: UIViewControllerf
//是否播放视频标记
var playFlag=falae
//视频播放控制器
var playerViewController=AVPlayerViewController(O
//音频播放器变量
Windows (CRLF)
var soundPlayer : AVAudioPlayer!
override funce viewDidLoad0f
super.viewDidLoad0
//Do any additional setup after loaing the view.
let iv =sellf.view.viewWithTag(4)! as! Ullmageview
//每个图片出现的间隔时间为0.5秒
let img =Ullmage.animatedImageNamed("frame_",duration:0.5)
//设置动画
iv.image=img
//开启定时器,自动调用相关函数
Timer.scheduleTimer(timerlnterval:2.0,target:self,selector:#selector(dorTimer),userlnfo:nil,repeats:true)
@objo func dorTimer0
let iv =self.view.viewWithTag(4)!
UIView.animate(withDuration:2,animations:
iv.transform=iv.transform.rotated(by:CGFloat(360)) I
))
@IBAction func onPlayAudio(_sender:UIButton)(
//获取当前按钮的title
let title=sender.currentTitle
let path =Bundle .main.path(forResource:title,ofType:"mp3")//将路径转化为URL
let url=URL(fileURLWithPath:path!)
//调用AVAuioPlayer函数,生成播放器
soundPlayer=try?AVAudioPlayer(contentsOf:url)
//播放器播放声音,默认是循环播放方式
soundPlayer.Play0
@IBAction func onPlayVideo( sender:UIButton)(
if !playFlag(
//打开在沙盒中的视频文件test.mov
let path=Bundle.main.path(forResource:"rollinwild",ofType:"mp4")//转化为URL
let url–URL(fileURLWithPath:path!)
//打开AVPlayer
let player=AVPlayer(url:url)
//AVPlayerViewController实例化
player.play0
//设置播放器
playerViewController.player=player
//获得当前按钮的位置和尺寸
let buttonPosition=sender.frame
//视频播放的位置x
let x =buttonPosition.origin.x-200
//播放视频的位置y
let v=buttonPosition.oriain.v-120
playerViewController.view.frame=CGRect(xx,y:y,width:200,height:112)
self.addChild(playerViewController)
self.view.addSubview(playerViewController.view)
playFlag=true
)
else
playerViewController.view.removeFromSuperview)
playFlag=false
//3.5.2 屏幕旋转的处理
//1.在控制器的viewDidLoad)适当的地方注册通知监听者
//设置UIDevice方向变化监听的通知
NotificationCenter.default.addObserver(self,selector:#selector(receivedRotation(notification)), name:NSNotification.Name.UIDevceOrientationDidChange,object:nil)
//2.处理旋转过程中需要的操作
//UIDevice旋转方向通知监听触发的方法
func receivedRotation(notification:NSNotification)[
backgroundView.frame=CGRect(x:0,y:0,width:self.view.frame.size.width,height:self.view.frame.size.height)上了
//3.2.1声音播放方法
import Ulkit
//导入音频支持库
import AVFoundation
class ViewController: ViewController (
//播放器变量
var soundplayer : AVFoundation!
let path = Bundle.main.path(foResource:"bird",ofTtpe:"mp3")//将路径转换为URL
let url = URL(fileURLWithpath: path!)
soundplayer= try? AVAudioplayer(contentsof:url)
//播放器播放声音,默认是循环播放方式
soundplayer.play0
}
}
struct ManyFaces: View {
static let emoji = [" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "]
var body: some View {
TimelineView(.periodic(from: .now, by: 0.2)) { timeline in
HStack(spacing: 120) {
let randomEmoji = ManyFaces.emoji[Int.random(in: 0..<ManyFaces.emoji.count)]
Text(randomEmoji)
.font(.largeTitle)
.scaleEffect(4.0)
SubView()
}
}
}
struct SubView: View {
var body: some View {
let randomEmoji = ManyFaces.emoji[Int.random(in: 0..<ManyFaces.emoji.count)]
Text(randomEmoji)
.font(.largeTitle)
.scaleEffect(4.0)
}
}
}
struct BeatingHeart: View {
var body: some View {
TimelineView(.cyclic(timeOffsets: [0.2, 0.2, 0.4])) { timeline in
Heart(date: timeline.date)
}
}
}
struct Heart: View {
@State private var phase = 0
let scales: [CGFloat] = [1.0, 1.6, 2.0]
let date: Date
var body: some View {
HStack {
Text("️随意添加
")
.font(.largeTitle)
.scaleEffect(scales[phase])
.animation(.spring(response: 0.10,
dampingFraction: 0.24,
blendDuration: 0.2),
value: phase)
.onChange(of: date) { _ in
advanceAnimationPhase()
}
.onAppear {
advanceAnimationPhase()
}
}
}
func advanceAnimationPhase() {
phase = (phase + 1) % scales.count
}
}
YDWGIFView.swift
// Project
//
// Created by cptech on 2017/6/19.
// Copyright 2017年 CPTECH_ydw. All rights reserved.
//
import UIKit
import ImageIO
import QuartzCore
class YDWGIFView: UIView {
var width:CGFloat{return self.frame.size.width}
var height:CGFloat{return self.frame.size.height}
private var gifUrl:NSURL!
private var totalTime:Float = 0 // GIF动画时间
private var imageArray:Array<CGImage> = [] // CGImage数组(存放每一帧的图片)
private var timeArray:Array<NSNumber> = [] // DelayTime数组(存放每一帧的图片的时间)
// 加载本地GIF图片
func showGIFImageWithLocalName(name:String) {
gifUrl = Bundle.main.url(forResource: name, withExtension: "gif")! as NSURL
self.creatFrame()
}
// 加载网络端的GIF图片
func showGIFImageFromNetWork(url:NSURL) {
let fileName = self.getMD5StringFromString(string: url.absoluteString!)
let filePath = NSHomeDirectory()+"/Library/Caches/YDWGIF/" + fileName + ".gif"
if FileManager.default.fileExists(atPath: filePath) {
self.gifUrl = NSURL(fileURLWithPath: filePath)
self.creatFrame()
} else {
let session = URLSession.shared
let task = session.dataTask(with: url as URL, completionHandler: { (data, response, error) in
DispatchQueue.main.async {
let path = NSURL(fileURLWithPath: filePath)
do {
try data?.write(to: path as URL)
self.gifUrl = NSURL(fileURLWithPath: filePath)
self.creatFrame()
} catch {
}
}
})
task.resume()
}
}
// 获取GIF图片的每一帧
func creatFrame() {
let url:CFURL = gifUrl as CFURL
let gifSource = CGImageSourceCreateWithURL(url, nil) // GIF所有资源
let imageCount = CGImageSourceGetCount(gifSource!) // GIF图片个数
for i in 0..<imageCount { // 获取每一帧图片
let imageRef = CGImageSourceCreateImageAtIndex(gifSource!, i, nil)
imageArray.append(imageRef!)
// 解析每一帧图片
let sourceDict = CGImageSourceCopyPropertiesAtIndex(gifSource!, i, nil) as NSDictionary!
// 获取图片的尺寸 (适应长宽比)
let imageWidth = sourceDict![String(kCGImagePropertyPixelWidth)] as! NSNumber
let imageHeight = sourceDict![String(kCGImagePropertyPixelHeight)] as! NSNumber
if imageWidth.floatValue/imageHeight.floatValue != Float(width/height) {
self.fitSacle(imageWidth: CGFloat(imageWidth), imageHeight: CGFloat(imageHeight))
}
let gifDict = sourceDict![String(kCGImagePropertyGIFDictionary)] as! NSDictionary
let time = gifDict[String(kCGImagePropertyGIFDelayTime)] as! NSNumber
timeArray.append(time)
totalTime += time.floatValue
}
self.showAnimation()
}
// 展示动画
func showAnimation() {
let animation = CAKeyframeAnimation(keyPath: "contents")
var current:Float = 0
var timeKeys:Array<NSNumber> = []
for time in timeArray {
timeKeys.append(NSNumber(floatLiteral: Double(current/totalTime)))
current += time.floatValue
}
animation.keyTimes = timeKeys
animation.values = imageArray
animation.repeatCount = HUGE;
animation.duration = TimeInterval(totalTime)
animation.isRemovedOnCompletion = false
self.layer.add(animation, forKey: "YDWGIFView")
}
// 将string转为MD5
func getMD5StringFromString(string:String) -> String {
let str = string.cString(using: .utf8)
let strlen = CC_LONG(string.lengthOfBytes(using: .utf8))
let digeTlen = Int(CC_MD5_DIGEST_LENGTH)
let result = UnsafeMutablePointer<CUnsignedChar>.allocate(capacity: digeTlen)
CC_MD5(str!, strlen, result)
let hash = NSMutableString()
for i in 0..<digeTlen {
hash.appendFormat("%02x", result[i])
}
return String(hash as String)
}
// 清除图片缓存方法
func cleanCache() {
let folderPath = NSHomeDirectory()+"/Library/Caches/YDWGIF/"
let manager = FileManager.default
do {
let fileName = try? manager.contentsOfDirectory(atPath: folderPath)
for name in fileName! {
try? manager.removeItem(atPath: folderPath+name)
}
} catch {
}
}
// 适应长宽比
func fitSacle(imageWidth:CGFloat, imageHeight:CGFloat) {
var newWidth:CGFloat
var newHeight:CGFloat
if imageWidth/imageHeight > width/height {
newHeight = width/(imageWidth/imageHeight)
newWidth = width
} else {
newWidth = height*(imageWidth/imageHeight)
newHeight = height
}
let point:CGPoint = self.center
self.frame.size = CGSize(width: newWidth, height: newHeight)
self.center = point
}
}