当我使用时:
CALayer *hitLayer =
[[self.view.window.layer presentationLayer] hitTest:pointOfTouch];
然后我探索图层,发现当前动画的所有属性都设置为最终状态。
我正在测试的图层是iOS 4.3中UIImageView的CALayer。 我还有一个关于UIImage视图的IBOutlet。所以我做了同样的测试:
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);
我仍然得到相同的结果。[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>
这可能有点简单,但我不在乎,谢谢,
答案 0 :(得分:0)
我有一个解决方案。
我刚刚探索了一个想法,我意识到我没有检查CABasicAnimation(s)在表示层中的行为是否正确......以及......它们是否正确。
我不得不在显式动画中做那些2,因为不支持隐式。
所以我为图像中心和zPosition制作了一些更基本的动画。 现在我在表示层中有了这些信息。
所以现在我可以得出结论,如果你需要获得一个有效的表示层,你绝对需要使用CAAnimation进行EXPLICIT动画。
我有点难过,因为我喜欢UIView animateWithDuration:......