CALayer- bounds、position、anchorP
2016-09-07 本文已影响71人
Sunnyxi
CALayer
每个UIView都有一个根CALayer,UIView本身没有显示的功能,是靠CALayer进行绘制的效果,然而CALayer不能响应事件。
好多动画效果都是通过CALayer来实现的,非根CALayer修改其属性都包含着隐式动画,例如修改背景颜色。根CALAyer把这个效果给去掉了。
CALayer * layer = [CALayer layer];
layer.backgroundColor = [UIColor redColor].CGColor;
[self.view.layer addSublayer:layer];
layer.bounds = CGRectMake(0, 0, 100, 100); //控制大小
layer.position = CGPointMake(100, 100); //控制x,y,设置在父视图中的位置,以父视图左上角为原点(0,0)
layer.anchorPoint = CGPointMake(0, 0); //定点,锚点,决定CALayer身上的哪个点会在position属性所指的位置,以自己的左上角为原点(0,0),取值在[0,1]
下面这个动画效果即可通过CALayer来实现。
_moreView.layer.anchorPoint = CGPointMake(0.9, 0);
_moreView.layer.bounds = CGRectMake(0, 0, 155, 212);
_moreView.layer.position = CGPointMake(mScreenWidth - 30, 44 + 10);
if (self.moreView.hidden) { //显示
self.moreView.hidden = NO;
self.moreView.transform = CGAffineTransformMakeScale(0.0001, 0.001);
[UIView animateWithDuration:0.3 animations:^{
self.moreView.transform = CGAffineTransformMakeScale(1.0, 1.0);
}];
} else { //隐藏
[UIView animateWithDuration:0.3 animations:^{
self.moreView.transform = CGAffineTransformMakeScale(0.0001, 0.001);
} completion:^(BOOL finished) {
if (finished) {
self.moreView.hidden = YES;
}
}];
}