iOSアプリでアニメーションを作成しようとしています。このアニメーションでは、新しいビューが画面上で左からスライドし、メインビューが右にスライドしてスペースを確保します。メインビューはビューコントローラのトップビューのサブビューであり、スライドインするサイドビューは別のxibファイルからロードされます。
関連する場合は、メインビューコントローラーのviewDidLoadメソッドから呼び出されたサイドビューをロードするためのコードを次に示します。
sideViewController = [[SideViewController alloc] init];
[sideViewController loadView];
sideView = sideViewController.topView;
[self.view addSubview:sideView];
sideView.hidden = YES;
sideView.frame = CGRectMake(-200, 0, 200, 460);
そして、2つのビューをアニメーション化するために呼び出されるコードは次のとおりです。
sideView.hidden = NO;
[UIView animateWithDuration:0.25f
animations:^{
mainView.frame = CGRectMake(200, 0, 320, 460);
sideView.frame = CGRectMake(0, 0, 200, 460);
}];
これは十分に単純なようです。しかし、何らかの理由で、sideViewのみがアニメートします。mainViewはどこにも移動しません。さらに混乱させるために、sideViewを移動するアニメーションブロックの行をコメントアウトすると、mainViewのアニメーションが機能し始めます。
誰かが何が悪いのか知っていますか?私が読んだすべての検索とドキュメントから、私がしていることはうまくいくはずです。単純なアニメーションになると思っていたものが、何時間もの欲求不満に変わりました。どんな助けでも大歓迎です!
編集:
Guo Luchuanの提案から離れて、2つのUIViewの異なるプロパティをアニメーション化してみました。ほとんど同じ結果が得られましたが、両方の変換プロパティのアニメーション化はほぼ機能しました。その場合、両方のUIViewがアニメーション化されますが、mainViewは間違ったことをしました。アニメーションは、別の位置で開始され、間違った場所で終了しました。私が指示した変換を実行しているように見えますが、ベクトル計算で表されるこの位置から開始します。
starting_point - 0.5 * total_translation
で終わることを意味します:
starting_point + 0.5 * total_translation
ただし、sideViewは正しくアニメーション化されます。
これはうっとうしいです。このようにiOSでアニメーションを実行するのがとても壊れていることに気づきませんでした。次に試すのはCABasicAnimationを使用することですが、非常に単純なもののためにこのような低レベルのAPIを試す必要があるのは不幸です。