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 ベータ 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です。これを参照してください

ここで起こっているのは、32 ビットまたは 64 ビット用にビルドしているかどうかに応じて、またはCGFloatどちらかの typealias であるということです。これはまさに Objective-C の動作ですが、Swift では暗黙的な変換が許可されていないため、Swift では問題があります。FloatDouble

私たちはこの問題を認識しており、深刻であると考えています。現在、いくつかの異なるソリューションを評価しており、後のベータ版で 1 つを展開する予定です。お気づきのように、今日は Double にキャストすることでこれに対処できます。これはエレガントではありませんが効果的です:-)

-クリス

https://devforums.apple.com/message/998222から

于 2014-09-07T12:31:53.470 に答える
0

このエラーは私を端から追い出しました..実際のエラーが何であるかを推測しようとして時間を無駄にするのはなぜですか?これを使用して、迅速に橋渡ししてください:

@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 に答える