iOS CoreAnimation(四) anchorPoint锚点是什么
2017-06-05 22:03
656 查看
在了解锚点之前,要知道:
UIView 有三个重要的布局属性:
frame,bounds,center
CALayer对应地叫做:
frame,bounds,position
为了能清楚区分,图层用了“position”,视图用了“center”,但是他们都代表同样的值
。现在不用知道这俩是什么,往下看。
frame:在父图层上占据的空间,包括 x,y,长,宽
bounds是内部坐标,{0, 0}通常是图层的左上角
anchorPoint 用单位坐标来描述,也就是图层的相对坐标,图层左上角是{0,0},右下角是{1,
1},默认是{0.5, 0.5}。(可以通过指定x和y值小于0或者大于1,使它放置在图层范围之外)
center 和position都是 anchorPoint 相对于父图层 的位置。
那么anchorPoint 理解成什么呢?
如果你修改了center或 position 属性值,那么由上面那句话的定义, anchorPoint 的绝对位置(在父图层上的位置)会随之改变。但是!它相对于自己这个图层的位置不变,比如 原来是(1,0),不论怎么改position ,还是 (1,0)。那么,要想维持这个值,就必须自动改变frame,来满足锚点的值,也就是相对于图层的位置不变,结果是整个图层的绝对位置变了
那么,如果我修改了 锚点的值呢?
看定义,同理,锚点的position不变,也就是绝对位置不变,而在图层的相对位置变了,图层就必须调整自己位置,适应锚点的值。
锚点有什么用呢???
做个钟表小程序就知道了
首先,想一下,表针要转。我们有3张表针的图片,要让他转也很容易,一个方法就搞定了。
关键是,它转的时候,是以中点为中心转圈对吧?怎么样让他以一端为中心转呢?
锚点就是来解决这个问题的。有的同学可能觉得 表针的图的后半部分是空白不就行了嘛,但是这样会增大内存资源占用
锚点可以看作转动时的轴!!!
通过这段叙述,你应该理解了这个 锚 字的含义,它像是一个图的锚、把柄,demo:
class ViewController:
UIViewController,CALayerDelegate {
//这个用纯代码也可以,不过图多 太麻烦。注意用IB的时候把自动调整、自动布局关了
@IBOutlet
weak var board:
UIImageView!
@IBOutlet
weak var minutePointer:
UIImageView!
@IBOutlet
weak var hourPointer:
UIImageView!
@IBOutlet
weak var secondPointer:
UIImageView!
//下面秒针下面的时针、分针都被挡住了
weak
var timer:Timer?
override
func viewDidLoad() {
super.viewDidLoad()
//下面三行先别写,跑一遍,再加上,再跑一遍,理解一下锚点
hourPointer.layer.anchorPoint = CGPoint(x:
0.5, y: 0.95)
minutePointer.layer.anchorPoint = CGPoint(x:
0.5, y: 0.95)
secondPointer.layer.anchorPoint = CGPoint(x:
0.5, y: 0.95)
//每秒出发一次,改指针
timer = Timer.scheduledTimer(timeInterval:
1.0, target: self, selector:
#selector(tick), userInfo:
nil, repeats: true)
timer!.fire()
}
func tick(){
//下面一段话是获得当前时、分、秒的,没意思
let date = Date()
let formatter = DateFormatter()
formatter.dateFormat =
"HH:mm:ss"
let dateStr = formatter.string(from: date)
let start2 = dateStr.index(dateStr.startIndex, offsetBy:
2)
let hour = Int8(dateStr.substring(to: start2))!
let minite = Int8(dateStr.substring(with: Range(uncheckedBounds: (dateStr.index(start2, offsetBy:
1),dateStr.index(start2, offsetBy:
3) ) )))!
let sec = Int8(dateStr.substring(with: Range(uncheckedBounds: (dateStr.index(start2, offsetBy:
4),dat
baad
eStr.index(start2, offsetBy:
6) ) )))! - 1
let hAngle = CGFloat.pi*CGFloat(hour)/6
let mAngle = CGFloat.pi*CGFloat(minite)/30
let sAngle = CGFloat.pi*CGFloat(sec)/30
minutePointer.transform = CGAffineTransform(rotationAngle: mAngle)
secondPointer.transform = CGAffineTransform(rotationAngle: sAngle)
hourPointer.transform = CGAffineTransform(rotationAngle: hAngle)
}
第二次跑起来!自己就乖乖的以一头转了!
}
UIView 有三个重要的布局属性:
frame,bounds,center
CALayer对应地叫做:
frame,bounds,position
为了能清楚区分,图层用了“position”,视图用了“center”,但是他们都代表同样的值
。现在不用知道这俩是什么,往下看。
frame:在父图层上占据的空间,包括 x,y,长,宽
bounds是内部坐标,{0, 0}通常是图层的左上角
anchorPoint 用单位坐标来描述,也就是图层的相对坐标,图层左上角是{0,0},右下角是{1,
1},默认是{0.5, 0.5}。(可以通过指定x和y值小于0或者大于1,使它放置在图层范围之外)
center 和position都是 anchorPoint 相对于父图层 的位置。
那么anchorPoint 理解成什么呢?
如果你修改了center或 position 属性值,那么由上面那句话的定义, anchorPoint 的绝对位置(在父图层上的位置)会随之改变。但是!它相对于自己这个图层的位置不变,比如 原来是(1,0),不论怎么改position ,还是 (1,0)。那么,要想维持这个值,就必须自动改变frame,来满足锚点的值,也就是相对于图层的位置不变,结果是整个图层的绝对位置变了
那么,如果我修改了 锚点的值呢?
看定义,同理,锚点的position不变,也就是绝对位置不变,而在图层的相对位置变了,图层就必须调整自己位置,适应锚点的值。
锚点有什么用呢???
做个钟表小程序就知道了
首先,想一下,表针要转。我们有3张表针的图片,要让他转也很容易,一个方法就搞定了。
关键是,它转的时候,是以中点为中心转圈对吧?怎么样让他以一端为中心转呢?
锚点就是来解决这个问题的。有的同学可能觉得 表针的图的后半部分是空白不就行了嘛,但是这样会增大内存资源占用
锚点可以看作转动时的轴!!!
通过这段叙述,你应该理解了这个 锚 字的含义,它像是一个图的锚、把柄,demo:
class ViewController:
UIViewController,CALayerDelegate {
//这个用纯代码也可以,不过图多 太麻烦。注意用IB的时候把自动调整、自动布局关了
@IBOutlet
weak var board:
UIImageView!
@IBOutlet
weak var minutePointer:
UIImageView!
@IBOutlet
weak var hourPointer:
UIImageView!
@IBOutlet
weak var secondPointer:
UIImageView!
//下面秒针下面的时针、分针都被挡住了
weak
var timer:Timer?
override
func viewDidLoad() {
super.viewDidLoad()
//下面三行先别写,跑一遍,再加上,再跑一遍,理解一下锚点
hourPointer.layer.anchorPoint = CGPoint(x:
0.5, y: 0.95)
minutePointer.layer.anchorPoint = CGPoint(x:
0.5, y: 0.95)
secondPointer.layer.anchorPoint = CGPoint(x:
0.5, y: 0.95)
//每秒出发一次,改指针
timer = Timer.scheduledTimer(timeInterval:
1.0, target: self, selector:
#selector(tick), userInfo:
nil, repeats: true)
timer!.fire()
}
func tick(){
//下面一段话是获得当前时、分、秒的,没意思
let date = Date()
let formatter = DateFormatter()
formatter.dateFormat =
"HH:mm:ss"
let dateStr = formatter.string(from: date)
let start2 = dateStr.index(dateStr.startIndex, offsetBy:
2)
let hour = Int8(dateStr.substring(to: start2))!
let minite = Int8(dateStr.substring(with: Range(uncheckedBounds: (dateStr.index(start2, offsetBy:
1),dateStr.index(start2, offsetBy:
3) ) )))!
let sec = Int8(dateStr.substring(with: Range(uncheckedBounds: (dateStr.index(start2, offsetBy:
4),dat
baad
eStr.index(start2, offsetBy:
6) ) )))! - 1
let hAngle = CGFloat.pi*CGFloat(hour)/6
let mAngle = CGFloat.pi*CGFloat(minite)/30
let sAngle = CGFloat.pi*CGFloat(sec)/30
minutePointer.transform = CGAffineTransform(rotationAngle: mAngle)
secondPointer.transform = CGAffineTransform(rotationAngle: sAngle)
hourPointer.transform = CGAffineTransform(rotationAngle: hAngle)
}
第二次跑起来!自己就乖乖的以一头转了!
}
相关文章推荐
- iOS CABasicAnimation 动画受layer.anchorPoint和layer.position 的影响
- 【iOS-Cocos2d游戏开发之十七】灵活使用精灵可视区域(TextureRect)与锚点(anchorPoint),并结合可视区域与锚点制作进度条!
- 【iOS-Cocos2d游戏开发之十七】灵活使用精灵可视区域(TextureRect)与锚点(anchorPoint),并结合可视区域与锚点制作进度条!
- IOS cocos2d学习笔记-<三>AnchorPoint锚点和CCLabelBMFont
- iOS AnchorPoint锚点
- iOS开发之锚点anchorPoint
- 什么是锚点(AnchorPoint)
- ios-day18-03(CALayer的两个属性position和anchorPoint(锚点))
- iPhone/iOS Core Animation开发总结
- ios Core Animation
- iPhone/iOS Core Animation开发总结(CALayer)
- ios 动画CoreAnimation中遇到的问题
- iphone ios CORE ANIMATION的学习备忘录(第一天)
- iPhone/iOS Core Animation开发总结
- cocos2d anchor point 锚点解析
- [ios]Core Animation之多种动画效果 【转】
- iOS:Core Animation笔记(1)
- cocos2d anchor point 锚点解析(转)
- cocos2d anchor point 锚点解析
- cocos2d anchor point 锚点解析(转)