核心动画,意想不到的动画位置和hitTest值
当我使用:
CALayer *hitLayer = 
[[self.view.window.layer presentationLayer] hitTest:pointOfTouch];   然后我探索这一层,发现现在所有动画属性都设置为最终状态。 我正在测试的图层是iOS 4.3中UIImageView的CALayer。 我也有一个IBOutlet到那个UIImage视图。 所以我做了这样的测试:
  CALayer *l = [self.topLeft.layer presentationLayer];
  NSLog(@"presentation layer frame for eloise is : %@", [self cgRectDescription:l.frame]);
  NSLog(@"and xPosition = %.2f, yPosition = %.2f & zPosition = %.2f", l.position.x, l.position.y, l.zPosition);  我仍然得到相同的结果。 我在(void)touchesBegan测试这个:withEvent:当图像移动时。
这是我正在使用的动画
[UIImageView animateWithDuration:aDuration
                            delay:0
                          options:UIViewAnimationOptionCurveEaseIn | UIViewAnimationOptionAllowUserInteraction | UIViewAnimationOptionBeginFromCurrentState
                       animations:^(void) {
                                  aIv.center = imageStartingPoint;
                                  aIv.layer.zPosition = 0;
                                  imageStartingPoint = CGPointZero;
                                  centerImage = nil;
                              CABasicAnimation *ba = [CABasicAnimation animationWithKeyPath:@"shadowOffset"];
                              ba.fromValue = [NSValue valueWithCGSize:aIv.layer.shadowOffset];
                              ba.toValue = [NSValue valueWithCGSize:CGSizeMake(0, 0)];
                              aIv.layer.shadowOffset = CGSizeMake(0, 0);
                              ba.duration = aDuration;
                              ba.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
                              [aIv.layer addAnimation:ba forKey:@"shadowOffset"];
                              ba = [CABasicAnimation animationWithKeyPath:@"shadowRadius"];
                              ba.fromValue = [NSNumber numberWithFloat:aIv.layer.shadowRadius];
                              ba.toValue = [NSNumber numberWithFloat:0];
                              aIv.layer.shadowRadius = 0;
                              ba.duration = aDuration;
                              ba.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
                              [aIv.layer addAnimation:ba forKey:@"shadowRadius"];
                       } 
                       completion:NULL];    </pre> </code>
这可能是一个简单的事情,但我没有想法,谢谢,
我有一个解决方案。
  我刚刚探索了一个想法,我意识到我没有检查CABasicAnimation(s)在表示层中的行为是否正确的值,以及......他们是否正确。 
  我必须在显式动画中执行这2个操作,因为不支持隐式操作。 
所以我为图像中心和zPosition做了一些更基本的动画。 现在我在表示层中有信息。
所以现在我可以得出结论,如果你需要得到一个有效的表示层,你绝对需要用CAAnimation来做EXPLICIT动画。
我有点伤心,因为我喜欢UIView animateWithDuration:...
链接地址: http://www.djcxy.com/p/74209.html上一篇: Core Animation, unexpected animated position and hitTest values
