2

我只有在使用 Swift 时才会收到这个错误,我想知道目前是否还有其他人有这个问题

Extra argument 'usingSpringWithDamping' in call

UIView.animateWithDuration(NSTimeInterval(doctorPracticeDuration), delay: 0.0, usingSpringWithDamping: 0.3, initialSpringVelocity: textAnimationVelocity, options: .CurveEaseInOut, animations: {}, completion: {success in })

我正在使用 Xcode 6 beta 7

有趣的是,这有效:

UIView.animateWithDuration(NSTimeInterval(doctorPracticeDuration), delay: 0.0, options: .Repeat, animations: {}, completion: {finished in })

Swift 中是否可能不支持使用弹簧动画?我知道它还很早...

4

5 回答 5

3

我花了很多时间来解决这个问题。Swift 有可怕的错误信息。就我而言,问题与完成块有关。

我有这个:

label.transform = CGAffineTransformMakeTranslation(label.frame.size*2, 0)

注意问题?我将 CGSize 乘以 2。修复了它并且它起作用了。

我的建议是检查您的动画/完成块,因为问题很可能来自那里。

于 2014-11-23T17:09:48.717 回答
2

解决方案:

let doctorPracticeDuration : NSTimeInterval = 1.0
let delay :NSTimeInterval = 1.0
let damping : CGFloat = 0.3
let textAnimationVelocity : CGFloat = 0.5


UIView.animateWithDuration(doctorPracticeDuration,
     delay: 0.0, 
     usingSpringWithDamping: damping, 
     initialSpringVelocity: textAnimationVelocity, 
     options: .CurveEaseInOut, 
     animations: {}, 
     completion: {success in })

因为usingSpringWithDamping两者initialSpringVelocity都是CGFloat。请参考这个

这里发生的是CGFloat类型别名,Float或者Double取决于您是为 32 位还是 64 位构建。这正是 Objective-C 的工作方式,但在 Swift 中存在问题,因为 Swift 不允许隐式转换。

我们意识到这个问题并认为它很严重:我们现在正在评估几种不同的解决方案,并将在以后的测试版中推出一个。正如您所注意到的,您今天可以通过转换为 Double 来解决这个问题。这是不优雅但有效的:-)

-克里斯

来自https://devforums.apple.com/message/998222

于 2014-09-07T12:31:53.470 回答
0

这个错误刚刚把我推到了边缘。为什么还要浪费时间试图猜测实际错误是什么,只需使用它,并将其桥接到 swift:

@interface UIView (SFU)

+ (void)animate:(double)duration delay:(double)delay damping:(double)damping velocity:(double)velocity options:(UIViewAnimationOptions)options animations:(void (^)(void))animations completion:(void (^)(BOOL finished))completion;

@end

@implementation UIView (SFU)

+ (void)animate:(double)duration delay:(double)delay damping:(double)damping velocity:(double)velocity options:(UIViewAnimationOptions)options animations:(void (^)(void))animations completion:(void (^)(BOOL finished))completion
{
    [self animateWithDuration:(NSTimeInterval)duration
                        delay:(NSTimeInterval)delay
       usingSpringWithDamping:(CGFloat)damping
        initialSpringVelocity:(CGFloat)velocity
                      options:options
                   animations:animations
                   completion:completion];
}

@end

没有更多错误:

UIView.animate(
    transitionDuration(transitionContext),
    delay: 0,
    damping: 1.2,
    velocity: 15,
    options: .allZeros,
    animations: {
        srcVC.view.center.x += srcVC.view.bounds.width
    }) { finished in
        transitionContext.completeTransition(finished)
}
于 2014-12-05T19:43:11.807 回答
0

我遇到了这个问题,上面的解决方案没有解决它。这是因为您需要确保同时使用 NSTimeInterval 持续时间和延迟。所以上面的解决方案是正确的,但请确保您为所有参数使用正确的参数类型。

于 2014-09-08T03:30:25.737 回答
0
  UIView.animateWithDuration(1.0, delay: 0.0, usingSpringWithDamping: 0.8, initialSpringVelocity: 1.0, options: nil, animations: { }, completion: {(animated:Bool) -> () in transitionContext.completeTransition(true) });

我遇到了类似的问题,上面的行对我有用。对我来说,问题是完成块缺少参数声明。通过完整的块参数声明(名称、类型和括号),它将起作用。

于 2014-09-17T06:23:04.750 回答