UIBezierPathStudyDemo
import UIKit
import XCPlayground //创建view
let myView = UIView(frame:CGRectMake(0, 0, 300, 200))
//实时显示TimeLine
XCPlaygroundPage.currentPage.liveView = myView
myView.backgroundColor = UIColor.whiteColor() /************ 打开相应的注释, 就会自动显示在Timeline里面了*******/ /***********************基础使用****************************/
// 创建layer
let myLayer = CAShapeLayer()
myLayer.frame = CGRectMake(0, 0
, 100, 50)
//myLayer.backgroundColor = UIColor.yellowColor().CGColor //创建贝塞尔曲线
//画正方形
let path = UIBezierPath(rect: CGRectMake(50, 10, 50, 50))
//圆角长方形
let path2 = UIBezierPath(roundedRect: CGRectMake(50, 10, 80, 50), cornerRadius: 25) //画圆
let radius:CGFloat = 30.0;
let startAngle:CGFloat = 0.0;
let endAngle:CGFloat = CGFloat(M_PI * 2) let path3 = UIBezierPath(arcCenter: myView.center, radius: radius, startAngle: startAngle, endAngle: endAngle, clockwise: true) //赋值path绘图案
myLayer.path = path3.CGPath;
//layer填充颜色
myLayer.fillColor = UIColor.redColor().CGColor //myLayer.fillColor = UIColor.clearColor().CGColor
//layer描边颜色
myLayer.strokeColor = UIColor.whiteColor().CGColor
//添加layerd到view
myView.layer.addSublayer(myLayer) /***********************基础使用****************************/ /*
/***************通过控制点画贝塞尔曲线********************/
//开始点
let startPoint = CGPointMake(50, 100)
//结束点
let endPoint = CGPointMake(250, 100)
//中间控制点
//let controlPoint = CGPointMake(150, 40)
let controlPoint = CGPointMake(116, 40)
let controlPoint2 = CGPointMake(182, 180)
//红色标示正方形begin
let layer1 = CALayer()
layer1.frame = CGRectMake(startPoint.x, startPoint.y, 5, 5)
layer1.backgroundColor = UIColor.redColor().CGColor
let layer2 = CALayer()
layer2.frame = CGRectMake(endPoint.x, endPoint.y, 5, 5)
layer2.backgroundColor = UIColor.redColor().CGColor
let layer3 = CALayer()
layer3.frame = CGRectMake(controlPoint.x, controlPoint.y, 5, 5)
layer3.backgroundColor = UIColor.redColor().CGColor
let layer4 = CALayer()
layer4.frame = CGRectMake(controlPoint2.x - 2.5, controlPoint2.y - 5, 5, 5)
layer4.backgroundColor = UIColor.redColor().CGColor
//红色标示正方形end
//初始化
let path = UIBezierPath()
let layer = CAShapeLayer()
//设置开始点
path.moveToPoint(startPoint)
//画线路径 参数:(结束点, 控制点)
//path.addQuadCurveToPoint(endPoint, controlPoint: controlPoint)
//多个控制点
path.addCurveToPoint(endPoint, controlPoint1: controlPoint, controlPoint2: controlPoint2)
layer.path = path.CGPath
layer.fillColor = UIColor.clearColor().CGColor
layer.strokeColor = UIColor.blackColor().CGColor
myView.layer.addSublayer(layer)
myView.layer.addSublayer(layer1)
myView.layer.addSublayer(layer2)
myView.layer.addSublayer(layer3)
myView.layer.addSublayer(layer4)
/***************通过控制点画贝塞尔曲线********************/
*/ /*
/***********************添加动画****************************/
private func animation1() {
let animation = CABasicAnimation(keyPath: "strokeEnd")
animation.fromValue = 0
animation.toValue = 1
animation.duration = 2
layer.addAnimation(animation, forKey: "")
}
private func animation2() {
layer.strokeStart = 0.5
layer.strokeEnd = 0.5 let animation = CABasicAnimation(keyPath: "strokeStart")
animation.fromValue = 0.5
animation.toValue = 0
animation.duration = 2 let animation2 = CABasicAnimation(keyPath: "strokeEnd")
animation2.fromValue = 0.5
animation2.toValue = 1
animation2.duration = 2 layer.addAnimation(animation, forKey: "")
layer.addAnimation(animation2, forKey: "")
}
private func animation3() {
let animation = CABasicAnimation(keyPath: "lineWidth")
animation.fromValue = 1
animation.toValue = 10
animation.duration = 2
layer.addAnimation(animation, forKey: "")
}
//animation1()
animation2()
animation3()
/***********************添加动画****************************/
*/ /*
/******************画不标准图形**********************/
let finalSize = CGSizeMake(CGRectGetWidth(myView.frame), 200)
let layerHeight = finalSize.height * 0.2
let layer = CAShapeLayer()
let bezier = UIBezierPath()
//左上角点
bezier.moveToPoint(CGPointMake(0, finalSize.height - layerHeight))
//画线到左下角
bezier.addLineToPoint(CGPointMake(0, finalSize.height - 1))
//画线到右下角
bezier.addLineToPoint(CGPointMake(finalSize.width, finalSize.height-1))
//画线到右上角
bezier.addLineToPoint(CGPointMake(finalSize.width, finalSize.height - layerHeight))
//从右上角画贝塞尔曲线到左上角
let controlP = CGPointMake(finalSize.width * 0.5, finalSize.height - layerHeight * 2)
bezier.addQuadCurveToPoint(CGPointMake(0, finalSize.height - layerHeight), controlPoint: controlP)
layer.path = bezier.CGPath
layer.fillColor = UIColor.redColor().CGColor
myView.layer.addSublayer(layer)
/******************画不标准图形**********************/
*/ /*
/******************画微信眼睛**********************/
//first
let eyeFirstLightLayer = CAShapeLayer()
let centerPoint = CGPointMake(CGRectGetWidth(myView.frame) * 0.5, CGRectGetHeight(myView.frame) * 0.5)
let startAngle = CGFloat(230.0 / 180.0 * M_PI)
let endAngle = CGFloat(265.0 / 180.0 * M_PI)
let path = UIBezierPath(arcCenter: centerPoint, radius: CGRectGetWidth(myView.frame) * 0.1, startAngle:startAngle, endAngle: endAngle, clockwise: true)
eyeFirstLightLayer.borderColor = UIColor.blackColor().CGColor
eyeFirstLightLayer.lineWidth = 5.0
eyeFirstLightLayer.path = path.CGPath
eyeFirstLightLayer.fillColor = UIColor.clearColor().CGColor
eyeFirstLightLayer.strokeColor = UIColor.darkGrayColor().CGColor
myView.layer.addSublayer(eyeFirstLightLayer)
//second
let eyeSecondLightLayer = CAShapeLayer()
let centerPoint2 = CGPointMake(CGRectGetWidth(myView.frame) * 0.5, CGRectGetHeight(myView.frame) * 0.5)
let startAngle2 = CGFloat(211.0 / 180.0 * M_PI)
let endAngle2 = CGFloat(220.0 / 180.0 * M_PI)
let path2 = UIBezierPath(arcCenter: centerPoint2, radius: CGRectGetWidth(myView.frame) * 0.1, startAngle:startAngle2, endAngle: endAngle2, clockwise: true)
eyeSecondLightLayer.borderColor = UIColor.blackColor().CGColor
eyeSecondLightLayer.lineWidth = 5.0
eyeSecondLightLayer.path = path2.CGPath
eyeSecondLightLayer.fillColor = UIColor.clearColor().CGColor
eyeSecondLightLayer.strokeColor = UIColor.darkGrayColor().CGColor
myView.layer.addSublayer(eyeSecondLightLayer)
//ball
let eyeBallLayer = CAShapeLayer()
let centerPointBall = CGPointMake(CGRectGetWidth(myView.frame) * 0.5, CGRectGetHeight(myView.frame) * 0.5)
let startAngleBall = CGFloat(0 / 180.0 * M_PI)
let endAngleBall = CGFloat(360.0 / 180.0 * M_PI)
let pathBall = UIBezierPath(arcCenter: centerPointBall, radius: CGRectGetWidth(myView.frame) * 0.15, startAngle:startAngleBall, endAngle: endAngleBall, clockwise: true)
eyeBallLayer.borderColor = UIColor.blackColor().CGColor
eyeBallLayer.lineWidth = 1.0
eyeBallLayer.path = pathBall.CGPath
eyeBallLayer.fillColor = UIColor.clearColor().CGColor
eyeBallLayer.strokeColor = UIColor.darkGrayColor().CGColor
eyeBallLayer.anchorPoint = CGPointMake(0.5, 0.5)
myView.layer.addSublayer(eyeBallLayer)
//topEye
let topEyeLayer = CAShapeLayer()
let centerPointTopEye = CGPointMake(CGRectGetWidth(myView.frame) * 0.5, CGRectGetHeight(myView.frame) * 0.5)
let startAngleTopEye = CGFloat(0 / 180.0 * M_PI)
let endAngleTopEye = CGFloat(360.0 / 180.0 * M_PI)
let pathTopEye = UIBezierPath()
pathTopEye.moveToPoint(CGPointMake(0, CGRectGetHeight(myView.frame) * 0.5))
pathTopEye.addQuadCurveToPoint(CGPointMake(CGRectGetWidth(myView.frame), CGRectGetHeight(myView.frame) * 0.5), controlPoint: CGPointMake(CGRectGetWidth(myView.frame) * 0.5, centerPointTopEye.y - centerPointTopEye.y - 20))
topEyeLayer.borderColor = UIColor.blackColor().CGColor
topEyeLayer.lineWidth = 1.0
topEyeLayer.path = pathTopEye.CGPath
topEyeLayer.fillColor = UIColor.clearColor().CGColor
topEyeLayer.strokeColor = UIColor.darkGrayColor().CGColor
myView.layer.addSublayer(topEyeLayer)
//BottomEye
let bottomEyeLayer = CAShapeLayer()
let centerPointBottomEye = CGPointMake(CGRectGetWidth(myView.frame) * 0.5, CGRectGetHeight(myView.frame) * 0.5)
let startAngleBottomEye = CGFloat(0 / 180.0 * M_PI)
let endAnglebottomEye = CGFloat(360.0 / 180.0 * M_PI)
let pathBottomEye = UIBezierPath()
pathBottomEye.moveToPoint(CGPointMake(0, CGRectGetHeight(myView.frame) * 0.5))
pathBottomEye.addQuadCurveToPoint(CGPointMake(CGRectGetWidth(myView.frame), CGRectGetHeight(myView.frame) * 0.5), controlPoint: CGPointMake(CGRectGetWidth(myView.frame) * 0.5, centerPointBottomEye.y * 2 + 20))
bottomEyeLayer.borderColor = UIColor.blackColor().CGColor
bottomEyeLayer.lineWidth = 1.0
bottomEyeLayer.path = pathBottomEye.CGPath
bottomEyeLayer.fillColor = UIColor.clearColor().CGColor
bottomEyeLayer.strokeColor = UIColor.darkGrayColor().CGColor
myView.layer.addSublayer(bottomEyeLayer)
// 动画
private func setupAnimation(){
eyeFirstLightLayer.lineWidth = 0.0
eyeSecondLightLayer.lineWidth = 0.0
eyeBallLayer.opacity = 0.0
bottomEyeLayer.strokeStart = 0.5
bottomEyeLayer.strokeEnd = 0.5
topEyeLayer.strokeStart = 0.5
topEyeLayer.strokeEnd = 0.5
}
private func eyeAnimation1() {
let animation = CABasicAnimation(keyPath: "lineWidth")
animation.fromValue = 0.0
animation.toValue = 5.0
animation.duration = 2 let animation2 = CABasicAnimation(keyPath: "lineWidth")
animation2.fromValue = 0.0
animation2.toValue = 5.0
animation2.duration = 2 let animation3 = CABasicAnimation(keyPath: "opacity")
animation3.fromValue = 0.0
animation3.toValue = 5.0
animation3.duration = 5
eyeFirstLightLayer.addAnimation(animation, forKey: "")
eyeSecondLightLayer.addAnimation(animation2, forKey: "")
eyeBallLayer.addAnimation(animation3, forKey: "")
eyeFirstLightLayer.lineWidth = 5.0
eyeSecondLightLayer.lineWidth = 5.0
eyeBallLayer.opacity = 1.0
}
private func topEyeLayerAnimation() {
let animation = CABasicAnimation(keyPath: "strokeStart")
animation.fromValue = 0.5
animation.toValue = 0
animation.duration = 2 let animation2 = CABasicAnimation(keyPath: "strokeEnd")
animation2.fromValue = 0.5
animation2.toValue = 1
animation2.duration = 2 topEyeLayer.addAnimation(animation, forKey: "")
topEyeLayer.addAnimation(animation2, forKey: "")
topEyeLayer.strokeStart = 0
topEyeLayer.strokeEnd = 1
}
private func eyeBottomAnimation() {
let animation = CABasicAnimation(keyPath: "strokeStart")
animation.fromValue = 0.5
animation.toValue = 0
animation.duration = 2 let animation2 = CABasicAnimation(keyPath: "strokeEnd")
animation2.fromValue = 0.5
animation2.toValue = 1
animation2.duration = 2 bottomEyeLayer.addAnimation(animation, forKey: "")
bottomEyeLayer.addAnimation(animation2, forKey: "")
bottomEyeLayer.strokeStart = 0
bottomEyeLayer.strokeEnd = 1
}
//初始化
setupAnimation()
//中间圆动画
eyeAnimation1()
//眼睛上部分动画
topEyeLayerAnimation()
//眼睛下部分动画
eyeBottomAnimation()
/******************画微信眼睛**********************/
*/
UIBezierPathStudyDemo的更多相关文章
随机推荐
- Cracking the Code Interview 4.3 Array to Binary Tree
Given a sorted (increasing order) array, write an algorithm to create a binary tree with minimal hei ...
- Linux_系统信息
公司里一些仿真软件得进Linux系统,好奇公司用的什么Linux版本,于是搜罗了几个命令如下: 1 uname - Print system info -a, print all info -s, ...
- Python 最佳实践
前言 对我来说,以前每次面试是我审视自己,检验自己的一种方式.每次准备面试,以及被面试官问住的时候才会发现,其实我python我学的还不够好.工作中也是,可以从其他的同事那里获得成长.但是我今天说的是 ...
- Android签名用keytool和jarsigner制作apk文件
生成证书 keytool -genkey -alias aeo_android.keystore -keyalg RSA -validity -keystore aeo_android.keystor ...
- ssh-keygen
- EF6 在原有数据库中使用 CodeFirst 总复习(五、生成发帖页面)
有点与在原有数据库中使用 CodeFirst 远了,不过是总复习吗,总得全面点. 一.在用户表(Users)中插入两个用户 二.生成发帖界面 MVC生成的界面很多,也没使用Ajax,实际开发中很少会使 ...
- JavaScript 链式结构序列化详解
一.概述 在JavaScript中,链式模式代码,太多太多,如下: if_else: if(...){ //TODO }else if(...){ //TODO }else{ //TODO } swi ...
- 使用cocos2d-x 3.2下载图片资源小例子
cocos2d-x(ios)下载资源可以使用以下两种方式: 第一种使用libcurl下载图片 使用这种方法需要注意的是,我们需要引入libcurl.a这个库,同时配置对应的库目录和头文件目录具体方法是 ...
- linux du命令: 显示文件、目录大小
介绍:du命令用于显示指定文件(夹)在磁盘中所占的空间信息.假如指定的文件参数实际上是一个目录,就要计算该目录下的所有文件.假如 没有提供文件参数,执行du命令,显示当前目录内的文件占用空间信息. 语 ...
- Primitive Objects
[Primitive Objects] Unity can work with 3D models of any shape that can be created with modelling so ...