The relationship between AnchorPoint and Position in Layer

I felt difficult to understand the relationship between AnchorPoint and Position in Layer. So I found this in stackoverflow. And it helped me a lot to understand it.

Through my testing I got some principle.

  • If a layer’s frame is already defined , the anchorpoint doesn’t affect the position of the layer.
  • If you change an anchorPoint of a layer which already has a frame and a position , the origin of the layer’s frame will be changed by the setting of anchorPoint.
    let view = UIView(frame: CGRectMake(0,0,400,400))
    view.backgroundColor = UIColor.grayColor()
    let label1 = UILabel(frame: CGRectMake(100,100,100,20))
    label1.text = "Label1"
    print("AnchorPoint: (label1.layer.anchorPoint) , Frame: (label1.layer.frame)")
    print("Position: (label1.layer.position)")
    label1.backgroundColor = UIColor.whiteColor()
    view.addSubview(label1)
    view
    
    // AnchorPoint to (1,1) 
    
    label1.layer.anchorPoint = CGPoint(x: 1.0, y: 1.0)
    label1.text = "Label1"
    print("AnchorPoint: (label1.layer.anchorPoint) , Frame: (label1.layer.frame)")
    view.addSubview(label1)
    view
    
  • If you set up a layer’s anchorPoint before you set up the frame of the layer, the position of the layer will be affected by setting of the anchorPoint.
    let label2 = UILabel()
    label2.layer.anchorPoint = CGPoint(x: 1.0, y: 1.0)
    label2.frame = CGRect(origin: CGPoint(x: 100,y: 100), size: CGSize(width: 100.0, height: 20.0))
    print("AnchorPoint: (label2.layer.anchorPoint) , Frame: (label2.layer.frame)")
    print("Position: (label2.layer.position)")
    
    let label3 = UILabel()
    label3.layer.anchorPoint = CGPoint(x: 0.0, y: 0.0)
    label3.frame = CGRect(origin: CGPoint(x: 100, y: 100), size: CGSize(width: 100.0, height: 20.0))
    print("AnchorPoint: (label3.layer.anchorPoint) , Frame: (label3.layer.frame)")
    print("Position: (label3.layer.position)")
    

Leave a Reply