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 )
因为usingSpringWithDamping
和initialSpringVelocity
都是CGFloat
。请参考这个
这里发生的情况是 CGFloat
是 Float
或 Double
的类型别名,具体取决于您构建的是 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