Xcode 6 beta 7 UIView.animateWithDuration 调用中的额外参数“usingSpringWithDamping”

Posted

技术标签:

【中文标题】Xcode 6 beta 7 UIView.animateWithDuration 调用中的额外参数“usingSpringWithDamping”【英文标题】:Xcode 6 beta 7 UIView.animateWithDuration Extra argument 'usingSpringWithDamping' in call 【发布时间】:2014-09-05 03:56:48 【问题描述】:

我只在使用 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 中还不支持使用弹簧动画?我知道它还处于早期......

【问题讨论】:

"是否有可能在 Swift 中还不支持使用弹簧动画" 不,这是不可能的;支持。与 Swift 一样,问题在于您没有转换为正确的参数数据类型。 您没有提供足够的信息,例如textAnimationVelocity 是什么。这很关键,因为 Swift 对参数数据类型非常严格。 【参考方案1】:

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

我有这个:

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

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

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

【讨论】:

感谢您的评论,也为我解决了问题。在完成块中使用的 UIColor 构造函数中出现错误:self.myView.backgroundColor = UIColor(0.92, 0.92, 0.92, 1) 必须将其替换为:self.myView.backgroundColor = UIColor(red:0.92, green:0.92, blue:0.92, alpha:1) 但是要找出问题所在,必须将代码移到完成块之外,更正它然后将其移回那里。 【参考方案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 )

因为usingSpringWithDampinginitialSpringVelocity 都是CGFloat。请参考这个

这里发生的情况是 CGFloatFloatDouble 的类型别名,具体取决于您构建的是 32 位还是 64 位。这正是 Objective-C 的工作原理,但在 Swift 中存在问题,因为 Swift 不允许隐式转换。

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

-克里斯

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

【讨论】:

添加带有持续时间和延迟的显式声明,我没有收到@Kyle 的错误,因此错过了持续时间和延迟的类型。但他是对的,明确声明是首选。【参考方案3】:

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

【讨论】:

【参考方案4】:
  UIView.animateWithDuration(1.0, delay: 0.0, usingSpringWithDamping: 0.8, initialSpringVelocity: 1.0, options: nil, animations:  , completion: (animated:Bool) -> () in transitionContext.completeTransition(true) );

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

【讨论】:

【参考方案5】:

这个错误刚刚把我推到了边缘。为什么还要浪费时间去猜测实际的错误是什么,只需使用它,并将其桥接到 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)

【讨论】:

以上是关于Xcode 6 beta 7 UIView.animateWithDuration 调用中的额外参数“usingSpringWithDamping”的主要内容,如果未能解决你的问题,请参考以下文章

Xcode 8 Beta 6 不支持 iOS 10 Beta 7 sdk

更新到 Xcode 7 Beta 5 并收到此错误:失败,退出代码 6

Xcode 7 beta (5 & 6) 看不到某些 VC 的 IBOutlets

应用程序传输安全 Xcode 7 beta 6

如何在 Xcode 6.0 Beta 中运行 iOS 7.1 模拟器?

在 XCode 6 beta 7 中从 Swift 在 iOS 中打印