糖糖的iOS专题转发收藏

position和anchorPoint

2016-07-29  本文已影响41人  我的梦想之路

CALayer有2个非常重要的属性:position和anchorPoint

@property CGPoint position;

用来设置CALayer在父层中的位置
以父层的左上角为原点(0, 0)

@property CGPoint anchorPoint;
称为“定位点”、“锚点”

决定着CALayer身上的哪个点会在position属性所指的位置
以自己的左上角为原点(0, 0)
它的x、y取值范围都是0~1,默认值为(0.5, 0.5)

看仔细了,图很多,位置找好(注意紫色小方块的位置)

anchorPoint(示意图)(1) anchorPoint(示意图)(2) anchorPoint(示意图)(3) anchorPoint(示意图)(4) anchorPoint(示意图)(5)

来了哦。重点的东西又来图了

position和anchorPoint(1) position和anchorPoint(2) position和anchorPoint(3) position和anchorPoint(4) position和anchorPoint(5)

对于上面图片比较蒙圈吧,嘻嘻接下来看文字咯

position和anchorPoint是CAlayer的两个属性.

我们以前修改一个控件的位置都是能过Frame的方式进行修改.

现在利用CALayer的position和anchorPoint属性也能够修改控件的位置.
这两个属性是配合使用的.

position:它是用来设置当前的layer在父控件当中的位置的.
          所以它的坐标原点.以父控件的左上角为(0.0)点.

anchorPoint:它是决点CALayer身上哪一个点会在position属性所指的位置
           anchorPoint它是以当前的layer左上角为原点(0.0)
           它的取值范围是0~1,它的默认在中间也就是(0.5,0.5)的位置.
           anchorPoint又称锚点.就是把锚点定到position所指的位置.
           
两者结合使用.想要修改某个控件的位置,我们可以设置它的position点.
           设置完毕后.layer身上的anchorPoint会自动定到position所在的位置.

还是觉得很蒙圈吗?好嘛,我也比较懵

看代码咯:

@interface ViewController ()
// 这是直接拖得一个view
@property (weak, nonatomic) IBOutlet UIView *orangeView;

@property (nonatomic, weak) CALayer *layer;
@end

---------------------华丽的分割线-----------
- (void)viewDidLoad {
    [super viewDidLoad];

    
    CALayer *layer = [CALayer layer];
    layer.frame = CGRectMake(200, 200, 100, 100);
    layer.backgroundColor = [UIColor redColor].CGColor;
    
    self.layer = layer;
    [self.view.layer addSublayer:layer];
    
    //UIView的center,就是它内部layer的position.
    NSLog(@"center = %@",NSStringFromCGPoint(self.orangeView.center));
    NSLog(@"position = %@",NSStringFromCGPoint(self.orangeView.layer.position));
}

#这两个输出是一样的喔《证据有图为证》



// 这个呃,这个我不知道怎么解释这个方法,常用的。
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
  // self.layer.position = CGPointMake(200, 200);
   
    NSLog(@"center = %@",NSStringFromCGPoint(self.orangeView.center));
    NSLog(@"position = %@",NSStringFromCGPoint(self.orangeView.layer.position));
    
    self.orangeView.layer.anchorPoint = CGPointMake(0.5, 0);
    
    
}
界面显示 输出的结果 界面显示结果

聪明的一休,休息,休息~

上一篇下一篇

猜你喜欢

热点阅读