修改anchorPoint而不想移动layer,在修改anchorPoint后再重新设置一遍frame就可以达到目的,这时position就会自动进行相应的改变。写成函数就是下面这样的:
- (void) setAnchorPoint:(CGPoint)anchorpoint forView:(UIView *)view{
CGRect oldFrame = view.frame;
view.layer.anchorPoint = anchorpoint;
view.frame = oldFrame;
}
总结:
1、position是layer中的anchorPoint在superLayer中的位置坐标。
2、互不影响原则:单独修改position与anchorPoint中任何一个属性都不影响另一个属性。
3、frame、position与anchorPoint有以下关系:
frame.origin.x = position.x - anchorPoint.x * bounds.size.width;
frame.origin.y = position.y - anchorPoint.y * bounds.size.height;
第2条的互不影响原则还可以这样理解:position与anchorPoint是处于不同坐标空间中的重合点,修改重合点在一个坐标空间的位置不影响该重合点在另一个坐标空间中的位置。
实现
修改anchor point
//修改anchor point 在左上角
[self setAnchorPoint:CGPointMake(0, 0) forView:self.aView];
//修改anchor point 在右上角
[self setAnchorPoint:CGPointMake(0, 1) forView:self.aView];
//修改anchor point 在左下角
[self setAnchorPoint:CGPointMake(1, 0) forView:self.aView];
//修改anchor point 在右下角
[self setAnchorPoint:CGPointMake(1, 1) forView:self.aView];
//修改anchor point 中心
[self setAnchorPoint:CGPointMake(0.5, 0.5) forView:self.aView];
添加动画,绕 anchor point 旋转动画
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"transform.rotation"];
animation.duration = 10;
animation.toValue = [NSNumber numberWithFloat:M_PI * 2];
animation.repeatCount = HUGE_VAL;
animation.duration = 1.0;
[self.aView.layer addAnimation:animation forKey:nil];
网友评论