我使用图层属性为CAAnimation动画我的UIImageView,如下所示:
[imageView.layer addAnimation:pathAnimation forKey:[NSString stringWithFormat:@"pathAnimation%@",objId]];
但是在我的动画结束时(在物体从原点移动之后),当我读取框架的X Y坐标或中心坐标时,它们看起来总是原始的,而不是对象移动到的那些。
如何读取图层的坐标,以便确定移动物体的正确位置?
这是我的代码:
UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(10, 10, 50, 50)];
imageView.image = [UIImage imageNamed:@"banner1.jpg"];
imageView.animationDuration = 2;
imageView.animationRepeatCount = 0;
imageView.tag = 100000;
imageView.layer.frame = imageView.frame;
[self.view addSubview:imageView];
CAKeyframeAnimation *pathAnimation = [CAKeyframeAnimation animationWithKeyPath:@"position"];
pathAnimation.duration = 2.0f;
pathAnimation.delegate=self;
pathAnimation.calculationMode = kCAAnimationPaced;
pathAnimation.fillMode = kCAFillModeForwards;
pathAnimation.removedOnCompletion = NO;
CGMutablePathRef pointPath = CGPathCreateMutable();
CGPathMoveToPoint(pointPath, NULL, 100, 100);
CGPathAddLineToPoint(pointPath, NULL, 300, 200);
CGPathAddLineToPoint(pointPath, NULL, 200, 150);
pathAnimation.path = pointPath;
CGPathRelease(pointPath);
[imageView.layer addAnimation:pathAnimation forKey:@"pathAnimation"];
[imageView release];
答案 0 :(得分:2)
如果为图层设置动画,则包含图层的视图将保留在同一位置,因此框架将保持不变。图层也有框架,边界和位置属性,因此请尝试读取图层的属性。
编辑:
我在CAKeyframeAnimation类参考中找到了以下解释。
在制作动画时,它会使用指定的插值计算模式更新渲染树中属性的值。
并且知道什么是渲染树,我在这里找到它。
似乎值在渲染树中得到更新,并且渲染树与展示和私有不同,我们无法访问它。
以下是上述链接的最后一段。
在动画事务处理过程中,您可以查询CALayer的实例以查找其相应的表示层。如果您打算更改当前动画并希望从当前显示的状态开始新动画,这将非常有用。
基于此,可以根据您提供的路径计算图层的新位置,并相应地设置表示层框架属性。
如果您发现任何更新,请写在这里.....
答案 1 :(得分:1)
这是自我解释声明(CALayer.h
):
返回包含所有属性的图层副本 在当前交易开始时,使用任何活动动画 应用。这给出了与图层版本非常接近的近似值 当前显示的。如果图层尚未返回,则返回nil 已经承诺了。
尝试以任何方式修改返回图层的效果是 未定义。
返回的sublayers
,mask
和superlayer
属性
layer返回这些属性的表示版本。这个
进行只读层方法。例如,呼叫-hitTest
:
在-presentationLayer
的结果将查询演示文稿
层树的值。
- (id)presentationLayer;