iPad用のタブ付きアプリケーションがあります。最初のタブには、現在アクティブなメニューボタンを強調表示するポインタが付いた別のメニューがあります。ボタンをタップすると、ポインター(UIImage)が所定の位置にアニメーション化されます。
問題は、ハイライトされた画像を元の/デフォルトのボタン以外のボタンに残して、アプリケーションの別のタブに移動した後、再び元に戻すと、画像がデフォルトの場所に戻ってしまうことです。ただし、別のボタンをタップすると、画像が間違った方向に移動します。画像が戻っても古い座標が残っているからだと思いますか、それともその逆ですか?それは少しヒットとミスであり、iPadで直接テストする場合とシミュレータでテストする場合の動作が異なります。
私は絶対座標から始めて、プロセス全体を通してそれらに固執する必要があると思います。しかし、CGAffine関数を使用してそれを実現する方法について頭を悩ませることはできません。
これが私の現在のコードです
- (IBAction)diplayForm1:(id)sender {
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.5];
buttonHighlightImage.transform = CGAffineTransformMakeTranslation(0, 0);
[UIView commitAnimations];
}
- (IBAction)diplayForm2:(id)sender {
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.5];
buttonHighlightImage.transform = CGAffineTransformMakeTranslation(0, 80);
[UIView commitAnimations];
}
- (IBAction)diplayForm3:(id)sender {
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.5];
buttonHighlightImage.transform = CGAffineTransformMakeTranslation(0, 160);
[UIView commitAnimations];
}
編集 - - -
@Mundi私はあなたが提案したコードを試しました。newFrameとは、.h(「sfh」と呼びます)で行った新しいUIImageViewとプロパティを定義し、次に.mで@synthesizeを定義することを意味すると想定しています。
これは.mの私のコードです
-(void)viewWillAppear:(BOOL)animated {
// The "pointer" and the "old" frame are the same so I thought it pointless to do
// selectedFormHighlight.frame = selectedFormHighlight.frame;
// I tried anyway and also tried this and many other combinations
selectedFormHighlight.frame = sfh.frame;
}
-(void)viewDidAppear:(BOOL)animated {
[UIView beginAnimations:nil context:NULL];
[UIView animateWithDuration:0.3 animations:^{
selectedFormHighlight.frame = CGRectMake(0,0,0,0);
}];
[UIView commitAnimations];
}
これを実行すると、ポインタが画面(左上)からアニメーション化され、戻りません。viewWillAppearとviewDidAppearで考えられるすべての可能な組み合わせを試しましたが、違いはありません。viewDidAppearの他の行を削除しようとしましたが、それでも同じことを行います。
ユーザーが別の画面から戻ったときに、ポインターを元の(デフォルトの)位置からアニメーション化することを提案していると思います。私はそれを望んでいません、それは彼らがアニメーションなしでそれを残したのと同じ場所に単にとどまるべきです。または、少なくとも彼らが気付かないうちにそこに戻します。唯一のアニメーションは、そのビュー内の別のボタンをタップすることを選択した場合です。