私の _palette のフレームが次のようなものであることを考慮すると:
_palette.frame = CGRectMake(0,480,320,200);
UIView を上下にスライドさせるためのコードがここにあります。
if(![_pallete superview]) {
[self.view addSubview:_pallete];
[self.view insertSubview:_tempViewPaletteListener belowSubview:_pallete];
[UIView animateWithDuration:0.3
animations:^{
_pallete.top -= kPaletteHeight;
}
completion:^(BOOL isFinished) {
}];
} else {
[UIView animateWithDuration:0.3
animations:^{
_pallete.top += kPaletteHeight;
}
completion:^(BOOL isFinished) {
[_tempViewPaletteListener removeFromSuperview];
[_pallete removeFromSuperview];
}];
}
*_tempViewPaletteListener は、タップ ジェスチャを使用してパレットを閉じるビューです*
問題は、ここで最初にコードを実行しようとすると、_palette ビューがすぐに固く表示されることです。私が期待したのは、_palette ビューを上にスライドすることです。
最初の試行の後は正常に動作しますが、
アップデート:
質問のタイトルを「UIView アニメーションが最初の試行でアニメーション化されませんか?」から変更しました。「重い初期化により、最初の試行で UIView アニメーションがアニメーション化されませんか?」
上記のコードは正常に動作します。アニメーションを呼び出す前に、パレット ビューをレイアウトし、RSColorPickerを追加するだけです。
- (void)layoutPaletteView {
if(!_colorPicker && !_brightnessSlider) {
// Create Color Picker and Brightness Slider
}
if(!_pallete) {
// Style the Palette View and add color picker and brightness slider as subview
}
}
そして、カラーピッカーを追加せず、アニメーション化するための単純なビューだけを追加すると、アニメーションが正常に機能することに気付きました (もちろん、それと同じくらい単純なはずです)。
問題は、カラー ピッカーの作成が重すぎることだと思います。これが、スライド アップのアニメーションを表示できない原因です。