bezierPath moveToPoint错误的坐标系

时间:2014-11-11 12:06:27

标签: ios objective-c uibutton core-animation uibezierpath

我试图沿着任意路径设置按钮动画。为此,我需要创建一个使用BezierPath for。的路径。

然而,每当我将moveToPoint设置为0,0而不是从屏幕的左上角开始动画时,按钮会出现一些奇怪的现象,按钮会显示在顶部并朝向左侧,因此它只是部分可见。

这里发生了什么? moveToPoint是否使用其他坐标系?

按钮的锚点设置为标准顶部,左侧。

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    bezierPath = [[UIBezierPath alloc]init];
    [bezierPath moveToPoint:CGPointMake(0, 0)];
    [bezierPath addLineToPoint:CGPointMake(52, 83)];
    [bezierPath addLineToPoint:CGPointMake(45, 59)];
    [bezierPath addLineToPoint:CGPointMake(65, 30)];
}

-(void)randomAnimation
{
    CAKeyframeAnimation* keyframeAnimation = [CAKeyframeAnimation animationWithKeyPath:@"position"];
    keyframeAnimation.duration = 4.0;
    keyframeAnimation.path = [bezierPath CGPath];
    [self.rndBtn.layer addAnimation:keyframeAnimation forKey:@"position"];
}

1 个答案:

答案 0 :(得分:1)

您可以为图层的位置属性设置动画,默认情况下,该属性设置为图层的中心。如果您将按钮的图层中心设置为0,0,它将位于屏幕边缘的中心位置,并且半截。

您需要将起点设置为width / 2,height / 2。或者,您可以移动图层的anchorPoint,但这会产生副作用。