【发布时间】:2014-10-03 02:24:37
【问题描述】:
这里是objective c 和swift 的两个代码,都是一样的。 使用objective c它可以正确设置动画比例,但很快它就会跳转到最终值,我认为这是一个错误,有人可以测试和验证它吗?
目标 C
UIView *testView = [[UIView alloc] initWithFrame:CGRectMake(200, 200, 100, 100)];
testView.backgroundColor = [UIColor greenColor];
[self addSubview:testView];
CAKeyframeAnimation * transformAnim = [CAKeyframeAnimation animationWithKeyPath:@"transform"];
transformAnim.values = @[[NSValue valueWithCATransform3D:CATransform3DMakeRotation(3 * M_PI/180, 0, 0, -1)],
[NSValue valueWithCATransform3D:CATransform3DConcat(CATransform3DMakeScale(1.5, 1.5, 1), CATransform3DMakeRotation(3 * M_PI/180, 0, 0, 1))],
[NSValue valueWithCATransform3D:CATransform3DMakeScale(1.5, 1.5, 1)],
[NSValue valueWithCATransform3D:CATransform3DConcat(CATransform3DMakeScale(1.5, 1.5, 1), CATransform3DMakeRotation(-8 * M_PI/180, 0, 0, 1))]];
transformAnim.keyTimes = @[@0, @0.349, @0.618, @1];
transformAnim.duration = 1;
[testView.layer addAnimation:transformAnim forKey:@"test"];
斯威夫特
let testView = UIView(frame: CGRectMake(200, 200, 100, 100))
testView.backgroundColor = UIColor.greenColor()
self.addSubview(testView)
var transformAnim = CAKeyframeAnimation(keyPath:"transform")
transformAnim.values = [NSValue(CATransform3D: CATransform3DMakeRotation(3 * CGFloat(M_PI/180), 0, 0, -1)),
NSValue(CATransform3D: CATransform3DConcat(CATransform3DMakeScale(1.5, 1.5, 1), CATransform3DMakeRotation(3 * CGFloat(M_PI/180), 0, 0, 1))),
NSValue(CATransform3D: CATransform3DMakeScale(1.5, 1.5, 1)),
NSValue(CATransform3D: CATransform3DConcat(CATransform3DMakeScale(1.5, 1.5, 1), CATransform3DMakeRotation(-8 * CGFloat(M_PI/180), 0, 0, 1)))]
transformAnim.keyTimes = [0, 0.349, 0.618, 1]
transformAnim.duration = 1
testView.layer.addAnimation(transformAnim, forKey: "transform")
这是 objc 动画,它按预期工作
这是快速动画,缩放变换只是跳跃
【问题讨论】:
-
动画应该做什么?我想确保我玩的东西朝着正确的方向发展。
-
@MinnesotaSteve 它应该为视图设置动画,并为旋转设置动画。使用 objc 可以正常工作,但旋转动画效果很好,但它只是跳转到最终比例而没有动画
-
好的,+1 制作漂亮的 gif 动画来说明问题! :)
-
您是否有任何此项目中可能会影响此的其他代码?尝试测试 only 代码是我提供的代码。
-
根据给出的信息无法重现。在此基础上投票结束问题。
标签: uiview swift core-animation transform calayer