私はたくさんのSOものとAppleの参考文献で検索しましたが、それでも私の問題を管理することができません。
実行中のアニメーションをキャンセルする方法は?私は最後のものを除いてすべてキャンセルすることができました...:/ここに私のコードスニペットがあります:
[UIImageView animateWithDuration:2.0
delay:0.1
options:UIViewAnimationOptionAllowUserInteraction
animations:^{
isAnimating = YES;
self.bigLetter.transform = CGAffineTransformScale(self.bigLetter.transform, 2.0, 2.0);
} completion:^(BOOL finished){
if(! finished) return;
[UIImageView animateWithDuration:2.0
delay:0.0
options:UIViewAnimationOptionAllowUserInteraction
animations:^{
self.bigLetter.transform = CGAffineTransformScale(self.bigLetter.transform, 0.5, 0.5);
} completion:^(BOOL finished){
if(! finished) return;
[UIImageView animateWithDuration:2.0
delay:0.0
options:UIViewAnimationOptionAllowUserInteraction
animations:^{
self.smallLetter.transform = CGAffineTransformScale(self.smallLetter.transform, 2.0, 2.0);
} completion:^(BOOL finished){
if(! finished) return;
[UIImageView animateWithDuration:2.0
delay:0.0
options:UIViewAnimationOptionAllowUserInteraction
animations:^{
self.smallLetter.transform = CGAffineTransformScale(self.smallLetter.transform, 0.5, 0.5);
}
completion:^(BOOL finished){
if (!finished) return;
//block letter buttons
[self.bigLetterButton setUserInteractionEnabled:YES];
[self.smallLetterButton setUserInteractionEnabled:YES];
//NSLog(@"vieDidLoad animations finished");
}];
}];
}];
}];
どういうわけか、smallLetter UIImageViewは適切に動作していません。(ボタンを介して)押されるとbigLetterがアニメーションを適切にキャンセルします...事前に感謝します:)
EDIT:このソリューションを使用しましたが、smallLetter UIImageViewの縮小にまだ問題があります-キャンセルしません... ソリューション
EDIT2:next/prevメソッドの最初にこれを追加しました:
- (void)stopAnimation:(UIImageView*)source {
[UIView animateWithDuration:0.01
delay:0.0
options:(UIViewAnimationOptionBeginFromCurrentState | UIViewAnimationOptionAllowUserInteraction)
animations:^ {
source.transform = CGAffineTransformIdentity;
}
completion:NULL
];
}
問題が残る...:/アニメーションチェーンの文字の最後のアニメーションを中断する方法がわかりません
次を呼び出すことにより、ビュー上のすべてのアニメーションを停止できます。
[view.layer removeAllAnimations];
(view.layerのメソッドを呼び出すには、QuartzCoreフレームワークをインポートする必要があります)。
すべてのアニメーションではなく特定のアニメーションを停止する場合、UIViewアニメーションヘルパーメソッドではなく、CAAnimationsを明示的に使用することが最善の策です。より細かく制御でき、名前で明示的にアニメーションを停止できます。
Apple Core Animationのドキュメントはここにあります:
IOS 10の場合、UIViewPropertyAnimatorを使用してアニメーション化します。 UIViewアニメーションを開始、停止、一時停止するメソッドを提供します。
let animator = UIViewPropertyAnimator(duration: 2.0, curve: .easeOut){
self.view.alpha = 0.0
}
// Call this to start animation.
animator.startAnimation()
// Call this to stop animation.
animator.stopAnimation(true)
ニックの答えに加えて、removeAllAnimationsの次のアイデアをスムーズにすることは非常に便利です。
[view.layer removeAllAnimations];
[UIView transitionWithView:self.redView
duration:1.0f options:UIViewAnimationOptionTransitionCrossDissolve animations:^{
[view.layer displayIfNeeded];
} completion:nil];
あなたはこれを試すことができます(Swiftで):
UIView.setAnimationsEnabled(false)
UIView.setAnimationsEnabled(true)
注:必要に応じて、これらの2つの呼び出しの間にコードを配置できます。たとえば、次のとおりです。
UIView.setAnimationsEnabled(false)
aview.layer.removeAllAnimations() // remove layer based animations e.g. aview.layer.opacity
UIView.setAnimationsEnabled(true)