swift-媒体与动画

1.使用图形上下文按一定比例缩放图片
     overridefuncviewDidLoad() {
        super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
//从项目资源文件中读取一张图片
let image = UIImage(named: “1.jpg”)
//调用缩放图片的方法,将图片缩小至指定尺寸
let scaledImage = self.scaleImage(image!, newSize: CGSizeMake(180,180))
//创建一个图像视图,并加载尺寸缩小后的图片
let imageView = UIImageView(image: scaledImage)
//设置图像视图的中心点坐标(160,160)
imageView.center = CGPointMake(160, 160)
self.view.addSubview(imageView)}

//首先创建一个方法,传递一个图像参数,和一个缩放比例参数,实现将图像,缩放至指定比例的功能
func scaleImage(image:UIImage,newSize:CGSize) -> UIImage {
//获得源图像的尺寸属性
let imageSize = image.size
//获得源图像的宽度数值
let width = imageSize.width
//获得源图像的高度数值
let height = imageSize.height
//计算图像新尺寸与旧尺寸的宽高比例
let widthFactor = newSize.width/width
let heightFactor = newSize.height/height
//获取最小的那个比例
let scaleFactor = (widthFactor<heightFactor) ? widthFactor : heightFactor
//计算图像新的宽度和高度,并将新的宽度和高度,构建成标准CGSize对象
let scaleWidth = width * scaleFactor
let scaleHeight = height * heightFactor
let targetSize = CGSizeMake(scaleWidth, scaleHeight)

//创建绘图上文环境
UIGraphicsBeginImageContext(targetSize)
//将图像对象,画入之前计算的新尺寸里,原点为(0,0)
image.drawInRect(CGRectMake(0, 0, scaleWidth, scaleHeight))
//获取上下文里的内容,将内容写入到新的图像对象
let newImage = UIGraphicsGetImageFromCurrentImageContext()
//在方法的结尾,返回生成的新的图像对象
return newImage

    }
2.使用图形上下文转换图片为灰度图
     overridefuncviewDidLoad() {
        super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
let image = UIImage(named: “1.jpg”)
//调用灰度图转换方法,将图片转换为灰度图
let grayedImage = self.grayImage(image!)let imageView = UIImageView(image: grayedImage)
imageView.center = CGPointMake(190, 260)
self.view.addSubview(imageView)

}

//创建一个方法,传递一个图像参数,实现将图像,转换为灰度图功能
func grayImage(image:UIImage) -> UIImage {
//获得源图像的尺寸属性
let imageSize = image.size
//获得源图像的宽度和高度数值
let width = Int(imageSize.width)
let height = Int(imageSize.height)
//创建灰度色空间对象。各种设备对待颜色的方式都不同,颜色必须有一个相关的色彩空间。否则,图形上下文将不知道如何解释相关的颜色值
let spaceRef:CGColorSpaceRef = CGColorSpaceCreateDeviceGray()!
//参数1,指向要渲染的绘制内存的地方,参数2,3分别表示宽度和高度,参数4表示内存中像素的每个组件的位数,参数5 表示一行,在内存所占的比特数,参数6,表示上下文使用的颜色空间,参数7表示是否包含alpha通道
let context:CGContextRef = CGBitmapContextCreate(nil, width, height, 8, 0, spaceRef, CGBitmapInfo.ByteOrderDefault.rawValue)!
//创建一个和源图像相同尺寸的空间
let rect = CGRectMake(0, 0, imageSize.width, imageSize.height)
//在灰度上下文画入图片
CGContextDrawImage(context, rect, image.CGImage)
//从上下文中,获取并生成转为灰度的图片
let grayImage = UIImage(CGImage: CGBitmapContextCreateImage(context)!)
//返回灰度图片
return grayImage

    }
3.使用CoreImage框架设置图片的单色效果
     //首先导入要使用的CoreImage框架。该框架提供了强大和高效的图像处理功能,用来对基于像素的图像进行分析处理
     importCoreImage
     overridefuncviewDidLoad() {
        super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
let image = UIImage(named: “1.jpg”)
let imageView = UIImageView(image: image)
self.view.addSubview(imageView)
//初始化一个CoreImage图像对象,并加载之前导入的图片
let ciimage = CIImage(image: image!)
//初始化一个颜色对象,并设置其颜色值为棕色,七参数值介于0和1之间
let color = CIColor(red: 0.8,green: 0.6,blue: 0.4)
//初始化一个滤镜对象,并设置滤镜类型为单色滤镜
let filter = CIFilter(name: “CIColorMonochrome”)
//设置单色调滤镜的输入颜色值
filter?.setValue(color, forKey: kCIInputColorKey)
//设置单色调滤镜的颜色浓度值
filter?.setValue(1.0, forKey: kCIInputIntensityKey)
//设置需要应用单色调滤镜的图像
filter?.setValue(ciimage, forKey: kCIInputImageKey)
//获得应用单色调滤镜后的图像
let outImage = filter?.outputImage
//更改图像视图的内容,为应用滤镜后的图像
imageView.image = UIImage(CIImage: outImage!)}

4.使用CoreImage框架更改图片的色相
        letimage =UIImage(named:”1.jpg”)
        let imageView = UIImageView(image: image)
self.view.addSubview(imageView)
        //初始化一个CoreImage图像对象,并加载之前导入的图片
       letciimage =CIImage(image: image!)
        //初始化一个滤镜对象,并设置滤镜类型为色相调整滤镜
let filter = CIFilter(name: “CIHueAdjust”)
//设置色相调整滤镜的输入角度值为30度
filter?.setValue(3.14/6, forKey: kCIInputAngleKey)
//设置需要应用色相调整滤镜的图像
filter?.setValue(ciimage, forKey: kCIInputImageKey)
//获取应用色相调整滤镜后的图像
letoutImage = filter?.outputImage
        imageView.image = UIImage(CIImage: outImage!)
5.使用CoreImage框架给图片添加马赛克效果
        letimage =UIImage(named:”1.jpg”)
        let imageView = UIImageView(image: image!)
self.view.addSubview(imageView)
//初始化一个CoreImage图像对象,并加载之前导入的图片
let ciimage = CIImage(image: image!)
//初始化一个滤镜对象,并设置滤镜类型为像素化滤镜
let filter = CIFilter(name: “CIPixellate”)
//设置像素化滤镜,采用默认的配置选项
filter?.setDefaults()
//设置需要应用像素化滤镜的图像
filter?.setValue(ciimage, forKey: kCIInputImageKey)
//获得应用像素化滤镜后的图像
letoutImage = filter?.outputImage
        imageView.image = UIImage(CIImage: outImage!)
6.使用UIBlurEffect给图片添加模糊效果
let image = UIImage(named: “1.jpg”)
let imageView = UIImageView(image: image!)
self.view.addSubview(imageView)//从8.0版本开始,系统提供了模糊效果的功能。这里判断如果系统版本号大于或等于8.0,则使用模糊效果
if#available(iOS8.0, *) {
//初始化一个模糊效果对象,模糊效果对象可以帮助你,快速制作类似于导航栏、通知中心或者控制中心的毛玻璃效果
let blur = UIBlurEffect(style:UIBlurEffectStyle.Light)
//初始化一个基于模糊效果的视觉效果视图
let blurView = UIVisualEffectView(effect:blur)
//设置模糊效果视图的位置为(40,40),尺寸为(200,200)
blurView.frame = CGRectMake(40, 40, 200, 200)
//设置模糊视图的圆角半径为30
blurView.layer.cornerRadius = 30
//设置模糊视图层的遮罩覆盖属性,进行边界裁切
blurView.layer.masksToBounds = true
//将模糊视图,添加到图像视图,作为图像视图的子视图
imageView.addSubview(blurView)

}else{
//fallback on earlier versions
print(“UIBlurEffect is only available on ios 8.0 or later.”)

        }
7.使用CATransaction Reveal制作动画
        letrect =CGRectMake(10,100,320,211)
        let imageView = UIImageView(frame:rect)

let image = UIImage(named: “1.jpg”)
imageView.image = image
self.view.addSubview(imageView)

//使用两种方法来实现动画效果,一种是视图层面的,另一种是使用过渡动画,它实现了层的过渡动画,因此可以更低层次的控制
let animation = CATransition()
//设置动画的时长为2秒
animation.duration = 2
//设置动画的播放速度为由慢至快
animation.timingFunction = CAMediaTimingFunction(name:kCAMediaTimingFunctionEaseOut)
//设置动画的类型为渐显动画
animation.type = kCATransitionReveal
//将动画指定给图像视图的层

        imageView.layer.addAnimation(animation, forKey:”Reveal”)
8.使用CATransaction Push制作动画
        letrect =CGRectMake(10,100,320,211)
        let imageView = UIImageView(frame:rect)

let image = UIImage(named: “1.jpg”)
imageView.image = image
self.view.addSubview(imageView)

//初始化一个过渡动画实例
let animation = CATransition()
animation.duration = 2
//设置动画的播放速度为由慢至快
animation.timingFunction = CAMediaTimingFunction(name:kCAMediaTimingFunctionEaseOut)
//设置动画的类型为入场动画
animation.type=kCATransitionPush

        imageView.layer.addAnimation(animation, forKey: “Push”)
9.UIView视图的动画块
     overridefuncviewDidLoad() {
        super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
let rect = CGRectMake(50, 50, 200, 200)
let imageView = UIImageView(frame:rect)
let image = UIImage(named: “1.jpg”)

imageView.image = image
//设置图像的标识值,以便后期对图像视图的调用
imageView.tag = 1
self.view.addSubview(imageView)
//初始化一个按钮对象,当点击按钮是开始播放动画
let button = UIButton(type:UIButtonType.System)
button.frame = CGRectMake(50, 400, 220, 44)
button.backgroundColor = UIColor.lightGrayColor()
button.setTitle(“tap”, forState: UIControlState.Normal)
//给按钮对象,绑定点击事件
button.addTarget(self, action: “playAnimation”, forControlEvents: UIControlEvents.TouchUpInside)
self.view.addSubview(button)

}

//创建一个方法,来响应按钮的点击事件
func playAnimation(){
//发出开始视图动画的请求,标志着视图动画块的开始。在它和提交动画请求之间,可以定义动画的各种展现方式
UIView.beginAnimations(nil, context: nil)
//设置动画的播放速度为淡入淡出
UIView.setAnimationCurve(.EaseInOut)
//设置动画的时长为5秒
UIView.setAnimationDuration(5)
//设置动画从视图当前状态开始播放
UIView.setAnimationBeginsFromCurrentState(true)
//接着通过标识值,找到之前创建的图像视图,作为动画的载体
let view = self.view.viewWithTag(1)
//设置动画类型为翻转动画
UIView.setAnimationTransition(.FlipFromRight, forView: view!, cache: true)
//调用视图的提交动画方法,表示着动画块的结束
UIView.commitAnimations()

    }
10.UIView视图卷曲动画的制作
overridefunc viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
let rect = CGRectMake(50, 50, 200, 200)
let imageView = UIImageView(frame:rect)
let image = UIImage(named: “1.jpg”)

imageView.image = image
//设置图像的标识值,以便后期对图像视图的调用
imageView.tag = 1
self.view.addSubview(imageView)
//初始化一个按钮对象,当点击按钮是开始播放动画
let button = UIButton(type:UIButtonType.System)
button.frame = CGRectMake(50, 400, 220, 44)
button.backgroundColor = UIColor.lightGrayColor()
button.setTitle(“tap”, forState:UIControlState.Normal)

        //给按钮对象,绑定点击事件
       button.addTarget(self, action:”playAnimation”, forControlEvents:UIControlEvents.TouchUpInside)
self.view.addSubview(button)

}

func playAnimation()
{
//发出开始视图动画的请求,标志着视图动画块的开始。在它和提交动画请求之间,可以定义动画的各种展现方式
UIView.beginAnimations(nil, context: nil)
//设置动画的播放速度为淡入淡出
UIView.setAnimationCurve(.EaseInOut)
//设置动画的时长为5秒
UIView.setAnimationDuration(2)
//设置动画从视图当前状态开始播放
UIView.setAnimationBeginsFromCurrentState(true)
let view = self.view.viewWithTag(1)
//设置动画为卷曲动画
UIView.setAnimationTransition(.CurlUp, forView: view!, cache: true)

UIView.commitAnimations()

    }
11.检测UIView视图动画的结束事件
     overridefuncviewDidLoad() {
        super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
let rect = CGRectMake(50, 50, 200, 200)
let imageView = UIImageView(frame:rect)
let image = UIImage(named: “1.jpg”)

imageView.image = image
//设置图像的标识值,以便后期对图像视图的调用
imageView.tag = 1
self.view.addSubview(imageView)
//初始化一个按钮对象,当点击按钮是开始播放动画
let button = UIButton(type:UIButtonType.System)
button.frame = CGRectMake(50, 400, 220, 44)
button.backgroundColor = UIColor.lightGrayColor()
button.setTitle(“tap”, forState: UIControlState.Normal)
//给按钮对象,绑定点击事件
button.addTarget(self, action: “playAnimation”, forControlEvents: UIControlEvents.TouchUpInside)

self.view.addSubview(button)

}
func playAnimation(){
//发出开始视图动画的请求,标志着视图动画块的开始。在它和提交动画请求之间,可以定义动画的各种展现方式
UIView.beginAnimations(nil, context: nil)
//设置动画的播放速度为淡入淡出
UIView.setAnimationCurve(.EaseInOut)
UIView.setAnimationDuration(5)
UIView.setAnimationBeginsFromCurrentState(true)

let view = self.view.viewWithTag(1)
//设置动画的类型为翻转动画
UIView.setAnimationTransition(.FlipFromRight, forView: view!, cache: true)
//设置视图的目标位置为(50,50),目标尺寸(0,0)。即视图在进行翻转动画的同时,将移动到目标位置,并缩小至不可见的状态
view?.frame = CGRectMake(50, 50, 0, 0)
//同时设置动画的代理对象,为当前的视图控制器类,当前动画结束后,在控制器后台打印输出日志。
UIView.setAnimationDelegate(self)
//设置动画结束时,执行的方法
UIView.setAnimationDidStopSelector(“animationStop”)
UIView.commitAnimations()
}
//设置一个方法,用来响应动画结束事件
func animationStop(){
print(“animation stop”)
//同时将视图对象,从父视图中移除
self.view.viewWithTag(1)?.removeFromSuperview()

    }
12.使用UIImageView制作帧动画
        //初始化一个数组,用来存放图片素材
        var images = [UIImage]()
//创建一个循环,将导入的图片,依次存入数组中
for(var i = 1;i <= 3; i += 1){
images.append(UIImage(named: “\(i).jpg”)!)
}
let imageView = UIImageView(frame:CGRectMake(0,60, 335, 253))
//设置图像视图的动画图片属性
imageView.animationImages = images
imageView.animationDuration = 5
//设置动画的循环次数,0表示无限循环播放
imageView.animationRepeatCount = 0
//开始帧动画的播放
imageView.startAnimating()
        self.view.addSubview(imageView)

发表评论

电子邮件地址不会被公开。 必填项已用*标注