//
// ViewController.swift
// 图层_layer基本使用
//
// Created by admin on 16/1/27.
// Copyright © 2016年 jin. All rights reserved.
//
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var imageView: UIImageView!
weak var childLayer:CALayer!
override func viewDidLoad() {
super.viewDidLoad()
// 设置圆角的同时设置阴影,需要先将图片切成圆角,再设置阴影
// self.imageView.layer.contents = self.corrnerImage().CGImage
// self.transform(self.imageView.layer)
// self.position()
self.animation()
}
// 隐式动画,注意根层layer是没有隐式动画的
func animation()
{
self.imageView.layer.contents = self.corrnerImage().CGImage
let layer = CALayer()
layer.frame = CGRectMake(100, 100, 100, 100)
layer.contents = self.corrnerImage().CGImage
self.imageView.layer.addSublayer(layer)
// 给变量属性,方便之后使用
self.childLayer = layer
}
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
CATransaction.begin()
// 关闭子层的动画
// CATransaction.setDisableActions(true)
// 设置动画执行的时间
CATransaction.setAnimationDuration(10)
self.imageView.layer.transform = CATransform3DMakeScale(1.5, 1.5, 1.5)
self.childLayer.transform = CATransform3DMakeScale(1.5, 1.5, 1.5)
CATransaction.commit()
}
// 使用自定义layer
func layer()
{
let layer = ViewController.MyLayer()
layer.frame = CGRectMake(0, 0, 100, 100)
self.view.layer.addSublayer(layer)
// 和自定义view不同的是,自定义layer要显示,需要调用下 setNeedsDisplay 方法
layer.setNeedsDisplay()
}
// 自定义layer
class MyLayer: CALayer {
// 渲染 layer 内容
override func drawInContext(ctx: CGContext) {
CGContextAddEllipseInRect(ctx, CGRectMake(0, 0, 100, 100))
UIColor.redColor().set()
CGContextFillPath(ctx)
}
}
// position 和 anchorPoint
func position()
{
let layer = CALayer()
layer.frame = CGRectMake(0, 0, 100, 100)
layer.backgroundColor = UIColor.blackColor().CGColor
// 设置位置,这里的位置其实是设置锚点的坐标
layer.position = CGPoint(x: 100, y: 100)
// 设置锚点
layer.anchorPoint = CGPoint(x: 0, y: 1)
self.view.layer.addSublayer(layer)
}
// layer的形变属性
func transform(layer:CALayer)
{
// 因为这里和之前的view的transform不一样,需要理解3d是什么样的,3d的有三个方向(正方体的一个角的三条棱可以作为参照),所以有三个坐标值,分别对应(x,y,z)
// 平移,3d的有三个方向,所以有三个值,分别对应(x,y,z),注意这里最后一个是无效的
layer.transform = CATransform3DMakeTranslation(10, 20, 0)
// 缩放,最后一个属性无效
layer.transform = CATransform3DMakeScale(1, 0.5, 10)
// 旋转,参数分别对应(角度,x轴是否旋转,y轴是否旋转,z轴是否旋转)
layer.transform = CATransform3DMakeRotation(CGFloat(M_PI * 0.3), 1, 1, 1)
// kvc方式赋值,注意这里需要用 NSValue 转换下
layer.setValue(NSValue.init(CATransform3D: CATransform3DMakeScale(1.5, 1, 0)), forKey: "transform")
// kvc forKeyPath方式
layer.setValue(1.1, forKeyPath: "transform.scale.x")
// 不具体指定某个值
layer.setValue(NSValue.init(CGPoint: CGPoint(x: 100, y: 10)), forKeyPath: "transform.translation")
}
// 获得圆角带边框图片
func corrnerImage()->UIImage
{
let image = UIImage(imageLiteral: "3")
UIGraphicsBeginImageContextWithOptions(image.size, false, 0)
let layer = CALayer()
layer.bounds = CGRectMake(0, 0, image.size.width, image.size.width)
layer.contents = image.CGImage
layer.cornerRadius = 10
layer.masksToBounds = true
layer.borderColor = UIColor.whiteColor().CGColor
layer.borderWidth = 5
layer.renderInContext(UIGraphicsGetCurrentContext()!)
let resImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return resImage
}
// 图层常用属性
func layerAttr()
{
// self.imageView.image = UIImage(imageLiteral: "2")
// 使用了auto layout下面的设置是无效的
self.imageView.layer.frame = CGRectMake(self.imageView.frame.origin.x, self.imageView.frame.origin.y, 300, 200)
self.imageView.layer.bounds = CGRectMake(0, 0, 300, 200)
// 圆角,两个属性一起使用才有效
self.imageView.layer.cornerRadius = 10
// self.imageView.layer.masksToBounds = true
// 设置图层背景颜色
// self.imageView.layer.backgroundColor = UIColor.redColor().CGColor
// 设置layer背景,一般是个图片,
self.imageView.layer.contents = UIImage(imageLiteral: "2").CGImage
// 设置阴影,注意color和opacity要同时使用才能看到阴影,再就是,如果使用了剪切的话,阴影设置是无效的
self.imageView.layer.shadowColor = UIColor.blackColor().CGColor
// 阴影起始位置相对于原view的位置
self.imageView.layer.shadowOffset = CGSize(width: 10, height: 10)
// 阴影的透明度,默认是完全透明的
self.imageView.layer.shadowOpacity = 0.5
// 阴影的圆角
self.imageView.layer.shadowRadius = 10
// 边框,注意两个属性要配合使用才有效
self.imageView.layer.borderColor = UIColor.whiteColor().CGColor
self.imageView.layer.borderWidth = 5
}
}