CALayer- bounds、position、anchorPoint

CALayer

每个UIView都有一个根CALayer,UIView本身没有显示的功能,是靠CALayer进行绘制的效果,然而CALayer不能响应事件。

好多动画效果都是通过CALayer来实现的,非根CALayer修改其属性都包含着隐式动画,例如修改背景颜色。根CALAyer把这个效果给去掉了。

CALayer- bounds、position、anchorPoint_第1张图片
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- bounds、position、anchorPoint_第2张图片

下面这个动画效果即可通过CALayer来实现。


CALayer- bounds、position、anchorPoint_第3张图片
 _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;
        }
        
    }];
}

你可能感兴趣的:(CALayer- bounds、position、anchorPoint)