画像がほぼ全画面表示で、ナビゲーション コントローラー、ツールバー、ボタン (画像間を移動するため)、およびスライダー (画像間をすばやく移動するため) がすべてフェードアウトする画像ギャラリー タイプのビューをセットアップしようとしています。相互作用し、タップで戻ります。私がこれまでに持っているもの(これを行う正しい方法にさえ近づいていないと確信しています。私は初心者のようなものです)は次のとおりです。
-(void)fadeOutViews{
[self fadeOutView:rightButton];
[self fadeOutView:leftButton];
[self fadeOutView:mySlider];
mySlider.enabled = NO;
[self fadeOutView:myToolbar];
[self fadeOutView:self.navigationController.navigationBar];
}
-(void)fadeOutView:(UIView *)view{
view.alpha = 1;
[UIView beginAnimations:nil context:nil];
[UIView setAnimationCurve:UIViewAnimationCurveEaseIn];
[UIView setAnimationDelegate:self];
[UIView setAnimationDuration:2];
view.alpha = 0;
[UIView commitAnimations];
}
-(void)stopFadeOut{
[rightButton.layer removeAllAnimations];
[leftButton.layer removeAllAnimations];
[mySlider.layer removeAllAnimations];
[myToolbar.layer removeAllAnimations];
[self.navigationController.navigationBar.layer removeAllAnimations];
}
-(void)resetToInitialConfigurationWithDelay:(int)delay{
if (buttonWasPressed){
delay = 4;
buttonWasPressed = NO;
}
rightButton.alpha = 1;
leftButton.alpha = 1;
mySlider.alpha = 1;
myToolbar.alpha = 1;
self.navigationController.navigationBar.alpha = 1;
mySlider.enabled = YES;
[self stopFadeOut];
[self performSelector:@selector(fadeOutViews) withObject:nil afterDelay:delay];
}
したがって、理論的には、初期状態にリセットします (遅延は、ボタンを使用して進むときに画像がフェードインおよびフェードアウトするためです。そのため、ボタンを押した後にフェードする前に、より多くの時間が必要です。そうしないと、フェードがすぐに開始されます)新しい画像がロードされた後. これによりすべてが元の状態にリセットされ, フェードのプロセスが再び開始されます. そして, フェードプロセスを停止する必要がある何かが発生した場合, stopFadeOut はすべてのアニメーションを削除します. たとえば, タップが発生した場合:
- (IBAction)tapOccurs:(id)sender {
[self stopFadeOut];
[self resetToInitialConfigurationWithDelay:2];
}
以前のアニメーションはすべて停止され、プロセスが再開されます。または、少なくともそれが理論です。実際には、たとえば、すばやく連続して数回タップすると、フェードしたビューが一時的にフェードし始め、リセットが何度も繰り返されるため、最終的に完全にフェードアウトするまで、点滅しているように見えます。おそらく問題はアニメーションが遅れていることだと思いましたが、 removeAllAnimation 呼び出しはそうではなかったので、 [self stopFadeOut]; を置き換えました。with [self performSelector:@selector(stopFadeOut) withObject:nil afterDelay:2];
しかし、結果は同じでした。stopFadeOut が呼び出されない場合の動作はまったく同じであるため、何らかの理由で removeAllAnimations 呼び出しが機能しないという結論しか得られません。何か案は?