私はSOの周りを検索していて、いくつかの関連する投稿を見つけましたが、(まだ)私の問題を解決したものはありません。
ストーリーボードにビュー設定があり、IBOuletを介して制約がフックされています。特定のアクションで、ビューは上に(または最初の位置に下に)移動する必要があります。私の一生の間、私はそれを適切に機能させることができません。自動レイアウトの前に、次のコードを実行しました。
- (void)animateStarBackground:(NSString *)animationID
finished:(NSNumber *)finished
context:(void *)context
myView:(UIView *)myView
xPos:(float)xPos
yPos:(float)yPos {
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.2];
[UIView setAnimationDelay:0.5];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
[UIView setAnimationDelegate:self];
myView.center = CGPointMake(xPos, yPos);
[UIView commitAnimations];
}
以前はうまく機能していましたが、とにかく...これがAutolayoutでは機能しなくなったことは誰もが知っています。だから私はそれを次のように変更しました:
-(void)animateButton:(UIView *)myView {
[UIView animateWithDuration:8.0f animations:^{
_viewConstA.constant = 45.0;
[myView layoutIfNeeded];
}];
}
アクションが発生すると、ストーリーボードで設定された初期位置から開始するのではなく、左上隅の1x1ピクセルのビューとして開始し、最後の休憩場所に向かって下向きにアニメーション化します(以前のように15ピクセル上に移動するのではありません)。意図したもの)。
ここで、[myViewlayoutIfNeeded]を取り出すと; 一部、アクションはビューを正確に正しい場所に配置します...しかし、そこではアニメーション化されません。ビューが表示されるとすぐにそこにあります。
最初の画面グラブは最初の場所です。2番目のグラブは、ビューの最終的な休憩場所になるはずです。3つ目は、間違った場所と方向からアニメートするビューです。
考え/コメント?私は一体何を間違っているのですか?これはとても簡単だと思いました...私は明らかな何かを見逃している必要があります。